本质上,我想要做的是移动视图以跟随用户的平移。只要使用相同的平移对象,它就可以正常工作。当用户释放并启动另一个平底锅时,问题就出现了。
根据文档, in 的值translationInView
是相对于平移开始时的位置。
所以我处理这个问题的策略是在我的视图中添加两个属性,这样我就可以判断是否使用了同一个平移对象以及参考位置是什么。self
对象是被移动的对象。它是一个 UIView 子类。
CGPoint originalPoint;
if (pan == self.panObject) {
//If the pan object is the same as the one in the property, use the saved value as the reference point.
originalPoint = CGPointMake(self.panStartLocation.x, self.panStartLocation.y);
} else {
//If the pan object is DIFFERENT, set the originalPoint from the existing center.
//self.center is in self.superview's coordinate system.
originalPoint = CGPointMake(self.center.x, self.center.y);
self.panStartLocation = CGPointMake(originalPoint.x, originalPoint.y);
self.panObject = pan;
}
CGPoint translation = [pan translationInView:self.superview];
self.center = CGPointMake(originalPoint.x+translation.x, originalPoint.y+translation.y);
这个方案不起作用,因为每个平移对象显然是同一个对象。我在调试器中花了一些时间来验证这一点,这似乎是真的。我认为每次触摸的平移对象都会有所不同。那么既然这不起作用,那还有什么替代方法呢?