将 UIImageView 设置为模糊的初始状态

Setting a UIImageView to an initial state of blurred

我正在尝试对 UIViewController 上的背景图像进行初始模糊处理。当调用 @IBAction 时,我想取消模糊 backgroundImage。我可以让图像最初模糊,但如果我最初模糊它,我就无法摆脱模糊。但是,如果我最初不模糊 backgroundImage,我的方法会通过在模糊图像和未模糊图像之间切换来按预期工作。

这些是我 UIViewController class.

上的相关变量
@IBOutlet weak var backgroundImage: UIImageView!
// I also leave this hanging around so I can add/remove it as needed
var blurView = UIVisualEffectView(effect: UIBlurEffect(style: .light))

当视图加载时,我最初希望 backgroundImage 在它上面有一个 UIVisualEffectView。我最初尝试在 viewDidLoad 中调用 toggleBlurView,但 UIBlurEffect 的显示已关闭,因此我在 viewDidLayoutSubviews 中添加了 toggleBlurView 的代码,这修复了那个问题。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    // if I comment this out, the toggleBlurView() method works as desired
    toggleBlurView()
}

这是我的 toggleBlurView 方法。

func toggleBlurView() {
    // if there's a blurView, remove it...
    if blurView.isDescendant(of: backgroundImage) {
        blurView.removeFromSuperview()
    } 
    // otherwise, add blurView to backgroundImage
    else {
        blurView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
        blurView.frame = backgroundImage.bounds
        backgroundImage.addSubview(blurView)
    }
}

我有一个 @IBAction,当调用它时,它也会运行 toggleBlurView 方法。

@IBAction func playFrequency(_ sender: UIButton) {
    // do stuff
    toggleBlurView()
}

我的代码没有崩溃,但我得不到想要的结果。我不确定我是发现了错误还是做错了什么。我打赌后者。感谢您的阅读,欢迎就如何将图像设置为模糊的初始状态提出建议。

我得到了下面的代码,正如你所希望的那样。我更改了 toggleBlurView 函数,使其更加灵活,但这应该不会影响功能。

//
//  ViewController.swift
//  tableviewheader-test
//
//  Created by Forest Kunecke on 3/29/17.
//  Use this code for freeeeee!!!!  Free as in free beer!!
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myImage: UIImageView!
    var blurView = UIVisualEffectView(effect: UIBlurEffect(style: .light))

    override func viewDidLoad() {
        super.viewDidLoad()

        toggleBlurView(myImage)
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func toggleBlur(_ sender: Any) {
        toggleBlurView(myImage)
    }

    func toggleBlurView(_ imageView: UIImageView) {
        // if there's a blurView, remove it...
        if blurView.isDescendant(of: imageView) {
            blurView.removeFromSuperview()
        }
            // otherwise, add blurView to backgroundImage
        else {
            blurView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
            blurView.frame = imageView.bounds
            imageView.addSubview(blurView)
        }
    }

}

这是我的故事板的屏幕截图: