什么是比例,为什么我在使用UIPinchGestureRecognizer时需要重置它?

时间:2017-05-20 13:06:50

标签: ios uipinchgesturerecognizer

我试图用UIPinchGestureRecognizer创建一个可调整大小的面孔。所有在线教程都告诉我要始终将比例重置为1,例如此代码:

func changeScale(byReactingTo pinchRecognizer: UIPinchGestureRecognizer)
{
    switch pinchRecognizer.state {
    case .changed,.ended:
        scale *= pinchRecognizer.scale
        pinchRecognizer.scale = 1
    default:
        break
    } 
}

其中scale是与面部大小相关的CGFloat。

但是,我无法找到任何合理的解释,为什么pinchRocgnizer.scale总是必须在用户捏之后重置为1。我知道删除它可能会导致不稳定的行为,但为什么呢?

1 个答案:

答案 0 :(得分:2)

文档说,scale UIPinchGestureRecognizer是从手势识别开始计算的。在您的代码scale *= pinchRecognizer.scale中,这是在手势期间每个调用中连接scale的值。

如果scale的值为1.11.2,那么第二次调用后的scale *= pinchRecognizer.scale将不正确,因为1.32不是1.2 }。因此,如果您将代码更改为scale = pinchRecognizer.scale,则无需将scale的{​​{1}}重置为UIPinchGestureRecognizer

我想zero的内部实现正在使用UIPinchGestureRecognizer值来跟踪scale到被识别手势时的相对scale。因此,如果将其重置为UIView,则意味着zero相对于先前的调用而不是第一次调用。