每当此动画结束时,我都会尝试调用一个方法,但在某些情况下,例如,当用户离开应用程序时,它的完成块永远不会被调用。此外,当VC与UIView动画同时出现时,完成块永远不会被调用。
即使动画以某种方式中断,我应该如何确保调用回调?我是否应该根本不使用UIView动画完成块,而是使用其他内容?请开导我。。!
-(void)action {
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.doorLeft.frame = CGRectMake(0, 0, self.doorLeft.frame.size.width, self.doorLeft.frame.size.height);
self.doorRight.frame = CGRectMake(self.frame.size.width -self.doorRight.frame.size.width, 0, self.doorRight.frame.size.width, self.doorRight.frame.size.height);
} completion:^(BOOL finished){
if (finished) {
switch (self.type) {
case 0:
[self.delegate startTOship];
break;
case 1:
[self.delegate gameTOship];
break;
case 2:
[self.delegate shipTOgame];
break;
case 3:
[self.delegate shipTOmap];
break;
case 4:
[self.delegate gameTOmap];
break;
case 5:
[self.delegate mapTOgame];
break;
case 6:
[self.delegate mapTOship];
break;
}
[UIView animateWithDuration:0.3
delay:0.5
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.doorLeft.frame = CGRectMake(-self.doorLeft.frame.size.width, 0, self.doorLeft.frame.size.width, self.doorLeft.frame.size.height);
self.doorRight.frame = CGRectMake(self.doorRight.frame.size.width *2, 0, self.doorRight.frame.size.width, self.doorRight.frame.size.height);
} completion:^(BOOL finished){
if (finished) {
[self actionEnded];
}
}
];
}
}
];}
您可以做的是改用CATransaction。
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[self actionEnded]
}];
[UIView animateWithDuration:8.3 delay:0.5 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.doorLeft.frame = CGRectMake(-self.doorLeft.frame.size.width, 0, self.doorLeft.frame.size.width, self.doorLeft.frame.size.height);
self.doorRight.frame = CGRectMake(self.doorRight.frame.size.width *2, 0, self.doorRight.frame.size.width, self.doorRight.frame.size.height);
} completion:nil];
[CATransaction commit];
如果动画完全中断,则几乎会立即调用完成块。当动画不间断地完成时,也会调用该块。
P、 S:CATransaction可用于所有UIView动画。只要在动画发生之前说“开始”,在动画代码之后说“提交”。
我在我正在开发的应用程序中发现了一个奇怪的错误。在我进入细节之前,我将陈述我的问题 1-为什么不能调用UIView动画完成块 2-为什么在显示模式视图后会调用UIView动画完成块? 我有一系列UIView动画,它们在视图控制器出现后开始。他们有完成块。绝大多数情况下,动画完成块都会被调用。但每隔一段时间,应用程序就会进入一种状态,完成块不会被调用。 此外,当我从当前视图控制器模态地呈现一个新的视
我有一个用于交互式过渡的自定义动画师。还有一个,根据过渡进度设置为。效果的动画代码如下: 我通过调用它,当从它到第一个的转换开始时,它在第二个上调用。 然而,我这里有一个问题。在动画结束之前调用完成块。当我第一次运行转换(没有取消它)时,它工作得很好,但在随后的运行过程中,它就不工作了。 我也曾尝试将动画添加到我的动画师中,但也没有成功。 此外,当我取消转换时,在实际动画结束之前调用完成块(在这种
我有一段代码,可以为UIImage的位置设置动画,但是过渡没有设置动画,而是位置会立即改变。我不认为这是一个代码问题,因为相同的代码在另一个项目上工作,但我无法找出其他错误。 alpha会动画,而y位置不会。我的约束如下所示 编辑:我正在使用针对8.4的Xcode-Beta 7
我有一个动画块来执行一个简单的基于变换的动画,在完成时从它的超级视图中删除有问题的视图。 然后我使用Tech Q详述的代码 但是,此代码不会阻止完成代码的执行。因此,为了防止代码执行,我将完成代码更改为: 当检查finished==TRUE时,动画块暂停时,将阻止执行完成代码。如果在“取消暂停”动画之前超过持续时间,则不会执行完成代码。即在本例中,msgView仍保留在superview中。 是否
非常简单的动画: 动画工作得很好。但是,完成块被调用了两次。这也很好,我知道我需要检查布尔值,看看它是否真的完成了。嗯,不仅完成块被调用了两次,而且两次都完成了。 我怎么知道动画是否真的完成了?
我正在为数组中的每个UIView设置动画,我想知道所有动画何时完成。例如:我用一个简单的缩放动画在ViewController上显示10个UIView,每个UIView都有一个小延迟。在所有10个动画完成后,我想在完成块中再做一个动画。 我如何知道所有动画何时完成?