菜鸟教程小白 发表于 2022-12-12 18:03:10

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


                                            <p><p>我需要在我正在创建的游戏中让我的角色跳跃(将 <code>origin.y</code> 增加 <code>50</code> 并反转)。</p>

<p>到目前为止,我遇到了两种方法:</p>

<p><strong>方法一:</strong></p>

<pre><code>[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;
               }];
</code></pre>

<p><strong>问题:</strong>在每个完整的跳跃动画(向上和向下)结束时,<code>ImageView</code> 会向上跳跃,然后又向下跳跃(可能是因为它需要的量很小) <code>completion</code>block 被调用)。这很明显,我宁愿没有它。</p>

<p><strong>方法二:</strong></p>

<pre><code>[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;
                                    }];
               }];
</code></pre>

<p><strong>问题:</strong>如果我点击 View (我使用 <code>UITapGuestureRecognizer</code>)并且 <code>ImageView</code> 在完成动画中(返回) , <code>Image View</code> 将快速回到底部而不是完成其动画。再次不是一个主要问题,但我应该能够避免的事情。 </p>

<p>是否有任何我没有遇到过的方法可以解决这两个问题,或者解决其中一个方法的方法?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您能否在动画仍在运行时<em>禁用</em>您的 <code>UITapGuestureRecognizer</code>?然后在动画结束时<em>启用</em>它。 </p>

<pre><code>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;   
                   }];
             }];
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 实现背靠背 UIAnimations 的最流畅方式,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21153209/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21153209/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 实现背靠背 UIAnimations 的最流畅方式