1. 程式人生 > >手勢衝突---UITableView刪除, 自定義側滑返回,UIScroll的手勢衝突

手勢衝突---UITableView刪除, 自定義側滑返回,UIScroll的手勢衝突

返回手勢和UITableView刪除的衝突

今天遇到一個手勢衝突的問題在這裡記錄一下

由於還要適配ios6 所以就從網上找了個側滑返回的類

但是這個類手勢和UITableView的滑動刪除是有衝突的 所以UITableView的手勢被幹掉了(原生的UINavigationcontroller不會)

解決辦法就是寫個scrollView的category重寫

#import "UIScrollView+AllowPanGestureEventPass.h"

@implementation UIScrollView (AllowPanGestureEventPass)

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] || [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] ) {
        return YES;
    }
    return NO;
}



@end
判斷是否是pan手勢如果是讓其他的pan手勢同時響應  這樣既能響應返回的那個返回的pan手勢 又能響應UITableView上的pan手勢

但是這麼寫會影響你專案中的其他UIScrollView 而且會出現右滑撤銷刪除和右滑返回的一起執行

而我比較希望的是 在這個VC裡面的是側滑的區域變小一點別影響我撤銷刪除的操作

所以我就這麼改

#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (self.viewControllers.count <= 1 || !self.canDragBack) return NO;
        if ([[self.viewControllers lastObject] isKindOfClass:[CollisionGestureViewController class]]) {
           CGPoint point = [gestureRecognizer locationInView:self.view];
            NSLog(@"%@", NSStringFromCGPoint(point));
            if (point.x < self.view.frame.size.width / 3) {
                return YES;
            }
            else {
                return NO;
            }
            return NO;
        }
    return YES;
}


這裡面還有一個其他的例子介紹手勢衝突的

http://blog.csdn.net/wsxzk123/article/details/44229559