I have added a UIBlurEffect
with a function to load it before the data load from the server. I added a boolean
parameter to active or deactivate it.
func addingEffectLayerWithSpinner(active: Bool){
let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
if active {
view.addSubview(blurEffectView)
} else {
//This one is not working
blurEffectView.removeFromSuperview()
}
}
and here in viewDidLoad
, I pass false
to the that function to remove the UIBlueEffect
view, but it doesn't work, could you help me what is the problem.
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
addingEffectLayerWithSpinner(active: true)
profile.showingProfile { result in
switch result {
case .success(_):
// Sucesss response from server
DispatchQueue.main.async {
self.nameLabel?.text = nameOfUser!
self.avatar?.downloaded(from: avatarUrl!)
//This one is not working
self.addingEffectLayerWithSpinner(active: false)
}
// failed response from server
case .failure(let error):
print(error)
}
}
}
let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
The problem is here. As every time the above blurEffectView is called, a new UIVisualEffectView is prepared which is different from what's presenting now.
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
if active {
view.addSubview(blurEffectView)
} else {
//This one is not working
blurEffectView.removeFromSuperview()
}
So you may consider to save the blurEffectView as a property and then call to remove it.
var blurEffectView : UIVisualEffectView!
func addingEffectLayerWithSpinner(active: Bool){
//introduce a false condition early:
if !active { blurEffectView.removeFromSuperview()
return
}
let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
blurEffectView = UIVisualEffectView(effect: blurEffect)
//remove `let` here
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
}