如何确定UIPinchGestureRecognizer比例值?

时间:2011-11-02 06:19:00

标签: iphone objective-c ios cocoa-touch core-graphics

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

我有一个应用程序,我将UIPinchGestureRecognizer附加到imageView,在某些特定情况下,我需要手动重新调整一个比例,如果它缩小了imageView,那么它会过去屏幕的某个点。感谢。

2 个答案:

答案 0 :(得分:5)

给定两个初始点(触摸),使用毕达哥拉斯定理计算它们之间的距离。将此距离称为"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 :(得分:1)

我通过做一点逆向工程找到了我需要的东西。大多数人都知道谁使用UIPinchGestureRecognizer实现了缩放方法,你最终会得到这行代码:

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

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

然后我将adjustScale重新插入到上面的公式中,以确定[发送者比例]对于我的新比例量是多少:[发送者比例] = AdjustedScale - 1 - previousScale。

所以现在我可以用这个数量来设置我下次需要的previousScale值。