链式 UIView 动画,每个动画都包含循环内的完成块 [重复]

Posted

技术标签:

【中文标题】链式 UIView 动画,每个动画都包含循环内的完成块 [重复]【英文标题】:Chained UIView animation with each contain completion block within a loop [duplicate] 【发布时间】:2017-03-29 12:52:25 【问题描述】:

我想在一个循环中连续做几个animations。每个animation 首先执行“UI 动画”,然后执行“完成块”。我的问题是如何添加几个这样的animations 系列在一个循环中,以便执行顺序如下:条件->“UI 动画 1”->“完成块 1”-> 条件-> “UI 动画 2”->“完成块 2”->...-> 条件->“UI 动画 n”->“完成块 n”。

 while(condition)
    [UIView animateWithDuration:0.3 animations:^
        //UI animation
        CGRect frame = sourceView.frame;
        frame.origin = destPosition;
        view.frame = frame;
     completion:^(BOOL finished) 
        //completion block
        self.currentBoard = destBoard;
    ];
 

抱歉,我可能无法清楚地提出我的问题。我已经更新了我的问题,添加了 while 循环问题是我发现下一个条件测试是在上一个动画的完成块之前执行的

【问题讨论】:

***.com/questions/3849460/… 您正在寻找的答案在@DonMag 的链接中 【参考方案1】:

您需要在完成块 N-1 中启动 UI Animation N。

[UIView animateWithDuration:0.3 animations:^
  // UI Animation 1
 completion:^(BOOL finished) 
  // Handle the completion of UI Animation 1

  // Start the next animation
  [UIView animateWithDuration:0.3 animations:^
    // UI Animation 2
   completion:^(BOOL finished) 
    // Completion block of animation 2
  

【讨论】:

如果 n 很大,嵌套很困难。是否可以在一个循环内实现? 您可以查看此解决方案,其中将动画放入数组中,然后循环播放。 ***.com/questions/17949511/… 感谢您的信息。实际上,在我发布我的问题之前,我已经尝试过了。该解决方案的问题是没有我想要的完成块放在哪里。该解决方案中的完成块仅用于触发下一个动画。 您可以通过调用 getNextAnimation()(completed); 根据您的建议,我通过修改区块签名实现了这一点。现在我想在带有动画的while循环中添加条件测试。但是,下一个条件测试在上一个动画完成块之前执行,如我更新的问题描述中所示

以上是关于链式 UIView 动画,每个动画都包含循环内的完成块 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在代码中调用 UIView 动画

当“awakeFromNib”运行时,UICollectionViewCell 内的动画不会运行。

iOS 10 UILabels -> 1 UIView -> 循环动画

使用 Swift 在单个 UIView 上同时进行多个动画

如何使用 for 循环为 UIView 设置动画?

UIView 动画与 CALayers