3

我创建了 UIView 的子视图来制作一些绘图 - 绘图在我的子类的 drawRect 方法中工作正常,但是,我无法更改视图的背景颜色。一点谷歌搜索告诉我我还没有设置视图的框架,但我不完全确定如何做到这一点。我尝试了两件事:

我在 Storyboard 中创建视图并将其添加到我的视图控制器中,然后将其声明为头文件中的属性并将它们链接起来。我在实现文件的顶部合成了属性,在 viewDidLoad 方法中,我添加了:

[myView setBackgroundColor: [UIColor whiteColor]];

视图的背景仍然是黑色的。

我也试过:

ViewSubclass *v = [[ViewSubclass alloc] initWithFrame: self.view.frame];
v.backgroundColor = [UIColor whiteColor];
myView = v;

无济于事。

我究竟做错了什么?

更新:这是我用来在视图中绘制的代码,以防万一那里发生了什么事!

- (void)drawRect:(CGRect)rect {
CGFloat height = self.bounds.size.height;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
CGFloat barWidth = 30;
int count = 0;
for (NSNumber *num in samples) {
    CGFloat x = count * (barWidth + 10);
    CGRect barRect = CGRectMake(x, height - ([num floatValue] * height), barWidth, [num floatValue] * height);
    CGContextAddRect(context, barRect);
    count++;
}
CGContextFillPath(context);
}

它只是在屏幕中创建一组不同高度的条形图。

4

4 回答 4

2

CGContextClearRect从文档:

如果提供的上下文是窗口或位图上下文,Quartz 会有效地清除矩形。对于其他上下文类型,Quartz 以设备相关的方式填充矩形。但是,您不应在窗口或位图上下文以外的上下文中使用此函数。

可能是这种清除清除了您的整个视图,而不考虑您设置的背景颜色

于 2012-05-29T10:47:28.290 回答
0

由于我的 lvl 低,我无法添加评论,但我想到了一个问题,您是否已将 UIView 添加到 viewcontroller?

[self.view addSubview:v];

编辑:

很抱歉,我理解第二个选项是务实地添加到视图中的。

于 2012-05-29T09:23:43.150 回答
0

您是否在头文件中添加视图?如果是这样,您可能需要确保框架的坐标是可见的并且视图在顶部,还要使新视图稍微小一点,以查看它是否真的被创建:

UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
[self.view addSubview: myView];
[self.view bringSubviewToFront:myView];

您还可以更改主视图背景颜色以查看是否实际创建了新视图。例如:

[self.view setBackgroundColor:[UIColor grayColor]];

如果您的主视图的颜色发生变化,那么问题是您的新视图没有被或带到前面。让我们知道怎么回事!

于 2012-05-29T09:58:29.120 回答
0

在哪里做

[myView setBackgroundColor: [UIColor whiteColor]];

检查调试器中的 myView 是否不为零

于 2012-05-29T13:47:05.677 回答