当前位置: 首页 > 知识库问答 >
问题:

iOS向已设置动画的UIView添加第二个动画

万俟经纶
2023-03-14

我有一个叫波浪的UIView,它有一个漂亮的无尽的“浮动”动画

  [UIView animateWithDuration:1
                      delay:0
                    options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut
                 animations:^{

                     CGPoint center = waves.center;
                     center.y += 5;
                     waves.center = center;

                 } 
                 completion:nil];

现在,如果我添加另一个动画,比如说将这个视图移动到不同的位置,“浮动”动画就会停止。这是一个合理的反应,在完成块中再次启动“浮动”是没有问题的。我只是想知道我是否遗漏了什么,也许是在动画选项中,以不相互中断的方式将两者结合起来。

我能够这样做,如果第二个动画是基于CGAffineTransfromScale,它们结合没有问题,但当我移动视图的中心时,情况并非如此。

更新:在性能中发现一个错误。我有一个按钮,它调用负责用动画移动视图中心的方法。如果我在上一个动画完成视图捕捉到新位置之前按得太快,则不会调用动画完成块。下面是该方法的代码:

- (void)wavesAnimationReversed:(BOOL)reversed {

    CGFloat y = waves.frame.size.height*0.25;
    y = reversed ? -y : y;
    // CGFloat damping = reversed ? 1 : 0.65;
    CGFloat damping = 1;    

    [UIView animateWithDuration:kWAVES_ANIMATION_DURATION
                          delay:0
         usingSpringWithDamping:damping
          initialSpringVelocity:0
                        options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut
                     animations:^{

                         CGPoint center = waves.center;
                         center.y += y;
                         waves.center = center;

                     }
                     completion:^(BOOL finished) {
                         [self handleStartWavesFloating];
                     }];
}

共有1个答案

史超英
2023-03-14

如果要执行多个动画,应使用animateKeyFrames。也就是说,你不能为正在被动画化的东西设置动画(你的描述与将要发生的事情完全匹配)。也就是说,因为视图中的值已经更改(它是真实值),所以动画的发生超出了您的控制。

因此,如果创建新动画,默认值是第一个动画的结束值,当第二个动画触发时,它将自动将视图移动到新位置以开始第二个动画。

 类似资料:
  • 我有一段代码,可以为UIImage的位置设置动画,但是过渡没有设置动画,而是位置会立即改变。我不认为这是一个代码问题,因为相同的代码在另一个项目上工作,但我无法找出其他错误。 alpha会动画,而y位置不会。我的约束如下所示 编辑:我正在使用针对8.4的Xcode-Beta 7

  • 我正在尝试使用animateWithDuration:方法在iOS中制作动画。 我在屏幕上移动一个图像(UIImageView中一个云的简单图片),然后让动画循环运行,我想在每次穿过屏幕时改变速度(持续时间)。 我试过几种方法,但都不适合我。 我首先想到我可以使用UIViewAnimationOption重复如下: 但这似乎并没有再次调用arc4Anywhere()来重置持续时间...也就是说,只

  • 我有一段疯狂的代码。我如何用核心动画来制作动画,这样我的代码就少了很多?我已经找到了一些做“摆动”动画的代码,但那是3D的,我只想让视图左右移动,我不想让它在侧面反弹。

  • 我放在表格视图中的代码:cellForRowAtIndexPath:- 要查看UITableViewCell中的任何动画,应该使用哪种方法或放置哪种类型的动画。我知道我无法设置现有标签的动画,因为这些标签带有约束。

  • 标准的块非常适合需要单个动画效果的动画,即调整大小和/或移动。 是否有一种方法可以使动画渐进,使动画开始缓慢,并随着其进展而提高速度? 我可以尝试嵌套的

  • 本文向大家介绍iOS 如何为自动版面设置动画,包括了iOS 如何为自动版面设置动画的使用技巧和注意事项,需要的朋友参考一下 示例 如果没有“自动布局”,动画将随着时间的推移更改视图的帧而完成。使用“自动布局”时,约束决定了视图框架,因此您必须为约束设置动画。这种间接方式使动画更难以可视化。 以下是使用“自动版式”制作动画的方法: 改变约束的不断使用周期调用创建后(CADisplayLink,dis