我有一个UI,其中SCNView在后台,WKWebView在前台以.popover的形式呈现。视图由单独的视图控制器控制。当用户按下铃声按钮时,WKWebView就会出现(见所附屏幕)。SCNView启用了标准摄像头控制。
目前,当WKWebView弹出窗口出现时,SCNView将变得无响应。轻拍WKWebView外部的手势会将其关闭,其他手势将被忽略,因此当SCNView弹出窗口可见时,用户无法控制WKWebView摄像头。如何在出现WKWebVIew弹出窗口时使SCNView响应?仅当按下时,我如何才能关闭?

使用的代码如下:
class MainVC: UIViewController, UIPopoverPresentationControllerDelegate {
@IBOutlet weak var scnView: SCNView!
@IBOutlet weak var bellBtn: UIButton!
var myWebViewVC: MyWebViewVC!
override func viewDidLoad() {
super.viewDidLoad()
let scene = SCNScene(named: "art.scnassets/DemoScene.scn")!
let scnView = sceneView
scnView!.scene = scene
scnView!.allowsCameraControl = true
}
@IBAction func onBellBtnPressed(_ sender: UIButton) {
myWebViewVC.modalPresentationStyle = .popover
myWebViewVC.popoverPresentationController?.delegate = self
present(myWebViewVC, animated: true, completion: nil)
myWebViewVC.popoverPresentationController?.sourceView = sender
myWebViewVC.popoverPresentationController?.sourceRect = sender.bounds
}
}MyWebViewVC只关心视图的大小。文件中不会实现任何其他自定义修改。
发布于 2018-06-04 07:51:48
好的。因此,解决方案主要与视图控制器的popoverPresentationController参数有关。这是documentation。要在呈现为.popover的视图下启用对视图的控制,您需要通知它将在出现popover时响应的视图。传球的顺序是从上到下。下面的代码和passThrough数组使其工作。
class MainVC: UIViewController, UIPopoverPresentationControllerDelegate {
@IBOutlet weak var scnView: SCNView!
@IBOutlet weak var bellBtn: UIButton!
@IBOutlet weak var dotBtn: UIButton!
var myWebViewVC: MyWebViewVC!
override func viewDidLoad() {
super.viewDidLoad()
let scene = SCNScene(named: "art.scnassets/DemoScene.scn")!
scnView!.scene = scene
scnView!.allowsCameraControl = true
}
@IBAction func onBellBtnPressed(_ sender: UIButton) {
activeUiNavigationUnderPopover()
}
func activeUiNavigationUnderPopover () {
myWebViewVC.modalPresentationStyle = .popover
myWebViewVC.popoverPresentationController?.delegate = self
if let pop = myWebViewVC.popoverPresentationController {
var passthroughViews: [AnyObject]?
passthroughViews = [dotBtn, scnView]
pop.passthroughViews = NSMutableArray(array: passthroughViews!) as? [UIView]
pop.permittedArrowDirections = .any
pop.delegate = self
}
present(myWebViewVC, animated: true, completion: nil)
myWebViewVC.popoverPresentationController?.sourceView = sender
myWebViewVC.popoverPresentationController?.sourceRect = sender.bounds
}
}https://stackoverflow.com/questions/50448541
复制相似问题