我正在尝试使用
[UIView animateWithDuration:1 delay:2 options:UIViewAnimationOptionCurveEaseIn animations:^{
} completion:^ (BOOL completed) {} ];
然而,无论我为延迟提出什么号码,都没有延迟
当触摸另一个按钮时,我试图让一系列按钮一个接一个地淡入淡出。所以我使用了一系列具有不同延迟时间的UIView动画,但无论我进入什么时间延迟,它们都会同时出现。有人有什么建议吗?
答案 0 :(得分:16)
首先,值animateWithDuration
和delay
是 float
值,应该是1.0
和2.0
意见:如果您的代码位于ViewDidLoad
方法,请尝试将其移至分离的函数
其次,如果您无法通过此上下文执行此操作,请跳转到另一个,或者使用
performSelector:withObject:afterDelay
另一种解决方法是将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) {}];
}];
PS:一些属性不支持动画,例如在动画块中设置文本,因此在延迟结束后,动画开始会立即更改文本,因为该更改不可动画
在文本动画案例中,要执行所需操作,请按如下所示更改完成块中的文本:
[UIView animateWithDuration:1.0
delay:2.0
options: UIViewAnimationOptionTransitionCrossDissolve
animations:nil
completion:^{
lbl.text = @"My text" ;
}];
同样backgroundColor
在<{1}}中不动画。相反,请使用视图UIView
:
backgroundColor
属性
layer
答案 1 :(得分:2)
或者您可以在viewWillAppear
进行编码。
- (void)viewWillAppear:(BOOL)animated {
[UIView animateWithDuration:1.0
delay:2.0
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
//yourAnimation
} completion:^(BOOL finished){
NSLog(@"Animation is finished");
}];
}
答案 2 :(得分:1)
在您实施之前,请阅读它 持续时间:动画的总持续时间,以秒为单位。如果指定负值或0,则在不对其进行动画处理的情况下进行更改。 延迟:开始动画之前等待的时间量(以秒为单位)。指定值0可立即开始动画。 选项
- 使用上述两个参数的浮点值 - 如果你在单独的例程&amp;
中定义动画操作,那将是冰在ViewDidAppear / viewWillapear中调用它适当的位置。
Use function like this & set your UI Element properties like this: [UIView animateWithDuration:0.6 delay:0.3 options: UIViewAnimationOptionCurveEaseInOut animations:^{ [self.view layoutIfNeeded]; [yourviews setTintColor:[UIColor whiteColor]]; self.view.backgroundColor = [UIColor greenColor]; } completion:^(BOOL finished){ // You next action to perform after completion; }]; }
快乐的编码,希望它能帮到你。