在另一个类的UIView上调用setNeedsDisplay

时间:2009-06-17 23:00:56

标签: iphone uiview quartz-graphics drawrect

我有一个UIView子类,我根据触摸操作了很多图形。所有[self setNeedsDisplay]调用看起来都没问题。

但是,我使用了一个实例变量指针指向我的同一个UIView子类实例,然后尝试操作它然后从另一个UIView类调用[UIViewSubClass setNeedsDisplay],并且永远不会调用DrawRect。你可以从哪里调用setNeedsDisplay有限制吗?

(当在另一个UIView子类上单击一个按钮时调用此方法。正在调用该方法,但不调用DrawRect)

-(IBAction)loadGrid2;
{
    tempSoundArray = musicGridView1.soundArray;
    [musicGridView1.soundArray setButtonArrayToNull];
    [musicGridView1 setNeedsDisplay];
    musicGridView1.soundArray = tempSoundArray;
    NSLog(@"loadGrid2 was called");
}

2 个答案:

答案 0 :(得分:1)

drawRect:只有在有意义时才会被调用;即,视图必须是可见的,屏幕上的和脏的。你的drawRect:是否被调用?它应该在视图首次出现在屏幕上时调用。

答案 1 :(得分:1)

添加到Ben: 这很可能意味着您在其他地方遇到问题。您的指针可能不是nil或其他方式无效,或者视图可能无法正确添加到层次结构中。

您可能需要考虑不在视图中处理此类型行为,而是在视图控制器中处理。控制行为并在视图控制器中保存表示状态,并且不对视图类进行子类化。它将简化您的代码,减少“指针传递”。这也可以更容易地调试此类问题。

如果您觉得视图控制器变得臃肿,请考虑在多个视图控制器之间分配职责。