iOS 按钮与自定义键盘上的边缘手势冲突
iOS Buttons Conflicting with Edge Gestures on Custom Keyboard
我的自定义键盘上的按钮位于屏幕的左侧和右侧,具有 .touchdown 操作。当我点击它们时,它们不会立即注册 .touchdown 并且似乎在等着看是否有滑动手势。我尝试使用代码来推迟边缘手势,但在 iOS 13 中,这似乎并不能解决问题。有没有人有关于如何让边缘上的按钮在单击时立即执行 .touchdown 操作的解决方案?
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
return [.left, .bottom, .right]
}
我也试过在自定义按钮中使用点功能 class 但这只会使其突出显示但仍然不会立即执行操作。
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
let inside = super.point(inside: point, with: event)
if inside && !isHighlighted && event?.type == .touches {
isHighlighted = inside
}
return bounds.insetBy(dx: -2.7, dy: -12).contains(point)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let window = view.window,
let recognizers = window.gestureRecognizers {
recognizers.forEach { r in
r.delaysTouchesBegan = false
r.cancelsTouchesInView = false
r.isEnabled = false
}
}
}
我的自定义键盘上的按钮位于屏幕的左侧和右侧,具有 .touchdown 操作。当我点击它们时,它们不会立即注册 .touchdown 并且似乎在等着看是否有滑动手势。我尝试使用代码来推迟边缘手势,但在 iOS 13 中,这似乎并不能解决问题。有没有人有关于如何让边缘上的按钮在单击时立即执行 .touchdown 操作的解决方案?
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
return [.left, .bottom, .right]
}
我也试过在自定义按钮中使用点功能 class 但这只会使其突出显示但仍然不会立即执行操作。
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
let inside = super.point(inside: point, with: event)
if inside && !isHighlighted && event?.type == .touches {
isHighlighted = inside
}
return bounds.insetBy(dx: -2.7, dy: -12).contains(point)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let window = view.window,
let recognizers = window.gestureRecognizers {
recognizers.forEach { r in
r.delaysTouchesBegan = false
r.cancelsTouchesInView = false
r.isEnabled = false
}
}
}