2013-02-18 30 views
0

我把动画代码放在我的UIView子类中的drawRect中。我真的在寻找像UIViewController的viewWillAppear。但我想使用UIView而不是UIViewController。我正在使用下面的代码。将动画代码放在drawRect中是否合适?显示视图时,动画只是一个启动动画。drawRect适合动画代码?

- (void)drawRect:(CGRect)rect 
{ 

    [_graphView setFrame:CGRectMake(0.0f, 0.0f, 30.0 + (_defaultArray.count * STEP_X), self.frame.size.height)]; 
    [self setContentSize:CGSizeMake(30.0 + (_defaultArray.count * STEP_X), _graphView.frame.size.height)]; 

    float delayInSeconds = 0.25f; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 

     if (_graphView.frame.size.width > GRAPH_WIDTH) [self setContentOffset:CGPointMake(_graphView.frame.size.width - GRAPH_WIDTH, 0.0f) animated:YES]; 

    }); 
} 
+2

恕我直言,动画代码不属于'drawRect'。该例程应该具有在任何给定时间段内绘制视图所需的代码。如果你想做复杂的动画,我可以在其他地方做(并使用'CADisplayLink'或重复'NSTimer')。 – Rob 2013-02-18 06:05:20

+3

不,drawRect应该用来绘制动画的一帧*,而应该使用'CADisplayLink'来重复更新值并重画。 – borrrden 2013-02-18 06:08:22

回答

2

不,这是一个可怕的想法。您在执行-drawRect:时应该做的唯一一件事情就是绘制视图的内容。你的代码都没有做任何事情。

(如果这种观点是UIScrollView一个子类,你可能不应该是压倒一切的-drawRect:在所有。)

该代码看起来像它会在一个视图控制器更合适,或者在视图的设置代码(它创建_graphView本身?)。如果不了解更多关于代码的其他内容,很难确切地说明它的属性。