【问题标题】:Core Animation - separate timings of animations in group核心动画 - 组中动画的单独计时
【发布时间】:2017-07-11 02:12:17
【问题描述】:

我有两个动画想要链接成组。

它们看起来像这样:

func animate(circle: UIView) {

    var animations = [CABasicAnimation]()

    let opacityAnimation = CABasicAnimation(keyPath: "opacity")
    opacityAnimation.repeatCount = Float.infinity
    opacityAnimation.autoreverses = true
    opacityAnimation.fromValue = 0.0
    opacityAnimation.toValue = 0.40

    animations.append(opacityAnimation)

    let scaleAnimation = CABasicAnimation(keyPath: "transform.scale")
    scaleAnimation.repeatCount = Float.infinity
    scaleAnimation.autoreverses = true
    scaleAnimation.fromValue = 0.8
    scaleAnimation.toValue = 1

    animations.append(scaleAnimation)

    let group = CAAnimationGroup()
    group.duration = 1.4
    group.repeatCount = FLT_MAX
    group.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    group.animations = animations

    circle.layer.add(group, forKey: nil)
}

有没有办法可以将单独的持续时间设置为第一个动画并单独设置为第二个?例如,我想要opacityAnimation 3 秒,scaleAnimation 1 秒

我该怎么做?

【问题讨论】:

标签: ios swift uiview core-animation


【解决方案1】:

尝试使用此代码,但我没有测试此代码。

func animate(circle: UIView) {

        CATransaction.begin()
        CATransaction.setCompletionBlock({

            let scaleAnimate:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale")
            scaleAnimate.fromValue = 1.0
            scaleAnimate.toValue = 0.0
            scaleAnimate.duration = 0.9
            scaleAnimate.repeatCount = 1
            scaleAnimate.removedOnCompletion = true
            scaleAnimate.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
            circle.layer.addAnimation(scaleAnimate, forKey: "scaleSmallAnimation")
        })

        let opacityAnimation = CABasicAnimation(keyPath: "opacity")
        opacityAnimation.repeatCount = 1
        opacityAnimation.autoreverses = true
        opacityAnimation.fromValue = 1.0
        opacityAnimation.toValue = 0.40
        opacityAnimation.duration = 2.0

        circle.layer.addAnimation(opacityAnimation, forKey: "opacity")
        CATransaction.commit()
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多