gpt4 book ai didi

ios - 如何跨 SwiftUI 应用程序跟踪所有触摸

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

我正在尝试在 SwiftUI 应用程序中实现锁定屏幕。
我需要跟踪每个事件以重新启动锁定计时器。
在 UIKit 应用程序中,我使用了这种方法 - 覆盖 UIApplication,它允许了解整个应用程序中的任何事件:

override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)

switch event.type {
case .touches:
// Post Notification or Delegate here
default:
break
}
}
但在 SwiftUI 中不再支持它。
我试图添加
.onTapGesture {}
到根 ContentView,但它没有按预期工作。
有什么办法可以避免添加
.onTapGesture {}
应用程序中的每个 View ?

最佳答案

这是一个可能的解决方案:

@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.onAppear(perform: UIApplication.shared.addTapGestureRecognizer)
}
}
}

extension UIApplication {
func addTapGestureRecognizer() {
guard let window = windows.first else { return }
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapAction))
tapGesture.requiresExclusiveTouchType = false
tapGesture.cancelsTouchesInView = false
tapGesture.delegate = self
window.addGestureRecognizer(tapGesture)
}

@objc func tapAction(_ sender: UITapGestureRecognizer) {
print("tapped")
}
}

extension UIApplication: UIGestureRecognizerDelegate {
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true // set to `false` if you don't want to detect tap during other gestures
}
}

关于ios - 如何跨 SwiftUI 应用程序跟踪所有触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63927489/

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