我希望将按钮的不透明度设置为40%时禁用。
目前我正在使用我在StackOverflow上找到的以下修改代码:
let disabledColor = self.backgroundColor!.colorWithAlphaComponent(0.4)
self.setBackgroundImage(self.imageForColor(disabledColor), forState: .Disabled)
private func imageForColor(color: UIColor) -> UIImage {
let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(context, color.CGColor)
CGContextFillRect(context, rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
我想我能够在我正在使用的背景颜色上设置不透明度,然后简单地创建一个图像并在.Disabled状态下使用它,但这没有做任何事情。
如果我将类似UIColor.redColor()的内容发送到imageForColor,则该按钮在禁用时会变为红色...但不透明度似乎会被忽略。
有谁知道这是为什么?如果我能听到残疾人事件并解雇我自己的功能,或者Apple会让我们为背景图像而不是背景图像设置背景颜色,那就太好了。
****** ****** EDIT
尝试更多的东西,看起来它正确地应用了图像,但它似乎是在背景颜色上应用它,因为它是相同的颜色但具有不透明度,这种变化很难被注意到。
我想解决方案是仅使用背景图像而不是颜色(?),因为我无法替换颜色......
理想情况下,我想在禁用事件中对整个按钮应用不透明度。
答案 0 :(得分:1)
我认为你最好继承UIButton
,然后重写setEnabled
,这样你就可以操纵背景颜色了。请参阅this very similar thread。
答案 1 :(得分:0)
这不是最佳解决方案,但是对于快速方法,您只需更改按钮的alpha
而不是更改btn.isUserInteractionEnabled
或btn.isEnabled
即可从事件队列中删除点击事件。
btn.alpha = 0.5
然后在点击事件中检查sender.alpha
是否忽略,如下所示:
@IBAction func tapOnBtn(_ sender: UIButton) {
guard sender.alpha == 1 else { return }
//do your event here
}