

SwiftのBlurの取り外し方について質問です。

以下のcodeでPopUp Viewが取り外された時と同時に  
ButtonでかけたBlur Effectを外したいと考えております。

[code]

    import UIKit
    
    class ViewController: UIViewController {
    
    /* PopUp View */
    @IBOutlet var addItemView: UIView!
    
    /* Backgounrd Image */
    @IBOutlet weak var backgoundImg: UIImageView!
    
    /* Blur Effect */
    @IBAction func BlurEffect(_ sender: Any) {
    
    
        /* setting of addItemView */
        addItemView.center = self.view.center
    
    
        /* Setting of Animation */
        self.backgoundImg.addBlurEffect() /* Blur */
        addItemView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
        addItemView.alpha = 0
    
        UIView.animate(withDuration: 0.4) {
            self.view.addSubview(self.addItemView)
            self.addItemView.alpha = 1
            self.addItemView.transform = CGAffineTransform.identity
        }
    
    
    }
    
    /* I want to remove blur effect */
    @IBAction func removeBlurEffect(_ sender: Any) {
    
    UIView.animate(withDuration: 0.3, animations: {
        self.addItemView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
        self.addItemView.alpha = 0
    
    }) { (success:Bool) in
    
        self.addItemView.removeFromSuperview()
    
        }
    
    }
    
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        addItemView.layer.cornerRadius = 5
    
    }
    
    override func didReceiveMemoryWarning() {
         super.didReceiveMemoryWarning()
    
    
    
    }
    
    
    }
    
    extension UIImageView
    {
    
    func addBlurEffect(){
    
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = self.bounds
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.addSubview(blurEffectView)
    
        }
    
    }
    
[/code]

extension関数でかけたBlurを取り外すにはどのようにしたら良いのでしょうか。

GitHubのURLは以下のようになります。  
<https://github.com/TakanoriHasebe/udemy-
questions/tree/master/SwiftBlurEffect>

わかるかたよろしくお願いいたします。


CC BY-SA 3.0
2017-08-09T05:17:26.547
37046
2019-06-13T14:03:20.337
2017-08-09T06:30:09.943
13972
24805
question
swift ios swift3
Blur Effectの取り外し方について


Extensionを利用して、`UIImageView`にBlurをかけるメソッドを追加したのなら、やはりExtensionにBlurを外すメソッドを定義するのが、考え方として自然です。

[code]

    extension UIImageView {
    
        func addBlurEffect() {
            ....（省略）....
        }
    
        func removeBlurEffect() {
            // UIImageViewのsubviewすべてに対して、
            self.subviews.forEach{
            // 型をUIVisualEffectViewにキャストできる、すなわち型がUIVisualEffectViewであるsubviewは、
            if let effectView = $0 as? UIVisualEffectView {
                // superviewから取り外す。
                effectView.removeFromSuperview()
            }
        }
    
    }
    
[/code]

Blurをかけるのに`backgoundImg.addBlurEffect()`を実行したのと同様に、`backgoundImg.removeBlurEffect()`を実行して、Blurを外せます。

* * *

> Blurを取り外すにはどのようにしたら良いのでしょうか。

それを知るのは、Blurを適用するのに、どういうことを実行したのかを調べることです。その逆を行えばいいのではないか？これまた自然な考え方です。  
`self.addSubview(blurEffectView)`と、`UIImageView`に`addSubview()`することでBlurをかけたのですから、`removeFromSuperview()`すれば、Blurを外せるのではないかと、仮説が立てられます。あとはそれを検証するだけです。

* * *
[code]

    CGAffineTransform.init(scaleX: 1.3, y: 1.3)
    
[/code]

イニシアライザの書式は特別で、一般のメソッド（関数）の書式と区別してください。

[code]

    init(scaleX:y:)
    
[/code]

リファレンスにこのように掲載してあったら、

[code]

    CGAffineTransform(scaleX: 1.3, y: 1.3)
    
[/code]

と記述します。


CC BY-SA 3.0
2017-08-09T20:31:49.327
37070
2017-08-09T20:31:49.327
18540
37046
answer