如何突出显示没有文字或背景的自定义UIButton?

时间:2018-02-05 10:26:22

标签: swift xcode uibutton customization highlight

我正在尝试制作自定义UIButton,因为我想绘制自己的矢量按钮图标,而不是依赖文本字符或位图图像。

所以......我试过这个:

import UIKit

@IBDesignable
class CustomPlusButton: UIButton {

/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
    // Drawing code
}
*/


func myPlusSign() -> UIBezierPath {

    //vars to factor out later
    let G = bounds.width / 5

    let plusPath = UIBezierPath()


    let startPoint = CGPoint(x:2*G,y:G)

    plusPath.move(to: startPoint)
    plusPath.addLine(to: CGPoint(x:2*G,y:2*G))
    plusPath.addLine(to: CGPoint(x:G,y:2*G))
    plusPath.addLine(to: CGPoint(x:G,y:3*G))
    plusPath.addLine(to: CGPoint(x:2*G,y:3*G))
    plusPath.addLine(to: CGPoint(x:2*G,y:4*G))
    plusPath.addLine(to: CGPoint(x:3*G,y:4*G))
    plusPath.addLine(to: CGPoint(x:3*G,y:3*G))
    plusPath.addLine(to: CGPoint(x:4*G,y:3*G))
    plusPath.addLine(to: CGPoint(x:4*G,y:2*G))
    plusPath.addLine(to: CGPoint(x:3*G,y:2*G))
    plusPath.addLine(to: CGPoint(x:3*G,y:G))
    plusPath.addLine(to: startPoint)

    plusPath.close()

    plusPath.fill()

    return plusPath



}

override func draw(_ rect: CGRect) {

    let path = myPlusSign()

    path.stroke()

}
}

我将一个Button实例拖到故事板中,并将其类型更改为我的自定义类。

在故事板中,当我运行应用程序时,它看起来很好,就像矢量看起来如何以及它如何适应按钮空间一样,但是当按照正常按钮的方式触摸它时它不会突出显示。

据我所知,通常你会使用"状态配置"属性检查器的一部分用于控制突出显示时的行为,但它只允许控制文本颜色,阴影颜色,图像或背景。

我的自定义图标不是这些东西......所以我怎么能参考呢? draw(_ rect)的输出是什么?如何突出显示它?

编辑:我也希望它像普通按钮一样淡回正常状态,所以希望有一些方法可以合并/重用正常按钮的突出显示行为而不完全覆盖它?

谢谢!

1 个答案:

答案 0 :(得分:2)

对于可能的解决方案,您可以修改按钮的didSet中的按钮的alpha值,并覆盖isHighlighted

override var isHighlighted: Bool {
    didSet {
        alpha = isHighlighted ? 0.7 : 1
    }
}