由于网络问题,我有可能两次调用UIView动画功能。不知怎的,这似乎弄乱了你在完成块中得到的完成的布尔值。
在动画期间,我将UIView移开屏幕。在动画结束时,它应该将框架i设置为隐藏动画。我注意到完成块中的已完成BOOL始终设置为YES。因此,当我第二次调用动画时,在第一次调用动画之前,它将设置为BOOL完成,即使我希望它被设置为NO,因为动画被新的调用中断了同样的动画。
[UIView animateWithDuration:animated ? VOTE_ANIMATION_DURATION : 0.0 delay:2 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.waitingView.frame = CGRectMake(self.waitingView.frame.origin.x, (-self.waitingView.frame.size.height) - WAITINGVIEW_SHADOW_HEIGHT, self.waitingView.frame.size.width, self.waitingView.frame.size.height);
} completion:^(BOOL finished) {
if (finished) {
DDLogInfo(@"set VotingView Animation is finished");
self.waitingView.hidden = YES;
}
}];
我也尝试添加以下行,但没有帮助。
[UIView setAnimationBeginsFromCurrentState:YES];
任何线索?
答案 0 :(得分:0)
好吧,你可以设置一个布尔" isAnimating"您班级中的属性,只有在错误时才启动动画。
if (!self.isAnimating) {
[UIView animateWithDuration:animated ? VOTE_ANIMATION_DURATION : 0.0 delay:2 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.isAnimating = YES;
self.waitingView.frame = CGRectMake(self.waitingView.frame.origin.x, (-self.waitingView.frame.size.height) - WAITINGVIEW_SHADOW_HEIGHT, self.waitingView.frame.size.width, self.waitingView.frame.size.height);
}
completion:^(BOOL finished) {
if (finished) {
DDLogInfo(@"set VotingView Animation is finished");
self.waitingView.hidden = YES;
self.isAnimating = NO;
}
}];
}
当然,只有当你不需要同时播放两次动画时,这才有效。