2013-02-18 2 views
0

Я поместил анимационный код в drawRect в свой подкласс UIView. Я действительно искал что-то вроде viewWillAppear UIViewController. Но я хотел использовать 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

IMHO, код анимации не принадлежит 'drawRect'. В этой рутине должен быть только код, необходимый для рисования в любой заданный период времени. Если вы хотите сделать сложную анимацию, я делаю это в другом месте (и использую «CADisplayLink» или повторяющийся «NSTimer»). – Rob

+3

Нет, drawRect следует использовать для рисования * одного кадра * вашей анимации, в то время как 'CADisplayLink' следует использовать для многократного обновления значений и перерисовки. – borrrden

ответ

2

Нет, это страшная идея. Единственное, что вы должны сделать при реализации -drawRect:, - это нарисовать содержимое вида. Ни один из ваших кодов не делает ничего близкого к этому.

(Если эта точка зрения является подклассом UIScrollView, вы, вероятно, не должно быть главной -drawRect: на всех.)

Этот код выглядит как было бы более уместно в контроллере представления, или, возможно, в настройках отображения вида кода (создает ли сам _graphView?). Не зная больше о остальной части кода, трудно точно указать, где он находится.

Смежные вопросы