使用UIView animateWithDuration:delay:Xcode

use*_*881 4 iphone xcode5 animatewithduration

我正在尝试使用

[UIView animateWithDuration:1 delay:2 options:UIViewAnimationOptionCurveEaseIn animations:^{
} completion:^ (BOOL completed) {}         ];
Run Code Online (Sandbox Code Playgroud)

但无论我为延迟做出什么号码,都没有延迟.
当触摸另一个按钮时,我试图让一系列按钮一个接一个地淡入淡出.所以我使用了一系列具有不同延迟时间的UIView动画,但无论我进入什么时间延迟,它们都会同时出现.有人有什么建议吗?

Mut*_*awe 17

首先,价值观animateWithDurationdelayfloat价值观,应尽可能1.02.0

意见:如果您的代码位于ViewDidLoadMethod,请尝试将其移动到单独的函数

其次,如果您无法通过此上下文执行此操作,请跳转到另一个,或者使用等方式进行操作

performSelector:withObject:afterDelay
Run Code Online (Sandbox Code Playgroud)

另一种方法是将其设置delay为0,并将后续UIView动画块放在completion先前animateWithDuration语句的块中

 [UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
        //Leave it empty
                 }
                 completion:^(BOOL finished){

// Your code goes here
   [UIView animateWithDuration:1.0 delay:0.0 options:
   UIViewAnimationOptionCurveEaseIn animations:^{
        } completion:^ (BOOL completed) {}];
    }];
Run Code Online (Sandbox Code Playgroud)

PS:某些属性不支持动画,例如在动画块中设置文本,因此在延迟结束后,动画开始立即更改文本,因为该更改不可动画.

在文本动画案例中,要执行所需操作,请按如下所示更改完成块中的文本:

[UIView animateWithDuration:1.0
                      delay:2.0
                    options: UIViewAnimationOptionTransitionCrossDissolve
                 animations:nil
                 completion:^{
                     lbl.text =  @"My text" ;
}];
Run Code Online (Sandbox Code Playgroud)

同样backgroundColor以动画UIView.相反,使用backgroundColor视图的属性layer:

[[controller layer] setBackgroundColor:[[UIColor anyColor] CGColor]];
Run Code Online (Sandbox Code Playgroud)