我正在尝试为嵌入在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
];
}
要验证,调用该方法,我设置一个断点。
呼叫立即返回,但仅显示动画结束。
我将UIView连接到控制器。
请帮助,我被困住了。
提前致谢! 帕特里克
答案 0 :(得分: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];
}];
回应你的意见:
直到下一次运行runloop时才会启动动画。在您的应用完成其操作之前,它们不会启动。如果你在循环中等待,你将遇到同样的问题,并冻结你的界面。考虑为每个字母使用单独的标签,并为每个动画添加逐渐增大的延迟。所有这些动画指令将立即排队,然后在接下来的几秒钟内播放。想象一下,你就像一个电影导演,你告诉每个演员在下一个场景中该做什么。然后,一旦每个人都知道该怎么做,你就坐下来大喊“行动”,然后看着它们发挥出来。