UIView子类不能从黑色背景改变

时间:2012-05-29 09:10:31

标签: iphone ios xcode uiview background

我已经创建了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 个答案:

答案 0 :(得分:2)

CGContextClearRect来自文档:

  

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

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

答案 1 :(得分:0)

由于我的低级别,我无法添加评论,但问题是,请问您是否已将UIView添加到viewcontroller?

喜欢

[self.view addSubview:v];

修改

对不起,我已经明白第二个选项已添加到实用的视图中。

答案 2 :(得分:0)

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

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

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

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

如果您的主视图的颜色正在发生变化,则问题在于您的新视图未被显示或未显示在前面。让我们知道它是怎么回事!

答案 3 :(得分:0)

在做的地方

[myView setBackgroundColor: [UIColor whiteColor]];

检查调试器中的myView是否为nil