我已经创建了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);
}
它只是在屏幕上创建一组不同高度的条形图。
答案 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