首页 文章

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

提问于
浏览
0

由于网络问题,我有可能两次调用UIView动画功能 . 不知何故,这似乎弄乱了你在完成块中得到的完成的布尔值 .

在动画期间,我将UIView移出屏幕 . 在动画结束时,它应该将我正在动画的帧设置为隐藏 . 我注意到完成块中的已完成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

    好吧,你可以在你的类中设置一个布尔“isAnimating”属性,只有当它为FALSE时才开始动画 .

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

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

相关问题