2013-07-04 64 views
0

我有一个自定义的UIView,我在drawRect:方法中做了一些低级绘图。当我在XIB文件中实例化视图时,它工作正常。 Howerver,事情奇怪,当我初始化它编程,e.g,以编程方式创建自定义的UIView

MyView *view = [[MyView alloc] initWithFrame: rect]; 

[self.view addSubView: view]; 

看来,每当drawRect:方法运行,所产生的视图包含在当前图形重叠在以前的调用做了一些旧图纸。换句话说,当drawRect:被调用时,视图似乎没有被清除。

感谢您提前提供有用的见解。

+0

你在哪里打电话给你的问题发布的代码?也许你正在添加多个视图。 – rmaddy

+0

问题是什么?哪个视图没有清除?您目前的绘图意味着什么? –

+0

我的应用程序通过定期调用其setNeedsDisplay方法来更新视图。在每次更新时,都会在drawRect方法内创建新图形。我的问题是这个新的(或当前的)图形与以前更新中的一些旧图形重叠。 –

回答

0

让我们来看看你的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)。所以它不工作... –

0

我刚发现问题的原因是视图的backgroundColor属性设置为nil。

我不知道这是否是一个错误,因为backgroudColor = nil是透明背景的有效值。一个可能的解释是当在视图的drawRect方法中完成自定义绘图时,背景颜色必须是透明以外的东西,即使当前的UIView类引用不能精细化。

为了清楚起见,这就是我所做的:

MyView *view = [[MyView alloc] initWithFrame: rect]; 
[self.view addSubView: view]; 
self.view.backgroundColor = [UIColor darkGrayColor]; 

我将不胜感激,如果有人可以提供一个更好的解释。

相关问题