您的位置:首页 > 移动开发 > IOS开发

IOS全屏左侧滑(系统方法)

2016-05-04 12:59 423 查看
1.在自定义的NavigationController中遵守<UIGestureRecognizerDelegate>。
2.在ViewDidLoad里调用setupSlideGesture方法。
做到以上两步就能实现简单的全屏侧滑,但是如果项目中有的页面navigationBar是需要隐藏的,这时全屏侧滑过渡到这个页面时会很难看,而且还会出现NavigationBar内栈顺序错乱(例如需要隐藏Bar的页面是A,A页面Push出的某个页面为B,这时在页面B上来回拖动但不完全滑到A页面,滑动多次后再滑到A,然后从A再Push到B这时B的NavigationBar上得标题可能就会错乱)。
在需要隐藏NavgationBar的当前VC中添加
    [self.navigationControllersetNavigationBarHidden:YESanimated:YES];解决以上问题。
- (void)setupSlideGesture {
    
    UIGestureRecognizer *gesture =self.interactivePopGestureRecognizer;
    gesture.enabled =NO;
    UIView *gestureView = gesture.view;
    
    UIPanGestureRecognizer *popRecognizer = [[UIPanGestureRecognizeralloc]init];
    popRecognizer.delegate =self;
    popRecognizer.maximumNumberOfTouches =1;
    [gestureView addGestureRecognizer:popRecognizer];
    
    /**
     *  获取系统手势的target数组
     */
    NSMutableArray *_targets = [gesturevalueForKey:@"_targets"];
    /**
     *  获取它的唯一对象,我们知道它是一个叫UIGestureRecognizerTarget的私有类,它有一个属性叫_target
     */
    id gestureRecognizerTarget = [_targetsfirstObject];
    /**
     *  获取_target:_UINavigationInteractiveTransition,它有一个方法叫handleNavigationTransition:
     */
    id navigationInteractiveTransition = [gestureRecognizerTargetvalueForKey:@"_target"];
    /**
     *  通过前面的打印,我们从控制台获取出来它的方法签名。
     */
    SEL handleTransition =NSSelectorFromString(@"handleNavigationTransition:");
    /**
     *  创建一个与系统一模一样的手势,我们只把它的类改为UIPanGestureRecognizer
     */
    [popRecognizer addTarget:navigationInteractiveTransitionaction:handleTransition];
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    /**
     *  这里有两个条件不允许手势执行,1、当前控制器为根控制器;2、如果这个push、pop动画正在执行(私有属性)
     */
    returnself.viewControllers.count
!=1 && ![[selfvalueForKey:@"_isTransitioning"]boolValue];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: