Как "настроить" анимации UIView на основе блоков? - PullRequest
2 голосов
/ 14 апреля 2011

Мой пользовательский элемент управления имеет метод -setValue: animated :, который принимает флаг animated.

До iOS 4 я бы написал анимацию так:

if (animated) {
    [UIView beginAnimations:@"Foo"];
    [UIView setAnimationDuration:5.0];
}
// ... layout views ...
if (animated) {
    [UIView commitAnimations];
}

Теперь я написал это:

[UIView animateWithDuration:(animated ? 5.0 : 0.0) animations:^{
    // ... layout views ...
}];

НО: это приводит к тому, что некоторые элементы не анимируются!

Я называю этот метод более одного раза (первый раз без, второй раз с анимацией), поэтому во второй раз анимация отменяется, устанавливая мой новый кадр как "жесткий" (без анимации).

Как реализовать необязательную анимацию с подходом блоков?

1 Ответ

9 голосов
/ 14 апреля 2011

Вы можете определить все изменения, которые вы хотите сделать в блоке. Затем вы либо подаете блок на UIView animate..., если хотите, чтобы изменения были анимированы, либо выполняете его напрямую, чтобы внести изменения без анимации.

void (^myViewChanges)(void) = ^() {
    myView.alpha = 0.5;
    // other changes you want to make to animatable properties
};

if (animated) {
    [UIView animateWithDuration:5.0f animations:myViewChanges];
} else {
    myViewChanges();
}
...