Проблема быстрого вращения колеса с использованием основной анимации и замедления - PullRequest
0 голосов
/ 13 января 2020

На основании правил казино вы должны определить результат вращения колеса после вращения вращения. Поэтому моя проблема заключается в том, как добиться такой анимации с использованием базовой анимационной техники c.

. Я пытался связать две анимации с использованием базовой c анимации.

static func createRotationAnimationLinear(currentAngle:CGFloat,distance:Double,duration:Double)->CABasicAnimation{
    let animation = CABasicAnimation(keyPath: "transform.rotation")
    animation.fromValue = currentAngle

    animation.toValue = distance
    animation.duration = duration
    animation.timingFunction = CAMediaTimingFunction(name: .linear)

    animation.fillMode = .forwards
    animation.isRemovedOnCompletion = false
    return animation
}

Когда анимация Запускает, я вызываю бэкэнд-сервис, чтобы получить результат вращения и запустить первую анимацию вращения.

Первая анимация с линейным замедлением и продолжается до тех пор, пока результат не будет возвращен из бэкэнда.

Как только результат возвращается, я запускаю другую анимацию на том же keyPath, но с разным замедлением, чтобы иметь эффект замедления и останавливаться на возвращенном результате вращения.

    static func createRotationAnimation(currentAngle:CGFloat,distance:Double,duration:Double)->CABasicAnimation{
    let animation = CABasicAnimation(keyPath: "transform.rotation")
    animation.fromValue = currentAngle

    animation.toValue = distance
    animation.duration = duration
    animation.timingFunction = CAMediaTimingFunction(controlPoints: 0.05, 0.05, 0.4, 1.0)

    animation.fillMode = .forwards
    animation.isRemovedOnCompletion = false

    return animation
}

Но проблема в том, что переход от первой анимации ко второй не является бесшовным.

Есть идея, как добиться такого эффекта вращения.

Заранее спасибо

...