我试图用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。我知道删除它可能会导致不稳定的行为,但为什么呢?
答案 0 :(得分:2)
文档说,scale
UIPinchGestureRecognizer
是从手势识别开始计算的。在您的代码scale *= pinchRecognizer.scale
中,这是在手势期间每个调用中连接scale
的值。
如果scale
的值为1.1
,1.2
,那么第二次调用后的scale *= pinchRecognizer.scale
将不正确,因为1.32
不是1.2
}。因此,如果您将代码更改为scale = pinchRecognizer.scale
,则无需将scale
的{{1}}重置为UIPinchGestureRecognizer
。
我想zero
的内部实现正在使用UIPinchGestureRecognizer
值来跟踪scale
到被识别手势时的相对scale
。因此,如果将其重置为UIView
,则意味着zero
相对于先前的调用而不是第一次调用。