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

Posted

技术标签:

【中文标题】UIView 子类不能从黑色背景更改【英文标题】:UIView subclass can't change from black background 【发布时间】:2012-05-29 09:10:31 【问题描述】:

我创建了 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);

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

【问题讨论】:

试试 initWithFrame:CGRectMake(0,0,400,500)........或者根据你的也改变宽度和高度..看看你的属性/声明是否连接到你的视图跨度> 您好,感谢您的回复。不幸的是,这仍然不起作用! 【参考方案1】:

CGContextClearRect 来自文档:

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

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

【讨论】:

【参考方案2】:

由于我的等级低,我无法添加 cmets,但我想到了一个问题,您是否将 UIView 添加到 viewcontroller?

喜欢

[self.view addSubview:v];

编辑:

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

【讨论】:

他正在使用 Storyboard 添加视图。 您好,感谢您的评论。即使我将它从情节提要中完全删除并以编程方式添加(RH8TrackView *v = [[RH8TrackView alloc] initWithFrame:self.view.frame]; [v setBackgroundColor:[UIColor whiteColor]]; [self.view addSubview:v];),视图的背景仍然是黑色的。我用更多细节更新了这个问题,以防万一想到其他东西!再次感谢。 我认为你创建的循环有问题,虽然我仍然无法帮助你,因为我不知道样本的内容。 'CGRect barRect = CGRectMake(x, height - (2 * height), barWidth, 1 * height);'我试过了,所有的视图都是黑色的【参考方案3】:

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

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

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

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

如果您的主视图的颜色发生变化,那么问题在于您的新视图没有被或带到前面。告诉我们进展如何!

【讨论】:

是的,视图加载正确。我有一种感觉,问题是上下文的背景是黑色的,如果这有意义的话!不过感谢您的回复。【参考方案4】:

在哪里做

[myView setBackgroundColor: [UIColor whiteColor]];

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

【讨论】:

以上是关于UIView 子类不能从黑色背景更改的主要内容,如果未能解决你的问题,请参考以下文章

UIView 背景颜色总是黑色

CGContextClearRect 导致背景颜色为黑色

UIView draw Rect with Image 结果为黑色背景

使图像出现在黑色背景后面

黑色背景白色自定义过渡

使用渐变效果更改背景颜色