当我覆盖“drawRect”时,UIButton 样式设置被忽略

Posted

技术标签:

【中文标题】当我覆盖“drawRect”时,UIButton 样式设置被忽略【英文标题】:UIButton style settings are ignored when I override 'drawRect' 【发布时间】:2013-12-11 20:03:55 【问题描述】:

我创建了一个自定义 ios 数字键盘,其中的按钮带有圆角:

control.layer.cornerRadius = 6;
control.layer.opacity = 1;

在我想要绘制图像的按钮之一上,我将 UIButton 子类化以覆盖“drawRect”函数。

@interface KfKeypadButtonWithDrawing : UIButton

- (void)drawRect:(CGRect)rect;

@end

drawRect 实现只是在按钮上绘制一些线条。没什么特别的。

- (void)drawRect:(CGRect)rect

    [super drawRect:rect];

    // custom drawing code to create an image on the button

但是,一旦我覆盖 drawRect,按钮就不再具有圆角。有什么方法可以在按钮上绘制图像并让按钮尊重cornerRadius 样式设置?

谢谢,

亚伦

【问题讨论】:

【参考方案1】:

尝试将您尝试在drawRect 中绘制的内容放入图像(png、jpg)中并使用UIButtons setImage:forStatesetBackgroundImage:forState

【讨论】:

我们从一张图片开始,但它并不能很好地随着按钮大小的变化而缩放。我们决定转换为使用绘图代码,也就是圆角消失的时候。【参考方案2】:

是的,像这样:

override func drawRect(rect: CGRect) 
    // the custom drawing
    let roundedRect = UIBezierPath(roundedRect: rect, cornerRadius: 20)
    UIColor.redColor().setFill()
    roundedRect.fill()

    // call super
    super.drawRect(rect)

【讨论】:

以上是关于当我覆盖“drawRect”时,UIButton 样式设置被忽略的主要内容,如果未能解决你的问题,请参考以下文章

当用户与 UIButton 交互时,是不是可以让我在自定义 UIButton 的 drawRect 中绘制的内容“变暗”?

使用自定义 drawRect 代码创建 UIButton LIKE 控件

如果 drawRect: 被覆盖,子类化的 UIView 显示黑色背景

剪辑时如何避免覆盖drawRect

在 drawRect 上动画创建 cgrect 不起作用

覆盖 UINavigationBar 时 iOS 7 状态栏变黑