【问题标题】:UIBezierPath simple rectangleUIBezierPath 简单矩形
【发布时间】:2013-06-18 06:49:56
【问题描述】:

我只想使用以下函数在视图中绘制一个简单的矩形:

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    if (self.drawTextBouble) {
        [[UIColor blueColor] setFill];
        UIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(40, 0, 230, 120) cornerRadius:12.0];
        [aPath fill];
    }
}

上面的代码用纯黑色背景填充视图,矩形外不透明。我该如何解决这个问题?

编辑:

以下解决方案有效,但这也有效:

[self setOpaque:NO];

【问题讨论】:

  • 这是一个比我想象的更好的问题示例。存在现有的错误代码、对问题的解释和期望的结果。很遗憾我不知道答案!
  • 我无法用你的代码重现问题,但也许你不应该调用[super drawRect:rect],比较stackoverflow.com/questions/14074281/…
  • 感谢 cmets :),我试过了,但表现相同。
  • @flatronka:你确定视图的背景颜色设置为透明(“clearColor”)吗?

标签: ios objective-c core-graphics


【解决方案1】:

你的绘图代码没问题。如果您希望自定义绘制的视图具有透明背景,您只需要设置

self.backgroundColor = [UIColor clearColor];

在视图的- (id)initWithFrame:(CGRect)frame

编辑:关于调用[super drawRect:rect] 的一点说明。 UIView docs 说:

如果你直接继承UIView,你的这个方法的实现不需要调用super。但是,如果您要对不同的视图类进行子类化,则应在实现中的某个时间点调用 super。

【讨论】:

  • 谢谢你这是有效的,我找到了一个替代的解决方案也有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多