標籤:cti elf logs ini com string 也有 原理 add
當自訂一個navigationController實現全屏右劃返回時, 使用起來是不是很爽, 代碼如下:
- (void)viewDidLoad { [super viewDidLoad]; UIGestureRecognizer *gester = self.interactivePopGestureRecognizer;
UIPanGestureRecognizer *panGesTer = [[UIPanGestureRecognizer alloc] initWithTarget:gester.delegate action:NSSelectorFromString(@"handleNavigationTransition:")];
[gester.view addGestureRecognizer:panGesTer];
gester.delaysTouchesBegan = YES;
panGesTer.delegate = self;}
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
if (self.childViewControllers.count == 1 ) {
return NO;
}
return YES;
}
然鵝, 當你在tableView中開啟左劃編輯功能時發現死活也左劃不了, 腫麼肥四呢, 是開啟姿勢不對嗎, MGD! 還是手勢衝突呢?
好吧, 打個斷點試試! 斷點後發現進不來tableView的編輯方法, 進到了自訂的navigationController的gestureRecognizerShouldBegin方法, 原來是被攔截了. 那來判斷一下是左劃還是右劃吧, 如果左劃的話就不攔截, 交給tableView去響應! 代碼如下:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { if (self.childViewControllers.count == 1 ) { return NO; } if (self.interactivePopGestureRecognizer && [[self.interactivePopGestureRecognizer.view gestureRecognizers] containsObject:gestureRecognizer]) { CGPoint tPoint = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:gestureRecognizer.view]; if (tPoint.x >= 0) { CGFloat y = fabs(tPoint.y); CGFloat x = fabs(tPoint.x); CGFloat af = 30.0f/180.0f * M_PI; CGFloat tf = tanf(af); if ((y/x) <= tf) { return YES; } return NO; }else{ return NO; } } } return YES;}
貌似可以了! 歐耶!
可如果tableView也有右劃呢......
史上最詳細的iOS之事件的傳遞和響應機制-原理篇
iOS自訂全屏返回與tableView左劃刪除手勢衝突解決