在iPhone中使用Swift语言模糊效果

时间:2014-06-08 22:36:32

标签: ios iphone uiimageview swift

我一直在尝试使用xcode 6(swift语言)中的UIImageView来实现模糊效果,我正在尝试实现它,因此ImageView下面的所有内容都会变得模糊。

我无法让它发挥作用,所以我请求堆栈溢出的人帮助我。

怎么办?

我到目前为止写的代码是:


class blurImage: UIImageView {

    init(frame: CGRect) {
        super.init(frame: frame)

        var blur:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
        var effectView:UIVisualEffectView = UIVisualEffectView (effect: blur)

    }

}

3 个答案:

答案 0 :(得分:9)

您需要指定一个框架来实现模糊视图并将其添加为子视图

  

class blurImage:UIImageView {

init(frame: CGRect) {
    super.init(frame: frame)

    var blur:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
    var effectView:UIVisualEffectView = UIVisualEffectView (effect: blur)
    effectView.frame = frame
    addSubview(effectView)
}
 }

答案 1 :(得分:2)

我修改了@Kuroros类以使用Storyboards

class BlurImage: UIImageView {

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    init(coder aDecoder: NSCoder!)
    {
        super.init(coder: aDecoder)

        let blur:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
        var effectView:UIVisualEffectView = UIVisualEffectView (effect: blur)
        effectView.frame = frame
        addSubview(effectView)
    }

}

答案 2 :(得分:0)

我修改了@fabian实现,因为如果使用自动布局,frame大小计算存在问题。当您尝试阅读frame中的init()数据时,它尚未正确计算并且对我来说有大小(1000,1000),而应该是(420,420)。所以你需要阅读并稍后设置。我使用了layoutSubviews。设置frame = frame也无效,因为它返回绝对容器位置,但我们需要框大小。

class BluredImage: UIImageView {

    var effectView:UIVisualEffectView!

    required init(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)!

        let blur:UIBlurEffect = UIBlurEffect(style: .light)
        effectView = UIVisualEffectView (effect: blur)

        addSubview(effectView)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        effectView.frame = bounds
    }

}