我创建了一个应用程序,可以在其中拖动视图。我需要特殊的行为,而UIScrollView并不适合。但现在的问题是,其中一些视图会对触摸事件做出响应,当我拖动它们时,我必须取消触摸。
UIScrollView能够取消其子视图中的触摸,因此当用户按下按钮并开始滚动时,只要用户滚动足够多,滚动视图就会取消对按钮的触摸,这样按钮就不会触发动作。
一种方法是对每个子视图进行子类化,并在所有触摸处理方法中使用布尔标志,但这将非常乏味和肮脏。
有没有更好的方法通过API来取消子视图中的触摸,就像UICrollView一样?
它通过UIGestureRecognizer API取消触摸。UIScrollView实际上在下面使用了UIPanGestureRecognizer。http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009279-CH1-SW9
UIGestureRecognizer还具有延迟触摸开始发送和触摸结束的功能。
@property(nonatomic) BOOL delaysTouchesBegan
@property(nonatomic) BOOL delaysTouchesEnded
为了执行拖动手势,我现在使用UIPanGestureRecognizer,就像UIScrollView一样。这样做会让你拥有所有的小技巧。