用模糊背景突出显示UIButton会导致透明度降低

时间:2018-09-09 19:40:30

标签: ios swift uibutton uiblureffect

我有一个UIButton,提供的背景模糊且变暗。但是,当我突出显示它(按下它但不释放按钮)时,由于似乎添加了非透明层而失去了透明度。

这是其中的视频;问题开始于https://imgur.com/a/B9w52nZ

几秒钟

我的自定义按钮类如下:

override func layoutSubviews() {
    super.layoutSubviews()
    let blur = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
    blur.frame = self.bounds
     blur.isUserInteractionEnabled = false
     self.insertSubview(blur, at: 0)
}

使用以下版本构建:Swift 4,iOS 12 beta

这是什么问题,什么是最好的解决方法?

2 个答案:

答案 0 :(得分:3)

正如您提到的,layoutSubviews被多次调用。

在情节提要中创建按钮后,您可以移动代码以将模糊添加到

func awakeFromNib()

对于从xib或情节提要文件创建的每个对象,该方法仅被调用一次,

您应该使用自动布局(添加布局约束)来对UIVisualEffectView进行布局,或者在layoutSubviews()

中仅调整其框架

答案 1 :(得分:0)

layoutSubviews()被多次调用,包括突出显示按钮时。因此,每次都添加模糊。我添加了防止这种情况的逻辑,从而解决了该问题。新代码:

var isBlurred = false

override func layoutSubviews() {
    super.layoutSubviews()
    if !isBlurred {
        let blur = UIVisualEffectView(effect: UIBlurEffect(style:
            .regular))
        blur.frame = self.bounds
        blur.isUserInteractionEnabled = false
        self.insertSubview(blur, at: 0)
        isBlurred = true
    }
}

有点麻烦,但这可以解决问题。