我需要在我正在创建的游戏中让我的角色跳跃(将 origin.y 增加 50 并反转)。
到目前为止,我遇到了两种方法:
方法一:
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationOptionAutoreverse
animations:^{
CGRect frame = self.kevinImageView.frame;
frame.origin.y -= 50;
self.kevinImageView.frame = frame;
} completion:^(BOOL finished){
CGRect frame = self.kevinImageView.frame;
frame.origin.y = 135;
self.kevinImageView.frame = frame;
}];
问题:在每个完整的跳跃动画(向上和向下)结束时,ImageView 会向上跳跃,然后又向下跳跃(可能是因为它需要的量很小) completion block 被调用)。这很明显,我宁愿没有它。
方法二:
[UIView animateWithDuration:1.0
animations:^{
CGRect frame = self.kevinImageView.frame;
frame.origin.y -= 50;
self.kevinImageView.frame = frame;
} completion:^(BOOL finished){
[UIView animateWithDuration:1.0
animations:^{
CGRect frame = self.kevinImageView.frame;
frame.origin.y += 50;
self.kevinImageView.frame = frame;
}];
}];
问题:如果我点击 View (我使用 UITapGuestureRecognizer )并且 ImageView 在完成动画中(返回) , Image View 将快速回到底部而不是完成其动画。再次不是一个主要问题,但我应该能够避免的事情。
是否有任何我没有遇到过的方法可以解决这两个问题,或者解决其中一个方法的方法?
Best Answer-推荐答案 strong>
您能否在动画仍在运行时禁用您的 UITapGuestureRecognizer ?然后在动画结束时启用它。
if (!self.isAnimationRunning) {
self.isAnimationRunning = YES;
[UIView animateWithDuration:1.0
animations:^{
CGRect frame = self.kevinImageView.frame;
frame.origin.y -= 50;
self.kevinImageView.frame = frame;
} completion:^(BOOL finished){
[UIView animateWithDuration:1.0
animations:^{
CGRect frame = self.kevinImageView.frame;
frame.origin.y += 50;
self.kevinImageView.frame = frame;
} completion:^(BOOL finished){
self.isAnimationRunning = NO;
}];
}];
}
关于ios - 实现背靠背 UIAnimations 的最流畅方式,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/21153209/
|