菜鸟教程小白 发表于 2022-12-12 10:56:55

ios - 未调用 UIView 动画完成 block


                                            <p><p>我在正在开发的应用程序中发现了一个奇怪的错误。在我进入细节之前,我会陈述我的问题是</p>

<p>1 - 为什么不能调用 UIView 动画完成 block </p>

<p>2 - 为什么 UIView 动画完成 block 会在模态视图出现后被调用?</p>

<p>我有一系列在 ViewController 出现后开始的 UIView 动画。他们有完成 block 。大多数情况下,动画完成 block 都会被调用。但每隔一段时间,应用就会进入完成 block 不被调用的状态。</p>

<p>此外,当我从当前 ViewController 模态显示新的 ViewController 时,之前未调用的动画完成 block 都会被调用。</p>

<p>一旦应用处于这种状态,动画完成 block 就不会再次被调用,除非我再次呈现模态视图。</p>

<p>我的动画 block 基本上是这样的:</p>

<pre><code> int i = 0;
for (UIView *view in self.cellImageViews)
{
   [UIView animateWithDuration:CELL_ANIMATION_DISMISS_DURATION
                           delay:(i)*CELL_ANIMATION_STAGGER_INTERVAL
                         options:UIViewAnimationOptionCurveEaseIn
                      animations:^{
                        view.transform = CGAffineTransformTranslate(view.transform, 0, CELL_ANIMATION_DISMISS_TRANSLATION);
                      } completion:^(BOOL finished) {
                         NSLog(@&#34;Animation Completed: i:%d, finished:%d, count%d&#34;,i,finished,)
                         if(finished &amp;&amp; (i == (-1)))
                         {
                            NSLog(@&#34;if statement passed&#34;);
                            // My completion block stuff goes here
                         }
                     }            
         ];
      i++;
    }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>尝试关注</p>

<pre><code>[UIView animateWithDuration:CELL_ANIMATION_DISMISS_DURATION
                      delay:(i)*CELL_ANIMATION_STAGGER_INTERVAL
                  options:UIViewAnimationOptionCurveEaseIn
               animations:^{
                     int i = 0;

                     for (UIView *view in self.cellImageViews)
                     {
                         view.transform = CGAffineTransformTranslate(view.transform, 0, CELL_ANIMATION_DISMISS_TRANSLATION);
                         i++;
                     }

               } completion:^(BOOL finished) {
                     if(finished)
                     {
                         NSLog(@&#34;if statement passed&#34;);
                         // My completion block stuff goes here
                     }
               }
];
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 未调用 UIView 动画完成 block ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24945017/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24945017/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 未调用 UIView 动画完成 block