Неустойчивая анимация UIView - PullRequest
0 голосов
/ 15 ноября 2011

Я использую анимацию UIView, чтобы случайным образом анимировать 5 квадратов (UIButtons) вокруг экрана.В зависимости от выбора пользователя, можно увидеть от 2 до 5 квадратов.Когда видны только 2, скрытые значения остальных трех устанавливаются в YES, поэтому они фактически все еще анимируются (верно?), Они просто не видны.Но когда видны только 2, анимация плавная, но когда все пять видны, анимация становится прерывистой.Я не совсем уверен, как это описать, потому что квадраты все еще движутся с правильной скоростью и движутся в правильные точки;изменчивость не ужасна, просто достаточно плоха, чтобы быть заметной.Есть ли способ избавиться от этого?Это код, который я использую для анимации квадратов:

Редактировать: измененные анимации для блока:

[UIView animateWithDuration:animationSpeed 
                              delay:0 
                            options:UIViewAnimationOptionCurveLinear 
                         animations:^{
                             view.center = destPoint;
                         }
                         completion:^(BOOL finished){
                             if([view isEqual:squareThree])
                                 [self moveBadGuys];
                         }
         ];

/*for(UIButton* button in squareArray) {
    if(!shouldMove)
        return;

    [UIView beginAnimations:@"b" context:nil];
    [UIView setAnimationDuration:animationSpeed];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    view.center = destPoint;
    [UIView commitAnimations];
}*/

Редактировать: представление, представляющее это, является третьим в стеке из трех UIViewController, представленных

ViewController* controller = [[[ViewController alloc] init] autorelease];
[self presentModalViewController:controller animated:NO];

Разве этот способ представления представлений расходует память?

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Есть несколько вещей, которые могут вызвать это. Это всегда сводится к тому, насколько сложный контент. Кроме того, симулятор может плохо работать с анимацией, поэтому убедитесь, что вы тестируете на реальном оборудовании.

Есть ли на кнопках большие изображения? Кнопки отбрасывают тени? Эти вещи могут замедлить его.

Также - используйте блочную анимацию. Не старые методы begin-commit.

0 голосов
/ 15 ноября 2011

Не совсем уверен, почему это медленно, но вы пытались по-другому это вкладывать?

if(!shouldMove)
    return;

[UIView beginAnimations:@"b" context:nil];
[UIView setAnimationDuration:animationSpeed];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

for(UIButton* button in squareArray) {
    view.center = destPoint;
}

[UIView commitAnimations];

делает (почти - логика немного отличается в случае !shouldMove, но это другая история) тоже самое, но чище.

...