如何确定UIPinchGestureRecognizer比例值?

Ser*_*nce 4 iphone cocoa-touch core-graphics objective-c ios

我想知道是否有人知道如何UIPinchGestureRecognizer确定比例值,或者是否有一个公式我可以用来计算新的比例值?

我有一个应用程序,我附上UIPinchGestureRecognizerimageView,在某些特定情况下,我需要手动调整的比例,如果它缩小了imageView如此这般经过屏幕的某一点.谢谢.

Ste*_*eve 5

给定两个初始点(触摸),使用毕达哥拉斯定理计算它们之间的距离.让这个距离称为"initial distance".

对于每个连续的点更新,重新计算点之间的距离,并将该距离称为"new distance".

scale = "new distance" / "initial distance". 
Run Code Online (Sandbox Code Playgroud)

如果有人实际上不知道...毕达哥拉斯定理是:

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

理解缩放公式很简单......如果你的手指与你开始捏合时相距两倍,那么缩放应该是2.0(2x) - 所以插入一些数字...最初相距50px ... 100px现在分开= 100/50 = 2


Ser*_*nce 1

我通过做一些逆向工程找到了我需要的东西。正如大多数人都知道谁已经使用 UIPinchGestureRecognizer 实现了缩放方法一样,您最终会得到以下代码行:

GFloat nextScale = 1 -  (previousScale - [sender scale]);
Run Code Online (Sandbox Code Playgroud)

这是根据 UIPinchGestureRecognizer 给出的值计算的 nextScale,但是我需要制作自己的自定义比例,因为用户已经缩放超过了我设置的边界。因此,我确定了需要将 imageview 缩小到的宽度,并通过将其设置为比例来确定所需的 adjustmentScale:(nextScale / adjustmentScale) = (nextWidth / adjustmentWidth)。

然后,我将 adjustmentScale 重新插入到上述公式中,以确定我的新规模金额的 [发送方规模]:[发送方规模] = AdjustedScale - 1 - previousScale。

所以现在我可以使用该金额来设置下次需要的 previousScale 值。

  • 由于浮点值固有的数值不准确性,通过逐步应用缩放增量来缩放源可能会导致不准确的结果 - 当以这种方式复合时,这对最终用户来说可能变得显而易见。 (2认同)