我正在尝试制作自定义 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()
}
}
Run Code Online (Sandbox Code Playgroud)
我将一个 Button 实例拖到情节提要中,并将其类型更改为我的自定义类。
在故事板中,当我运行应用程序时,就矢量的外观以及它如何适合按钮空间而言,它看起来很棒,但在触摸时它不会像普通按钮那样突出显示。
据我了解,通常您会使用属性检查器的“状态配置”部分来控制突出显示时的行为,但它只允许控制文本颜色、阴影颜色、图像或背景。
我的自定义图标不是这些东西......那么我该如何引用它呢?draw(_ rect) 的输出被称为什么以及如何突出显示它?
编辑:我还希望它像普通按钮一样淡出回到正常状态,因此希望有某种方法可以合并/重用普通按钮的突出显示行为而不完全覆盖它?
谢谢你!
didSet对于可能的解决方案,您可以在按钮的覆盖中修改按钮的 alpha isHighlighted。
override var isHighlighted: Bool {
didSet {
alpha = isHighlighted ? 0.7 : 1
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |