gpt4 book ai didi

ios - UIViewController 下的黑色或灰色背景,具有模糊效果

转载 作者:行者123 更新时间:2023-11-30 12:58:20 24 4
gpt4 key购买 nike

我的应用程序中有几个选项卡 (UITabBarController),在其中一个选项卡中,我可以显示具有模糊效果的模态 UIViewController(在选项卡中的当前 Controller 上)。

    let bVC = BlurViewController()
bVC.modalPresentationStyle = .overCurrentContext
self.present(bVC, animated: true, completion: nil)

模糊 Controller 只是一个简单的UIViewController,在viewDidLoad中包含以下代码:

    let blurEffect = UIBlurEffect(style: .extraLight)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = self.view.frame

self.view.insertSubview(blurEffectView, at: 0)

我在这里遇到的第一个问题是,其他选项卡仍然可以访问。用户可以点击它们而无需关闭我模糊的 Controller 。

Tab items are still accessible

这不是一个真正的问题,但是当该用户回来时,我模糊的 View Controller 有灰色背景。这是可以理解的,它后面的所有区域都没有重新绘制,但这是一个问题。

Gray background

第三个问题:如果该用户尝试关闭我模糊的 Controller ,则第一个 Controller 只是黑色。

我知道我可以用这个来解决最后两个问题:

  1. viewDidDisappear 中关闭模糊 Controller 。

  2. 记住其父 Controller 中的“模糊状态”。

  3. 如果用户回来,则再次显示模糊的 Controller 。

但也许有一种更优雅、更简单的方法?

最佳答案

尝试以下代码:在 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

}
}
}

第二VC

 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 不是来自代码...

enter image description here

关于ios - UIViewController 下的黑色或灰色背景,具有模糊效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40154337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com