【发布时间】:2019-07-19 12:09:08
【问题描述】:
我的应用有一个 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()
}
}
【问题讨论】:
-
不确定是否可行,但请尝试
visualEffectView. isUserInteractionEnabled = false -
就是这样!有时事情就是这么简单。谢谢你。如果您将其发布为答案,我会将其标记为如此。非常感谢!
标签: ios swift xcode webview effect