2

我的自定义控件有一个方法-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 ...
}];

但是:这会导致一些元素没有动画!

我不止一次调用此方法(第一次没有,第二次有动画),所以第二次取消动画,将我的新帧设置为“硬”(没有动画)。

如何使用块方法实现可选动画?

4

1 回答 1

9

您可以定义要在块中进行的所有更改。然后,如果您希望更改动画,则可以将块提供给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();
}
于 2011-04-14T14:14:09.813 回答