以编程方式创建自定义的UIView
问题描述:
我有一个自定义的UIView,我在drawRect:方法中做了一些低级绘图。当我在XIB文件中实例化视图时,它工作正常。 Howerver,事情奇怪,当我初始化它编程,e.g,以编程方式创建自定义的UIView
MyView *view = [[MyView alloc] initWithFrame: rect];
[self.view addSubView: view];
看来,每当drawRect:方法运行,所产生的视图包含在当前图形重叠在以前的调用做了一些旧图纸。换句话说,当drawRect:被调用时,视图似乎没有被清除。
感谢您提前提供有用的见解。
答
让我们来看看你的viewDidLoad方法或任何地方的代码。并检查约矩形框的大小不应该是零或0.
- (void)viewDidLoad
{
[super viewDidLoad];
MyView *view = [[MyView alloc] initWithFrame: rect];
NSLog(@"rect size %@ %@",NSStringFromCGRect(rect.bounds),NSStringFromCGRect(view.bounds));
view.backGroundCOlor = [UIColor redColor];
[self.view addSubView: view];
}
检查它的工作与否。
+0
我的问题没有说我把代码放在哪里,但代码是在主视图控制器的viewDidLoad方法内。所以它和上面提到的一样(除了backgroundColor)。所以它不工作... –
答
我刚发现问题的原因是视图的backgroundColor属性设置为nil。
我不知道这是否是一个错误,因为backgroudColor = nil是透明背景的有效值。一个可能的解释是当在视图的drawRect方法中完成自定义绘图时,背景颜色必须是透明以外的东西,即使当前的UIView类引用不能精细化。
为了清楚起见,这就是我所做的:
MyView *view = [[MyView alloc] initWithFrame: rect];
[self.view addSubView: view];
self.view.backgroundColor = [UIColor darkGrayColor];
我将不胜感激,如果有人可以提供一个更好的解释。
你在哪里打电话给你的问题发布的代码?也许你正在添加多个视图。 – rmaddy
问题是什么?哪个视图没有清除?您目前的绘图意味着什么? –
我的应用程序通过定期调用其setNeedsDisplay方法来更新视图。在每次更新时,都会在drawRect方法内创建新图形。我的问题是这个新的(或当前的)图形与以前更新中的一些旧图形重叠。 –