• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 实现背靠背 UIAnimations 的最流畅方式

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:03:10 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要在我正在创建的游戏中让我的角色跳跃(将 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-推荐答案


您能否在动画仍在运行时禁用您的 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap