UIButton的自定义绘制
Custom drawing of UIButton
如何以编程方式为 UIButton
绘制图像,而不是将其作为静态资源传递?
子类化 UIButton
和重写 drawRect
方法会导致按钮失去 Tint 行为和其他可能的绘图效果。调用 super.drawRect
不会恢复这些行为。
我找到了自己的解决方案。将其绘制到 UIImage
并将其作为正常状态的背景图像传递给按钮允许动态创建图像并保留 UIButton
效果。
class MyButton: UIButton {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let image = createImage(self.bounds)
self.setBackgroundImage(image, forState: UIControlState.Normal)
}
func createImage(rect: CGRect) -> UIImage{
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext();
//just a circle
CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor);
CGContextFillEllipseInRect(context, CGRectInset(rect, 4, 4));
CGContextStrokePath(context);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext()
return image
}
}
如何以编程方式为 UIButton
绘制图像,而不是将其作为静态资源传递?
子类化 UIButton
和重写 drawRect
方法会导致按钮失去 Tint 行为和其他可能的绘图效果。调用 super.drawRect
不会恢复这些行为。
我找到了自己的解决方案。将其绘制到 UIImage
并将其作为正常状态的背景图像传递给按钮允许动态创建图像并保留 UIButton
效果。
class MyButton: UIButton {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let image = createImage(self.bounds)
self.setBackgroundImage(image, forState: UIControlState.Normal)
}
func createImage(rect: CGRect) -> UIImage{
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext();
//just a circle
CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor);
CGContextFillEllipseInRect(context, CGRectInset(rect, 4, 4));
CGContextStrokePath(context);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext()
return image
}
}