gpt4 book ai didi

ios - 如何覆盖 iOS 11 上的 "swipe from top"手势?

转载 作者:行者123 更新时间:2023-12-01 16:14:11 25 4
gpt4 key购买 nike

我试图在我的 iOS 应用程序中覆盖“从屏幕顶部向下滑动”手势(打开通知中心的相同手势)。

据我了解,这样做的正确方法是覆盖 preferredScreenEdgesDeferringSystemGestures() View Controller 上的方法并使用 UIScreenEdgePanGestureRecognizer来处理手势。

在我的情况下,默认的系统手势被成功阻止(通知中心没有打开,只有灰色的指示出现在屏幕顶部),但没有触发手势识别器。这是 View Controller 的代码:

class ViewController: UIViewController {

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
return .top
}

override func viewDidLoad() {
super.viewDidLoad()

let gestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(swipeFromTop))
gestureRecognizer.edges = .top
view.addGestureRecognizer(gestureRecognizer)
}

@objc func swipeFromTop() {
print("swipe from top") // not printed
}
}

我为“从屏幕底部向上滑动”手势尝试了相同的操作,并且按预期工作(控制中心未打开并且手势识别器被触发)。

我正在运行 iOS 11.4 的 iPhone 7 上进行测试。

最佳答案

要使“从顶部滑动”手势起作用,您需要通过设置 UIViewController 来隐藏状态栏。的 prefersStatusBarHidden 属性返回true .

如果您的 UIViewController实例嵌入在 UINavigationController 中,您还需要通过设置 isNavigationBarHidden 来隐藏导航栏属性(property)给 true .

以下 Swift 5.1/iOS 13 代码示例展示了如何实现您的 UIViewController子类以使从顶部手势开始滑动:

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

navigationController?.isNavigationBarHidden = true

let gestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(swipeFromTop))
gestureRecognizer.edges = .top
view.addGestureRecognizer(gestureRecognizer)
}

@objc func swipeFromTop() {
print("swipe from top")
}

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
.top
}

override var prefersStatusBarHidden: Bool {
true
}

}

资料来源:
  • useyourloaf.com / Avoiding Conflicts with System Gestures at Screen Edges
  • 关于ios - 如何覆盖 iOS 11 上的 "swipe from top"手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695022/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com