难以链接两个 UIView 动画

Posted

技术标签:

【中文标题】难以链接两个 UIView 动画【英文标题】:Difficulty chaining two UIView animations 【发布时间】:2011-11-10 14:21:36 【问题描述】:

这就是我想要完成的。

UILabel 将以 100% 的 alpha 显示在屏幕上,并使用 UIView 动画向上移动 80 点。一旦该动画结束,我希望它在淡出到 alpha 0 的同时继续高出 80 点。我希望这两个动画显示为一个无缝动画。

我想也许我可以用 UIView 动画来做到这一点,然后在完成块中放置第二个 UIView 动画,如下所示。但是,在执行完成块之前似乎存在延迟,这会阻止两个动画看起来无缝。

谁能告诉我做我想做的事情的最佳方法?

谢谢!

[UIView animateWithDuration:1.2 delay:0 options:UIViewAnimationCurveLinear animations:^   
    myLabel.center = endPoint;


completion:^(BOOL finished) 
    [UIView animateWithDuration:1.2 delay:0 options:UIViewAnimationCurveLinear animations:^                
         myLabel.center = endPoint2;
         myLabel.alpha = 0;
        
        completion:^(BOOL finished) 
             NSLog(@"animations complete");
     ];
 ];

【问题讨论】:

【参考方案1】:

这应该可行。我看不出为什么不这样做。只是一个小补充,检查finished 块中的动画完成。因为这将处理动画期间的任何错误。此外,如果您打算让这个UILabel 可点击,那么您需要通过设置标志UIViewAnimationOptionAllowUserInteraction 来实现它。

   [UIView animateWithDuration:1.2 delay:0 options:UIViewAnimationCurveLinear | UIViewAnimationOptionAllowUserInteraction animations:^   
        myLabel.center = endPoint;
        myLabel.alpha = 1;
    
    completion:^(BOOL finished) 
        if(finished)
        [UIView animateWithDuration:1.2 delay:0 options:UIViewAnimationCurveLinear | UIViewAnimationOptionAllowUserInteraction animations:^                
             myLabel.center = endPoint2;
             myLabel.alpha = 0;
            
            completion:^(BOOL finished) 
                 NSLog(@"animations complete");
         ];
        
     ];

【讨论】:

它不工作......它工作得很好,但它不是我正在寻找的无缝效果。它向上移动了 80 像素……停了一会儿,然后继续向上移动到最后的 80 像素并逐渐消失。我试图让它无缝而不像两个动画。 我对代码做了一个小的编辑。从第一个动画中删除了 myLabel.alpha = 1,因为在动画开始之前它已经设置为 1

以上是关于难以链接两个 UIView 动画的主要内容,如果未能解决你的问题,请参考以下文章

在 UIView 动画期间难以允许用户交互

Swift:链式 UIView 动画永远重复? Obj-C 代码不可移植

如何创建 UIView 波纹圆圈动画?

动画在快速链接动画中没有向上移动

UIView 中的 UIBezierPath 动画

使用drawrect自定义UIView动画