Как определяется значение шкалы UIPinchGestureRecognizer? - PullRequest
4 голосов
/ 02 ноября 2011

Мне было интересно, знает ли кто-нибудь, как определяется значение шкалы UIPinchGestureRecognizer, или есть ли формула, которую я мог бы использовать для вычисления нового значения шкалы?

У меня есть приложение, в котором я прикрепляю UIPinchGestureRecognizer к imageView, и в некоторых конкретных случаях мне нужно вручную перенастроить шкалу, если она сжимает imageView, чтобы она проходила мимо определенной точки экрана. , Спасибо.

Ответы [ 2 ]

5 голосов
/ 02 ноября 2011

Учитывая две начальные точки (касания), вычислите расстояние между ними, используя теорему Пифагора.Пусть это расстояние будет называться "initial distance".

. Для каждого последующего обновления точек пересчитывайте расстояние между точками, и пусть это расстояние будет называться "new distance".

scale = "new distance" / "initial distance". 

Если кто-то на самом деле не знает ... Теорема Пифагора:

sqrtf(powf(b.x - a.x, 2.0f) + powf(b.y - a.y, 2.0f))

Понять формулу масштабирования просто ... есливаши пальцы в два раза больше друг от друга, чем они были, когда вы начали сжимать, масштаб должен быть 2,0 (2x) - так что подключите несколько чисел ... 50px друг от друга первоначально ... 100px друг от друга сейчас = 100/50 = 2

1 голос
/ 03 ноября 2011

Я узнал, что мне нужно, выполнив небольшой реверс-инжиниринг. Как многие из вас знают, кто реализовал метод масштабирования с помощью UIPinchGestureRecognizer, вы в конечном итоге получите следующую строку кода:

GFloat nextScale = 1 -  (previousScale - [sender scale]);

Это следующая шкала, рассчитанная по значению, заданному UIPinchGestureRecognizer, однако мне нужно было сделать свой собственный масштаб, поскольку пользователь масштабировал за установленную мною границу. Поэтому я определил ширину, до которой нужно было уменьшить размер моего изображения, и определил нужный мне скорректированный масштаб, установив его в пропорции: (nextScale / AdjustScale) = (nextWidth / AdjustWidth).

Затем я снова вставил скорректированный масштаб в приведенную выше формулу, чтобы определить, какой будет [шкала отправителя] для моей новой суммы шкалы: [шкала отправителя] = AdjustedScale - 1 - previousScale.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...