Подтвердить что ты не робот

Как сделать жесты на iPhone?

Как реализовать жесты жесткого диска на iPhone? Я знаком с использованием сенсорных событий на iPhone, но я очень ленив и не хочу изобретать колесо для чего-то столь же широко распространенного, как жесты PINCH... Исходный код или ссылки на него были бы полезны.

4b9b3361

Ответ 1

Вам нужно реализовать его самостоятельно, используя некоторую базовую математику.

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

Это методы делегатов, которые необходимо реализовать в вашем приложении.

Вам нужно получить расстояние между двумя касаниями, затем рассчитать изменения расстояния в вашем собственном коде.

Математическое уравнение, которое вы используете для получения расстояния, называется dot product

Я просто хочу указать, что уравнение, которое они используют в приведенном учебнике, неверно. Я обновил его, чтобы включить абсолютное значение, которое пропущено в учебнике.

Это точечный продукт:

- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint
{
    float xDist = fromPoint.x - toPoint.x;
    float yDist = fromPoint.y - toPoint.y;

    float result = sqrt( pow(xDist,2) + pow(yDist,2) );
    return result;
}

Edit: Я допустил ошибку в своем предыдущем ответе... прошло некоторое время с тех пор, как я сделал какую-то математику.

Если вы не внесете квадрат корня результата, вы не получите истинного расстояния между точками. Это называется вычислением величины между двумя векторами.

Это правильный способ сделать это. Если вы хотите опустить sqrt, у вас не будет точного расстояния между двумя точками.

Если вы не отвечаете на квадрат ответа, ваш код будет работать, но он будет использовать измерения, которые намного превышают фактические значения. Поэтому в будущем, если вам нужно получить расстояние между двумя точками, оно вернет нечто вроде 90000 вместо фактического расстояния в пикселях, которое будет 300 пикселей.

Ответ 2

Довольно точно, что представленные здесь решения были устарели, в пользу использования нового класса UIPinchGestureRecognizer в iOS 3.2 и более поздних версиях.

Ответ 3

hmmm..... кажется, что некоторые люди крайне запутаны в том, как использовать основную математику. точечный продукт абсолютно бесполезна и просто путает проблемы. точка между двумя векторами используется для вычисления угла между ними.

Вам действительно нужно использовать теорему pythagorus. Точка НИЧЕГО не делает, чтобы найти расстояние между точками - только пифагорическое!

Ответ 4

Если вы ищете простой пример кода жесткого щели, я использую метод, описанный Броком в примере приложения Здесь я описываю (во второй-последней и последней версиях приложения на этой странице). В этом примере жесты пинча используются для масштабирования пары слоев Core Animation.

Все, что он описывает, поскольку расчет расстояния - это просто теорема Пифагора, применяемая между двумя точками (с расстояниями X и Y как две грани правого треугольника).