gpt4 book ai didi

objective-c - UIView 子类绘制背景,尽管 drawRect 完全为空 : - why?

转载 作者:太空狗 更新时间:2023-10-30 03:24:55 27 4
gpt4 key购买 nike

所以,我有一个自定义的 UIView 子类,它可以绘制圆边。东西画得很完美,但是背景总是填满整个边界,尽管首先剪裁到路径。边框还在矩形背景上方 绘制,尽管事实上我是在 drawRect: 背景之前绘制边框。所以我删除了 drawRect: 的全部内容,它现在几乎是空的——尽管背景被绘制了!

有人解释一下吗?我在 Interface Builder 中设置了 backgroundColor。谢谢!

最佳答案

很抱歉这个独白。 :)

问题是 UIView 的图层显然绘制了背景,它独立于 drawRect:。这就是为什么您无法通过覆盖 drawRect: 来摆脱背景。

您可以覆盖 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 并使图层绘制任何您想要的,或者覆盖 - (void) setBackgroundColor:(UIColor *)newColor 并且不要将 newColor 分配给 backgroundColor,而是分配给您自己的 ivar,例如 myBackgroundColor。然后,您可以在 drawRect 中使用 myBackgroundColor;随心所欲地绘制背景。


覆盖 setBackgroundColor:

定义一个实例变量来保存你的背景颜色,例如我的背景颜色。在您的 init 方法中,将实际背景颜色设置为 clearColor:

- (id) initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super init...])) {
[super setBackgroundColor:[UIColor clearColor]];
}
return self;
}

覆盖:

- (void) setBackgroundColor:(UIColor *)newColor
{
if (newColor != myBackgroundColor) {
[myBackgroundColor release];
myBackgroundColor = [newColor retain];
}
}

然后在 drawRect: 方法中使用 myBackgroundColor。这样您就可以在代码中使用从 Interface Builder(或 Xcode4)分配的颜色。

关于objective-c - UIView 子类绘制背景,尽管 drawRect 完全为空 : - why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1551277/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com