我正在向一个
UIScrollView
添加子视图,然后我给这些子视图添加了UIPanGestureRecognizer
。一切都正常,但是现在在将UIPanGestureRecognizer
添加到滚动视图的子视图之后,无法滚动。
可能的解决方案是什么?
UIScrollView
添加子视图,然后我给这些子视图添加了UIPanGestureRecognizer
。一切都正常,但是现在在将UIPanGestureRecognizer
添加到滚动视图的子视图之后,无法滚动。
可能的解决方案是什么?
[self.myCustomPanRecognizer requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer];
编辑:正如Bastian在评论中指出的那样,关于平移手势的引用仅适用于iOS 5,在此之前,请检查手势识别器数组并找到类型为UIPanGestureRecognizer的手势识别器。
如果您希望两者同时工作,则可能需要采取一些措施来将您的识别器与滚动视图分离,例如让用户在自定义识别器被识别之前轻触并保持屏幕。
还有一个委托方法可以让两个识别器一起工作,但我不确定当两个识别器类型相同时这会有多好的效果。
scrollview.panGestureRecognizer
仅适用于 iOS5 及以上版本。如果您想支持 iOS4,可以从 scrollview 获取手势识别器并检查类以获取 pangesturerecognizer。 - Bastianself.scrollView.panGestureRecognizer
呢? - M David如果您想同时使用两个,您可以使用:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
从委托中获取,但那可能不是你想要的 ;)
Swift 4
将视图控制器符合UIGestureRecognizerDelegate
...
SomeViewController: UIViewController, UIGestureRecognizerDelegate {
...
}
...将视图控制器设置为自定义平移手势识别器的代理...
customPanGestureRecognizer.delegate = self
...并使用同时委托,允许自定义的平移器和滚动视图(或表格视图)的平移器同时运行...
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if otherGestureRecognizer == scrollView.panGestureRecognizer { // or tableView.panGestureRecognizer
return true
} else {
return false
}
}
有两种方法可以询问委托是否应该要求手势识别器失败另一个手势识别器,或者是否应该由另一个手势识别器要求手势识别器失败。您可能需要进一步优化,但这是起点。