为了处理swiftui视图后面的金属视图上的手势,我在金属视图上添加了一些手势识别器。
在swiftui上没有手势也会在金属视图上触发手势识别器,我无法设置识别器委托。
但是,如果没有在识别器上设置委托,我将无法实现同时识别器功能(shouldRecognizeSimultaneouslyWith。
)如何在不使用此功能的情况下启用多个手势识别器?
extension ViewController {
let pan = UIPanGestureRecognizer(target: self,action: #selector(handlePan(gesture:)))
pan.allowedTouchTypes = [NSNumber(value: UITouch.TouchType.direct.rawValue)]
pan.delegate = self
view.addGestureRecognizer(pan)
let pinch = UIPinchGestureRecognizer(target: self,action: #selector(handlePinch(gesture:)))
pinch.allowedTouchTypes = [NSNumber(value: UITouch.TouchType.direct.rawValue)]
pinch.delegate = self
view.addGestureRecognizer(pinch)
let rotate = UIRotationGestureRecognizer(target: self, action: #selector(handleRotate(gesture:)))
rotate.allowedTouchTypes = [NSNumber(value: UITouch.TouchType.direct.rawValue)]
rotate.delegate = self
view.addGestureRecognizer(rotate)
}
class ViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if (gestureRecognizer is UIPanGestureRecognizer || gestureRecognizer is UIRotationGestureRecognizer) {
return true
} else {
return false
}
let swiftUIView = SwiftUIView()
// Create a hosting controller with the swiftui
let viewCtrl = UIHostingController(rootView: swiftUIView)
self.addChild(viewCtrl)
// Add SwiftUI as subview to Metal:
metalView.addSubview(viewCtrl.view)
}
[当用户在swiftui视图内点击时,手势识别器会在父视图不应触发。您知道问题出在哪里吗?
为此,它需要提供以下委托方法
extension ViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
// .. your other code here
}