[英]Black or grey background under UIViewController with blur effect
我的應用程序( UITabBarController
)中有幾個選項卡,在其中一個選項卡中,我可以顯示具有模糊效果的模式UIViewController(在選項卡上的當前控制器上)。
let bVC = BlurViewController()
bVC.modalPresentationStyle = .overCurrentContext
self.present(bVC, animated: true, completion: nil)
模糊控制器只是一個簡單的UIViewController
,其代碼在viewDidLoad
:
let blurEffect = UIBlurEffect(style: .extraLight)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = self.view.frame
self.view.insertSubview(blurEffectView, at: 0)
我在這里遇到的第一個問題是,其他標簽仍然可以訪問。 用戶可以在不關閉我模糊控制器的情況下輕按它們。
這不是一個真正的問題,但是當該用戶返回時,我模糊的viewcontroller的背景為灰色。 這是可以理解的,它后面的所有區域都沒有重繪,但這是一個問題。
第三個問題:如果該用戶嘗試關閉我模糊的控制器,則第一個控制器只是黑色的。
我知道我可以解決最后兩個問題:
在viewDidDisappear
關閉模糊控制器。
記住其父控制器中的“模糊狀態”。
如果用戶回來了,請再次顯示模糊的控制器。
但是,也許有一種更優雅,更簡單的方法?
嘗試以下代碼:在Swift 3中測試。
第一創投
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
title = "First VC"
//To set Background image
let backgroundImage = UIImage(named: "Set any image for 1st VC")
view.backgroundColor = UIColor(patternImage: backgroundImage!)
imageView.contentMode = .scaleToFill
// To set BlurView
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
let blurView = UIVisualEffectView(effect: blurEffect)
blurView.frame = view.frame
imageView.addSubview(blurView)
}
// First VC barButton
Note: Connect firstVc to SecondVc using segue and set identifier name to **one**
@IBAction func toSecondVC(_ sender: AnyObject) {
performSegue(withIdentifier: "one", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "one") {
navigationController?.navigationBar.isHidden = false
navigationController?.toolbar.isHidden = false
}
}
}
SecondVC
import UIKit
class viewTwo: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
title = "Second VC"
let backgroundImage = UIImage(named: "Set any image for 2nd VC")
view.backgroundColor = UIColor(patternImage: backgroundImage!)
imageView.contentMode = .scaleToFill
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
let blurView = UIVisualEffectView(effect: blurEffect)
blurView.frame = view.frame
imageView.addSubview(blurView)
}
override func viewWillAppear(_ animated: Bool) {
self.navigationItem.setHidesBackButton(true, animated:true)
}
@IBAction func backToMainVC(_ sender: AnyObject) {
// dismiss(animated: true, completion: nil)
navigationController?.popViewController(animated: true)
}
}
代碼輸出:
注意:由於ScreenCast而不是代碼的緣故,模糊效果似乎並不完美...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.