iOS7之前,如果一个gesture recognizer想要另一个recognizer失效、不工作,你可以使用 requireGestureRecognizerToFail: 创建一个永久的关系。这样显然是不太灵活的。
在iOS7中,UIGestureRecognizerDelegate引入了两个方法,可以运行时动态的设置失效的条件:
● gestureRecognizer:gestureRecognizer
shouldRequireFailureOfGestureRecognizer:otherGestureRecognizer
● gestureRecognizer:gestureRecognizer
shouldBeRequiredToFailByGestureRecognizer:otherGestureRecognizer
Note: iOS 7 introduces similar methods in UIGestureRecognizerSubclass (described in
每次手势识别的时候,gesture recognizer delegate的方法都会被调用。
举例说明,当在app屏幕边缘的某个View pan时候,你可能希望这个view的所有子view的recognizer都失败,不再工作,否则可能会发生图像闪烁。
要达到这个目的,你可以这样来做
在iOS7中,UIGestureRecognizerDelegate引入了两个方法,可以运行时动态的设置失效的条件:
● gestureRecognizer:gestureRecognizer
shouldRequireFailureOfGestureRecognizer:otherGestureRecognizer
● gestureRecognizer:gestureRecognizer
shouldBeRequiredToFailByGestureRecognizer:otherGestureRecognizer
Note: iOS 7 introduces similar methods in UIGestureRecognizerSubclass (described in
每次手势识别的时候,gesture recognizer delegate的方法都会被调用。
举例说明,当在app屏幕边缘的某个View pan时候,你可能希望这个view的所有子view的recognizer都失败,不再工作,否则可能会发生图像闪烁。
要达到这个目的,你可以这样来做
01 | UIScreenEdgePanGestureRecognizer *myScreenEdgePanGestureRecognizer; |
02 | ... |
03 | myScreenEdgePanGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] |
04 | initWithTarget:self action:@selector(handleScreenEdgePan:)]; |
05 | myScreenEdgePanGestureRecognizer.delegate = self; |
06 | // Configure the gesture recognizer and attach it to the view. |
07 | ... |
08 | - ( BOOL )gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer |
09 | shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer |
10 | *)otherGestureRecognizer { |
11 | Appearance and Behavior |
12 | Using Gesture Recognizers |
13 |
14 | BOOL result = NO; |
15 | if ((gestureRecognizer == myScreenEdgePanGestureRecognizer) && |
16 | [[otherGestureRecognizer view] isDescendantOfView:[gestureRecognizer view]]) { |
17 | result = YES; |
18 | } |
19 | return result; |
20 | } |