Swift中每次动画迭代后的延迟



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

您可以使用类似以下的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)
        }
    }
}

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

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")

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

您也可以使用UIView关键帧动画(animateKeyframesWithDuration),其中在动画结束时内置"停滞时间",然后重复该动画。

最新更新