我試圖去爲這種風格的按鈕:按下時反轉按鈕的顏色?
這是我到目前爲止有:
不過,我不確定如何獲得按下按鈕時正確的顏色,如示例中的中間按鈕。我已經設法使圖像的顏色變成白色使用:
button.setImage(UIImage("Image_White_Version"), for: .highlighted)
但我不知道如何用顏色填充按鈕的其餘部分。任何人都可以幫助我嗎?
我試圖去爲這種風格的按鈕:按下時反轉按鈕的顏色?
這是我到目前爲止有:
不過,我不確定如何獲得按下按鈕時正確的顏色,如示例中的中間按鈕。我已經設法使圖像的顏色變成白色使用:
button.setImage(UIImage("Image_White_Version"), for: .highlighted)
但我不知道如何用顏色填充按鈕的其餘部分。任何人都可以幫助我嗎?
您可以設置一個UIButton的背景圖像像這樣的特定狀態:
let image = UIImage.imageWithColor(someColor, size: CGSize(width: 1.0, height: 1.0))
btn.setBackgroundImage(image, for: .highlighted)
下面是從色生成圖像的功能(穿上UIImage的擴展中):
extension UIImage {
class func imageWithColor(_ color: UIColor, size: CGSize) -> UIImage {
let rect = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context!.setFillColor(color.cgColor)
context!.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
嘗試使用下一個方法:
這是快速的方式如何實現這一目標。主要想法使用按鈕背景顏色和圖像色調顏色。但更好的方法是在UIControl基礎上準備新的自定義控件。如果它不會被啓用,我會爲你做好準備。
var BgColorNormalIdentifier = "BackgroundColorNormal"
var BgColorHighlightedIdentifier = "BackgroundColorHighlighted"
var ImgColorNormalIdentifier = "ImageColorNormal"
var ImgColorHighlightedIdentifier = "ImageColorHighlighted"
public extension UIButton
{
public func backgroundColorForStates(normal: UIColor, highlighted: UIColor)
{
backgroundColor = normal
addTarget(self, action:#selector(UIButton.buttonTouchUpInside(_:)), for:.touchUpInside)
addTarget(self, action:#selector(UIButton.buttonTouchUpOutside(_:)), for:.touchUpOutside)
addTarget(self, action:#selector(UIButton.buttonTouchDown(_:)), for:.touchDown)
addTarget(self, action:#selector(UIButton.buttonTouchCancel(_:)), for:.touchCancel)
objc_setAssociatedObject(self, &BgColorNormalIdentifier, normal, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_setAssociatedObject(self, &BgColorHighlightedIdentifier, highlighted, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_setAssociatedObject(self, &ImgColorNormalIdentifier, highlighted, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_setAssociatedObject(self, &ImgColorHighlightedIdentifier, normal, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
public func imageForState (image: UIImage?, for state: UIControlState) {
self.setImage(image?.withRenderingMode(.alwaysTemplate), for: state)
}
public func normalBackgroundColor() -> UIColor?
{
return objc_getAssociatedObject(self, &BgColorNormalIdentifier) as? UIColor
}
public func highlightedBackgroundColor() -> UIColor?
{
return objc_getAssociatedObject(self, &BgColorHighlightedIdentifier) as? UIColor
}
public func normalImageColor() -> UIColor?
{
return objc_getAssociatedObject(self, &ImgColorNormalIdentifier) as? UIColor
}
public func highlightedImageColor() -> UIColor?
{
return objc_getAssociatedObject(self, &ImgColorHighlightedIdentifier) as? UIColor
}
func buttonTouchUpInside(_ sender: UIButton)
{
sender.backgroundColor = normalBackgroundColor()
sender.tintColor = normalImageColor()
}
func buttonTouchUpOutside(_ sender: UIButton)
{
sender.backgroundColor = normalBackgroundColor()
sender.tintColor = normalImageColor()
}
func buttonTouchDown(_ sender: UIButton)
{
sender.backgroundColor = highlightedBackgroundColor()
sender.tintColor = highlightedBackgroundColor()
}
func buttonTouchCancel(_ sender: UIButton)
{
sender.backgroundColor = normalBackgroundColor()
sender.tintColor = normalImageColor()
}
}
你的帖子中有一些代碼不在代碼格式塊 – KaraBenNemsi
是的(試圖解決這個問題( – ObranS
那麼,你也必須改變''突出''狀態的'backgroundImage'。 – Sulthan