UIView动画调用两次,完成后BOOL设置为true

时间:2014-05-30 08:26:30

标签: ios objective-c animation uiview

由于网络问题,我有可能两次调用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];

任何线索?

1 个答案:

答案 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;
        }
    }];
}

当然,只有当你不需要同时播放两次动画时,这才有效。