【发布时间】:2018-08-05 14:03:10
【问题描述】:
我正在尝试在我的 iOS 应用中覆盖“从屏幕顶部向下滑动”手势(打开通知中心的手势相同)。
据我了解,正确的做法是重写视图控制器上的preferredScreenEdgesDeferringSystemGestures() 方法并使用UIScreenEdgePanGestureRecognizer 来处理手势。
在我的情况下,默认系统手势被成功屏蔽(通知中心没有打开,屏幕顶部只出现灰色指示符),但没有触发手势识别器。这是视图控制器的代码:
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 上进行测试。
【问题讨论】:
-
您可以实现
gestureRecognizer的委托回调来调试正在发生的事情 - 例如如果它收到触摸,如果它“开始”,如果它失败。 -
@DisableR 感谢您的想法,我尝试实现here 中描述的所有委托方法,但没有一个被调用。
-
你的
ViewController在导航控制器里面吗? -
@DisableR 不,它只是
UIWindow中的UIViewController(您使用“单一视图应用程序”获得的默认设置) -
我刚刚创建了“单一视图”项目并添加了您的代码 - 如果我开始在状态栏下方滑动一点,则会调用 iPhone 8 Plus 模拟器
swipeFromTop。
标签: ios uigesturerecognizer swipe