Xcode VisualEffectView, предотвращающий взаимодействие с другими представлениями
У моего приложения есть wkwebview, и я установил всплывающее окно для отображения информации о приложении. Я добавил визуальный эффект, используя учебник из YouTube. Эффект прекрасно работает, теперь проблема в том, что он не позволяет мне взаимодействовать с веб-обзором. Я думаю, что это как-то связано с обработкой подпредставлений. Но я не уверен, как это исправить.
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()
}
}
1 ответ
Решение
Попробуйте установить isUserInteractionEnabled
вашей UIVisualEffectView
ложно.
visualEffectView.isUserInteractionEnabled = false
isUserInteractionEnabled
является унаследованным свойством от UIView
, Пока он выключен по умолчанию на некоторых подклассах, таких как UILabel
это установлено на true
на UIVisualEffectView
,