我正在尝试重新创建类似于照片应用的互动,您可以同时捏合并平移照片。添加或移除触摸中间盘非常有效。
在我的代码中,我使用触摸位置移动视图。当我用两根手指拖动时,平移手势识别器将该点放在两个手指之间(应该如此),但是当我抬起手指时,它将该点改为该手指的点,导致视图猛然移动到新位置
将maximumNumberOfTouches设置为1并不能解决我的问题,因为你可以用finger1触摸,平移,用手指2触摸,平移,抬起手指1,视图将猛然移动到手指2的位置。另外,我想允许2手指平移,因为他们可以捏缩放和旋转图像。
由于其他原因,我也不能使用UIScrollView,但我知道它没有这个问题。
我能想到的唯一解决方案是获取初始触摸位置,然后每次添加或删除手指时,都会根据旧位置偏移新位置。但我不确定如何获取这些信息。
这有API吗?以上方式是唯一的方式,如果是这样,我该怎么做?
答案 0 :(得分:0)
好的,这就是我解决它的方法。
在手势功能中,我有一个全局变量被赋予触摸位置。
self.touchInView.x = sender.location(in: superview).x - frame.origin.x
self.touchInView.y = sender.location(in: superview).y - frame.origin.y
self.touchInParent = sender.location(in: superview)
在州== .began我有一个名为OriginalTouch的变量,我设置触摸的位置。
if gesture.state == .began {
originalTouch = self.touchInView
}
然后在state == .changed中我检测触摸次数是否改变并计算偏移量:
//Reset original touch position if number of touch changes so view remains in the same position
if sender.numberOfTouches != lastNumberOfTouches {
originalTouch.x += (touchInView.x - originalTouch.x)
originalTouch.y += (touchInView.y - originalTouch.y)
}
lastNumberOfTouches = sender.numberOfTouches
现在我可以根据originalTouch
设置视图的位置self.frame.origin = touchInParent - originalTouch