ios - 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()
}
}
解决方案
尝试将isUserInteractionEnabled
您的设置UIVisualEffectView
为 false。
visualEffectView.isUserInteractionEnabled = false
isUserInteractionEnabled
是从 继承的属性UIView
。虽然它在某些子类(如 )上默认关闭UILabel
,但它设置为true
on UIVisualEffectView
。
推荐阅读
- android - 我应该在应用内购买后使用本地数据库并切换到 Firestore 吗?
- flutter - Flutter:LayoutBuilder 中的 SliverAppBar
- powershell - 使用 powershell 将整数存储在自定义对象中
- java - 模拟LocalDateTime时如何模拟分钟值?
- css - Mobile Safari not rendering fixed element outside of viewport unless it has no children
- php - 通过 $_POST 传递 PayPal 变量
- sql - Psql - ERROR: column "avclass" does not exist - selecting counts and percentages for columns that are grouped
- function - How to trigger a function when a Slider changes in SwiftUI?
- macos - 如何让 OpenMP 程序在 macOS 上使用多个内核
- jquery - jQuery检查部分输入是否在数组中