【问题标题】:Active UI navigation on the view under popover弹出框下视图上的活动 UI 导航
【发布时间】:2018-10-31 02:12:47
【问题描述】:

我有一个 UI,其中 SCNView 在后台,WKWebView 在前台,显示为 .popover。视图由单独的视图控制器控制。当用户按下 铃铛按钮 时,WKWebView 就会出现(参见附加屏幕)。 SCNView 已启用标准相机控制。

当前,当 WKWebView 弹出窗口出现时,SCNView 变得无响应。 WKWebView 外部的点击手势将其关闭,其他手势将被忽略,因此当 WKWebView 弹出框可见时,用户无法控制 SCNView 摄像头。 当存在 WKWebVIew 弹出框时,如何使 SCNView 响应?如何仅在按下 铃铛按钮 时关闭 WKWebView?

下面使用的代码:

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 只关心视图的大小。文件中没有实现额外的自定义修改。

【问题讨论】:

  • 我不使用 SceneKit,但这似乎与 iOS 更相关,如 (1) 标准弹出框的工作原理和 (2) UI 相关处理需要如何在主线程中进行.在前者中,您可能通过创建自己的弹出框来解决此问题 - 它可能需要是“看起来”像弹出框的全屏视图。在不属于弹出框的区域中,您可以完全控制屏幕。在后者?我不确定你能做任何事情,除非你能做一些自动化的动画(这可能是不可能的)。

标签: ios swift user-interface scenekit


【解决方案1】:

好的。所以解决方法主要是和视图控制器的popoverPresentationController参数连接。这里是documentation。要启用对显示为.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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多