【问题标题】:Delay after each animation iteration in SwiftSwift 中每次动画迭代后的延迟
【发布时间】:2015-03-19 17:06:45
【问题描述】:

我有一个核心动画,其.repeatCount 设置为Float.infinity。在动画的每次迭代之后,即。每次重复后,我想要延迟 3 秒。我怎样才能做到这一点?谢谢!

【问题讨论】:

标签: ios objective-c swift animation core-animation


【解决方案1】:

您可以使用如下所示的function 来做您需要的事情。

func animateInfinitelyWithDelay(delay: TimeInterval, duration: TimeInterval) {

    UIView.animate(
        withDuration: duration, 
        delay: delay, 
        options: UIView.AnimationOptions.curveEaseIn,
        animations: { () -> Void in

        // Your animation Code                        
    }) { (finished) -> Void in
        if finished {
            self.animateInfinitelyWithDelay(delay: delay, duration: duration)
        }
    }

}

【讨论】:

    【解决方案2】:

    使用 Core Animation 实现此效果的一种方法是在原始动画对象上配置除重复计数之外的所有内容,然后将其包装在具有更长持续时间的动画组中并重复该动画组。

    let originalAnimation = /* create and configure original animation ... */
    originalAnimation.duration = shortDuration
    
    let group = CAAnimationGroup()
    group.animations = [originalAnimation]
    group.duration = shortDuration + delayAtTheEnd
    group.repeatCount = .infinity
    
    theLayer.add(group, forKey: "repeating animation with delay between iterations")
    

    请注意,根据原始动画的作用,您可能需要配置填充模式才能获得正确的外观。

    【讨论】:

      【解决方案3】:

      您还可以使用 UIView 关键帧动画 (animateKeyframesWithDuration),其中动画最后内置了“死区时间”,然后重复该动画。

      【讨论】:

      • 如果能显示一些代码就太好了
      • 我仍在使用 Objective-C。这个想法是你使用一个外部调用 animateKeyframesWithDuration,总持续时间。然后在里面你打一个或多个电话到addKeyframeWithRelativeStartTime:relativeDuration:animations:。使用该方法,您可以指定在整个持续时间结束之前开始的最后一个关键帧,并在整个持续时间之前结束。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2021-11-29
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多