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 子类不能从黑色背景更改的主要内容,如果未能解决你的问题,请参考以下文章