Жест вращения двумя пальцами на iPhone?

Я работаю над приложением для iPhone с множеством различных жестов, которые вы можете сделать. В настоящее время есть выбор / перетаскивание одним пальцем, прокрутка двумя пальцами и увеличение / уменьшение масштаба двумя пальцами. Я хочу добавить вращение двумя пальцами (ваши пальцы поворачивают точку между ними), но я могуне могу понять, как заставить его работать правильно. Все остальные жесты были линейными, так что они сводились лишь к использованию точечного или перекрестного произведения.

я думаю, что яМы должны сохранить наклон между двумя предыдущими точками каждого пальца, и если угол между векторами близок к 90, то существует вероятность вращения. Если угол перемещения следующего пальца также близок к 90, а направление вектора на одном пальце изменилось положительно и изменилось отрицательно, то вы 'у нас есть ротация. Проблема в том, что мне нужно очень четкое различие между этим жестом и остальными - и вышеизложенноедостаточно далеко удалены.

Какие-либо предложения?

РЕДАКТИРОВАТЬ: Здесь 'Как я это сделал в векторном анализе (в отличие от предложенного ниже предложения о сопоставлении пикселей, обратите внимание, что здесь я использую мою векторную структуру, вы сможете догадаться, что делает каждая функция):

//First, find the vector formed by the first touch's previous and current positions.
struct Vector2f firstChange = getSubtractedVector([theseTouches get:0], [lastTouches get:0]);
//We're going to store whether or not we should scroll.
BOOL scroll = NO;

//If there was only one touch, then we'll scroll no matter what.
if ([theseTouches count]  0)
            {
                printf("Rotate right.\n");
            }
            else
            {
                printf("Rotate left.\n");
            }
        }
        else
        {
            //Get the dot product of the differences of the two points and the two vectors.
            struct Vector2f differenceChange = getSubtracted(&secondChange, &firstChange);
            float dotDifference = getDot(&previousDifference, &differenceChange);
            if (dotDifference > 0)
            {
                printf("Zoom in.\n");
            }
            else
            {
                printf("Zoom out.\n");
            }
        }
    }
}

if (scroll)
{
    prinf("Scroll.\n");
}

Вы должны отметить, что если выЕсли вы просто манипулируете изображением или выполняете прямое вращение / масштабирование, то вышеприведенный подход вполне подойдет. Однако, если выты мне нравишьсяиспользовать жест, чтобы вызвать что-то, что требует времени для загрузки, а затемвероятно, что тыЯ хочу избежать действия, пока этот жест не будет активирован несколько раз подряд. Разница между каждым с моим кодом все еще не является совершенно отдельной, так что иногда в кучу зумов выЯ получу вращение, или наоборот.

Ответы на вопрос(2)

Ваш ответ на вопрос