使用不跟随拇指的屏幕边缘平移手势识别器的弹出视图控制器

Posted

技术标签:

【中文标题】使用不跟随拇指的屏幕边缘平移手势识别器的弹出视图控制器【英文标题】:Pop view controller using Screen edge pan gesture recogniser not following the thumb 【发布时间】:2016-06-28 09:53:19 【问题描述】:

一旦我添加了自定义栏导航栏按钮项,我就无法使用默认功能返回。我希望能够使用“从边缘滑动”返回。

我已经添加了边缘平移手势识别器并将其连接到@IBAction,但是一旦识别到平移手势,就会完全取消操作。

当前视图不会慢慢跟随我的拇指移动(如在其他应用中看到的那样),而是使用预定义的动画移出。

如何使用 Edge Pan Gesture Recognizer 制作跟随我的拇指的动画?

@IBAction func edgeSwipe(sender: AnyObject) 
    navigationController?.popViewControllerAnimated(true)

【问题讨论】:

为什么系统提供的手势不起作用?你试过this吗? @beyowulf 这不起作用,因为我在左侧栏按钮项中添加了一个按钮。我在这里添加了一个按钮,因为我想访问 UIButton 的一些样式功能。但是,添加一个普通的 Bar Button Item(如果您只想自定义标题)也会使系统提供的手势停止工作。对于第二部分:我刚刚关注了您的链接,并且能够恢复与默认系统实现相同的回扫行为。 @beyowulf ,你指出了我正确的方向,我想奖励你。但唯一的方法是提供答案。因此,如果您至少提供一个简单的答案,您将获得赏金,这取决于您:) 不,没关系。编码愉快! 【参考方案1】:

无需添加边缘平移手势识别器。按照@beyowulf 的建议,我已经能够实现滑动返回功能,其行为方式与默认系统实现的行为方式相同 - 当我滑动它以将其关闭时,视图边缘跟随我的拇指。

所以我从情节提要中删除了ScreenEdge Pan Gesture Recogniser,并删除了相关的@IBAction

我已经让我的第一个视图控制器成为interactivePopGestureRecognizer 的代表。代码如下:

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        navigationController?.interactivePopGestureRecognizer?.delegate = self
    


extension ViewController: UIGestureRecognizerDelegate 

    func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool 
        return navigationController?.viewControllers.count > 1 ? true : false
    

【讨论】:

这适用于 2020 年,但我很想知道我们如何在全球范围内使用它,这意味着我不想在每个导航控制器中添加。

以上是关于使用不跟随拇指的屏幕边缘平移手势识别器的弹出视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用平移手势识别器关闭视图控制器

将默认的 interactivePopGestureRecognizer 扩展到屏幕边缘之外?

使平移手势识别器仅在向下滑动时在桌面视图的顶部进行响应

如果检测到超出范围,则禁用平移手势

AVPlayer 使用平移手势快进/后退

将平移手势识别器限制为特定圆圈