突出显示具有模糊背景的 UIButton 会导致透明度丢失
Highlighting UIButton with blur background causes loss of transparency
我有一个 UIButton,我给它一个模糊和黑暗的背景。但是,当我突出显示它(按下它但不释放按钮)时,它会因为添加了似乎是非透明层而失去透明度。
这是它的视频;问题开始几秒钟:https://imgur.com/a/B9w52nZ
我的自定义按钮 class 如下所示:
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
这里有什么问题,解决问题的最佳方法是什么?
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
}
}
它有点快速和肮脏,但它解决了这个问题。
如您所述,layoutSubviews
被多次调用。
由于您的按钮是在故事板中创建的,因此您可以移动代码以将模糊添加到
func awakeFromNib()
每个从 xib 或故事板文件创建的对象只调用一次此方法,
您应该使用自动布局(添加布局约束)对 UIVisualEffectView
进行布局,或者在 layoutSubviews()
中仅调整其框架
我有一个 UIButton,我给它一个模糊和黑暗的背景。但是,当我突出显示它(按下它但不释放按钮)时,它会因为添加了似乎是非透明层而失去透明度。
这是它的视频;问题开始几秒钟:https://imgur.com/a/B9w52nZ
我的自定义按钮 class 如下所示:
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
这里有什么问题,解决问题的最佳方法是什么?
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
}
}
它有点快速和肮脏,但它解决了这个问题。
如您所述,layoutSubviews
被多次调用。
由于您的按钮是在故事板中创建的,因此您可以移动代码以将模糊添加到
func awakeFromNib()
每个从 xib 或故事板文件创建的对象只调用一次此方法,
您应该使用自动布局(添加布局约束)对 UIVisualEffectView
进行布局,或者在 layoutSubviews()