首页 > 解决方案 > Xcode VisualEffectView 防止与其他视图交互

问题描述

我的应用程序有一个 wkwebview,并且我设置了一个弹出框来显示应用程序信息。我使用来自 youtube 的教程添加了一个视觉效果视图。效果很好,问题是现在它似乎阻止我与 webview 交互。我认为这与子视图的处理方式有关。但我不知道如何解决它。

import UIKit
import WebKit
import SafariServices

class ViewController: UIViewController, WKNavigationDelegate {

var effect:UIVisualEffect!

@IBOutlet var webView: WKWebView!

@IBOutlet var activityIndicator: UIActivityIndicatorView!

@IBOutlet weak var visualEffectView: UIVisualEffectView!

override func viewDidLoad() {
    super.viewDidLoad()
    self.aboutPopOver.layer.cornerRadius = 10

    effect = visualEffectView.effect
    visualEffectView.effect = nil

    webView.navigationDelegate = self

    activityIndicator.startAnimating()
    activityIndicator.isHidden = true
    activityIndicator.hidesWhenStopped = true

    let url = Bundle.main.url(forResource: "Web/bulk_material_table", withExtension: "html")!
    webView.loadFileURL(url, allowingReadAccessTo: url)
    let request = URLRequest(url: url)
    self.webView.load(request)


}

func animateIn() {
    aboutPopOver.center = self.view.center

    aboutPopOver.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
    aboutPopOver.alpha = 0

    UIView.animate(withDuration: 0.4) {
        self.visualEffectView.effect = self.effect
        self.aboutPopOver.alpha = 1
        self.aboutPopOver.transform = CGAffineTransform.identity
    }

}


func animateOut () {
    UIView.animate(withDuration: 0.3, animations: {
        self.aboutPopOver.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
        self.aboutPopOver.alpha = 0

        self.visualEffectView.effect = nil

    }) { (success:Bool) in
        self.aboutPopOver.removeFromSuperview()
    }
}

func showActivityIndicator(show: Bool) {
    if show {
        activityIndicator.startAnimating()
    } else {
        activityIndicator.stopAnimating()
    }
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    showActivityIndicator(show: false)
}

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    showActivityIndicator(show: true)
}

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
    showActivityIndicator(show: false)
}

@IBAction func openURL(_ sender: Any) {

    guard let url = URL(string: "https://hapman.com") else {
        return
    }

    let safariVC = SFSafariViewController(url: url)
    present(safariVC, animated: true, completion: nil)
}

@IBOutlet var aboutPopOver: UIView!

@IBAction func aboutPopButton(_ sender: Any) {

 self.view.addSubview(aboutPopOver)
    aboutPopOver.center = self.view.center
    animateIn()
}

@IBAction func donePopButton(_ sender: Any) {

    self.aboutPopOver.removeFromSuperview()
    animateOut()
}
}

标签: iosswiftxcodewebvieweffect

解决方案


尝试将isUserInteractionEnabled您的设置UIVisualEffectView为 false。

visualEffectView.isUserInteractionEnabled = false

isUserInteractionEnabled是从 继承的属性UIView。虽然它在某些子类(如 )上默认关闭UILabel,但它设置为trueon UIVisualEffectView


推荐阅读