我想安排一系列动画,在屏幕上动画介绍文字。最后一个动画在完成时,应该触发运行游戏的游戏勾号逻辑。
出于某种原因,一切都在立即发生。有人能解释为什么会发生这种情况吗?或者有更好的选择吗?
[self.view bringSubviewToFront:_ViewIntroSeconds];
[UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
animations:^(void) {
[_IntroLabel1 setAlpha:1];
}
completion:^(BOOL finished){
}];
[UIView animateWithDuration:0.4 delay:3.0 options:UIViewAnimationOptionCurveEaseInOut
animations:^(void) {
[_IntroLabel2 setAlpha:1];
[_IntroLabel1 setAlpha:0];
[_IntroLabel1 setCenter:CGPointMake(0, _IntroLabel1.center.y)];
}
completion:^(BOOL finished){
}];
[UIView animateWithDuration:0.4 delay:5.0 options:UIViewAnimationOptionCurveEaseInOut
animations:^(void) {
[_IntroLabel3 setAlpha:1];
[_IntroLabel2 setAlpha:0];
[_IntroLabel2 setCenter:CGPointMake(0, _IntroLabel2.center.y)];
}
completion:^(BOOL finished){
[self updateGame];
[self updateClock];
[_ViewIntroSeconds setAlpha:0];
}];
我的建议是将延迟设置为0,然后将后续的UIView动画块放在前面的animateWithDuration语句的completion块中:
[UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
animations:^(void) {
[_IntroLabel1 setAlpha:1];
}
completion:^(BOOL finished){
[UIView animateWithDuration:0.4 delay:2.6 options:UIViewAnimationOptionCurveEaseInOut
animations:^(void) {
[_IntroLabel2 setAlpha:1];
[_IntroLabel1 setAlpha:0];
[_IntroLabel1 setCenter:CGPointMake(0, _IntroLabel1.center.y)];
}
completion:^(BOOL finished){
[UIView animateWithDuration:0.4 delay:1.6 options:UIViewAnimationOptionCurveEaseInOut
animations:^(void) {
[_IntroLabel3 setAlpha:1];
[_IntroLabel2 setAlpha:0];
[_IntroLabel2 setCenter:CGPointMake(0, _IntroLabel2.center.y)];
}
completion:^(BOOL finished){
[self updateGame];
[self updateClock];
[_ViewIntroSeconds setAlpha:0];
}];
}];
}];
这会给你想要的效果。
编辑:发生这种情况的原因是,UIView animateWithDuration
block开始动画,并在动画仍然有效时继续执行以下代码。因此,建议在完成块中执行“下一个”动画效果。否则,几乎会立即执行所有持续时间为animateWithDuration的请求。
编辑2:我编辑了块中的延迟,分别给你0、3和5秒的“错觉”。
我在动画制作方法上有问题 我已经为GoogleMap创建了自己的CalloutBubble 在我的视图控制器中,我创建属性 然后,如果我尝试用任何方法创建calloutView,所有这些都可以很好地处理动画,但如果我用Google map方法返回视图 我的动画会立即在calloutView中运行,也会立即调用completion,然后再次调用runningLabel方法,因此它不会像必须的那样工作
我不知道如何在iOS7中设置NSLayoutConstraint动画持续时间。这是我的代码:
UIView animateWithDuration的文档称,在动画期间,所有用户交互都被阻止。但我想知道它是否也会在预动画延迟期间阻塞。 文件上说 “在动画制作过程中,将暂时禁用正在制作动画的视图的用户交互。(在iOS 5之前,将禁用整个应用程序的用户交互。)如果希望用户能够与视图交互,请在选项参数中包含UIViewAnimationOptionAllowUserInteraction常量。"
我有一个CollectionView,我想在用户选择的CollectionViewCell内创建一个动画。我选择使用animateKeyframesWithDuration,因为我想一步一步地创建自定义动画。我的代码如下所示: 选中此选项后,将在自定义CollectionViewCell内执行。问题是我想强制在某个特定点立即停止动画。但当我这样做时,动画并没有完全停止,它只是将剩余的动画移动到另一
我有一段代码,可以为UIImage的位置设置动画,但是过渡没有设置动画,而是位置会立即改变。我不认为这是一个代码问题,因为相同的代码在另一个项目上工作,但我无法找出其他错误。 alpha会动画,而y位置不会。我的约束如下所示 编辑:我正在使用针对8.4的Xcode-Beta 7
我最近发现了一些UIView动画代码,并注意到它没有正确使用animateKeyframesWithDuration:delay:options:animations:completion:方法,并且一直在尝试修复它,但由于某些原因,动画不完全相同。 以下是我找到的代码: 这有两个问题: 应该真正使用关键帧动画,而不是在完成块中嵌套动画 使用animateKeyframesWithDuration