iOS自定義全屏返回與tableView左划刪除手勢沖突解決


當自定義一個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之事件的傳遞和響應機制-原理篇


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM