Масштабная анимация NSView не плавная - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь масштабировать NSView размером 56x56. Анимация применяет масштаб 0,95 и альфа 0,75, автореверсию и бесконечное повторение. У меня работает анимация, но она очень короткая (не плавная).

Как я могу использовать CAAnimationGroup и CABasicAnimation для плавной анимации этих свойств?

Вы можете увидеть короткую анимацию на этом гифке

Animation Example

Код анимации выглядит следующим образом

private func transformWithScale(_ scale: CGFloat) -> CATransform3D {
    let bounds = squareView.bounds
    let scale = scale != 0 ? scale : CGFloat.leastNonzeroMagnitude
    let xPadding = 0.5*bounds.width
    let yPadding = 0.5*bounds.height
    let translate = CATransform3DMakeTranslation(xPadding, yPadding, 0.0)
    return scale == 1.0 ? translate : CATransform3DScale(translate, scale, scale, 1.0)
}

func startAnimation() {
    let layer = squareView.layer!
    layer.removeAllAnimations()
    layer.anchorPoint = CGPoint(x: 0.5, y: 0.5)

    let scaleAnimation = CABasicAnimation(keyPath: "transform")
    scaleAnimation.fromValue = transformWithScale(1.0)
    scaleAnimation.toValue = transformWithScale(0.95)

    let alphaAnimation = CABasicAnimation(keyPath: "opacity")
    alphaAnimation.fromValue = 1.0
    alphaAnimation.toValue = 0.75

    let group = CAAnimationGroup()
    group.duration = 0.8
    group.autoreverses = true
    group.timingFunction = CAMediaTimingFunction(name: .easeIn)
    group.repeatCount = .infinity
    group.animations = [scaleAnimation, alphaAnimation]

    layer.add(group, forKey: "scaleAndAlpha")
}
...