我有一个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
这是什么问题,什么是最好的解决方法?
答案 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
}
}
有点麻烦,但这可以解决问题。