UIView animateWithDuration立即返回

Pat*_*ick 2 iphone animation objective-c

我正在尝试为嵌入在UIView中的标签制作动画.

这是代码:

-(void)displayText:(NSString*)text {


[label setText:text];


[UIView animateWithDuration:5.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     [labelView setAlpha:1.0];
                 }
                 completion:nil
 ];

[UIView animateWithDuration:5.8
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     [labelView setAlpha:0.0];
                 }
                 completion:nil
 ];
}
Run Code Online (Sandbox Code Playgroud)

为了验证,调用该方法,我设置了一个断点.

呼叫立即返回,但仅显示动画结束.

我将UIView连接到控制器.

请帮忙,我被困住了.

提前致谢 !帕特里克

jac*_*ash 5

正确,

当你为这样的视图设置动画时,动画实际上不会发生在屏幕上,直到runloop的下一次传递(即一旦你的方法返回).

UIView将合并顺序编程的动画.

使用完成块淡出.代码看起来有点奇怪,但效果很好!

[UIView animateWithDuration:5.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     [labelView setAlpha:1.0];
                 }
                 completion:^(BOOL completed){
                     [UIView animateWithDuration:5.8
                                           delay:0.0
                                         options:UIViewAnimationOptionCurveEaseIn
                                      animations:^{[labelView setAlpha:0.0];}
                                      completion:nil];
                 }];
Run Code Online (Sandbox Code Playgroud)

回应你的意见:

动画将在下一次运行runloop之后才会开始.在您的应用完成其操作之前,它们不会启动.如果你在循环中等待,你将遇到同样的问题,并冻结你的界面.考虑为每个字母使用单独的标签,并为每个动画添加逐渐增大的延迟.所有这些动画指令将立即排队,然后在接下来的几秒钟内播放.想象一下,你就像一个电影导演,你告诉每个演员在下一个场景中该做什么.然后,一旦每个人都知道该怎么做,你就坐下来大喊"行动",看着它们全部发挥出来.