美文网首页
iOS全屏手势POP

iOS全屏手势POP

作者: 热干面一元五 | 来源:发表于2019-04-21 21:21 被阅读0次

    开篇

    在iOS中,默认如果有导航控制器,当push到下一个控制器时,当前界面时可以局部侧滑返回的,这一段范围很少.

    既然系统已经给我们了实现好了,侧滑返回,那么我们如何解决,全屏手势侧滑返回呢?

    方案

    拿到系统的返回手势,操作一波

    runtime 打印导航控制器所有私有属性

    /// 通过runtime获取对应的手势属性
    var count : UInt32 = 0
    let ivars = class_copyIvarList(UIGestureRecognizer.self, &count)!
    for i in 0..<count {
        let ivar = ivars[Int(i)]
        let namep = ivar_getName(ivar)
        let name = String(cString: namep!)//属性名称
        print(name)
    }
    

    打印结果:

    _gestureFlags
    _targets // 这个保存手势的所有target
    _delayedTouches
    _delayedPresses
    _view
    _lastTouchTimestamp
    _firstEventTimestamp
    _state
    _allowedTouchTypes
    _initialTouchType
    _internalActiveTouches
    _forceClassifier
    _requiredPreviewForceState
    _touchForceObservable
    _touchForceObservableAndClassifierObservation
    _forceTargets
    _forcePressCount
    _beganObservable
    _failureRequirements
    _failureDependents
    _activeEvents
    _keepTouchesOnContinuation
    _delegate
    _allowedPressTypes
    _name
    _gestureEnvironment
    
    

    获取target

    guard let anyObject = interactivePopGestureRecognizer!.value(forKey:  "_targets") as? [AnyObject] else { 
        return 
    }
    
    let object =  anyObject.first
    print(object)
    
    

    打印结果:

    /// 原来是一个数组,数组中是一个tuple, tuple第一个是一个action,第二个既然是target对象
    [(action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x7fc664e4f850>)]
    

    KVC 取出target

    let target = object.value(forKeyPath: "target")
    let action = Selector(("handleNavigationTransition:"))
    
    //下面是获取不到action的会奔溃
    //let action = object.value(forKeyPath: "action") as? Selector
    
    

    替换手势

    //创建自己的手势 将系统的手势去代替自己创建的手势
    let panGes = UIPanGestureRecognizer(target: target, action: action)
    view.addGestureRecognizer(panGes)
    
    

    使用FDFullscreenPopGesture

    这玩意就补多少了,添加进去,啥都不用干,懒人方案,完美解决。

    相关文章

      网友评论

          本文标题:iOS全屏手势POP

          本文链接:https://www.haomeiwen.com/subject/bdksgqtx.html