CGAffineTransform (revolutionAngle :) заставляет UIView появляться в масштабе - PullRequest
0 голосов
/ 14 января 2020

Я столкнулся со странной проблемой при создании анимации для приложения проекта, над которым я работаю, чтобы улучшить свои навыки. Если вы внимательно посмотрите на следующий рисунок (я добавил здесь версию низкого качества и связал ее с версией высокого качества ниже), вы увидите, что в течение 6 секунд каждый из шпинделей кассеты увеличивается в размере до достижения размера терминала.

enter image description here

Высококачественная ссылка GIF

GIF были сняты в течение 30 секунд и ускорились до 6 секунд (5-кратная скорость).

Проблема возникает из этого кода:

@discardableResult
static func rotateRepeat(view: UIView) -> UIViewPropertyAnimator {
    let rotate = UIViewPropertyAnimator(duration: 1.0, curve: .linear)
    rotate.addAnimations {
        view.transform = CGAffineTransform(rotationAngle: .pi)
    }
    rotate.addCompletion{ _ in
        view.transform = .identity
        self.rotateRepeat(view: view)
    }
    rotate.startAnimation()

    return rotate
}

Эта проблема, похоже, не связана с тем фактом, что я использую UIViewPropertyAnimator для выполнить повторяющуюся анимацию, как это происходит с этим кодом:

UIView.animate(withDuration: 1.0, delay: 0.0, options: [.curveLinear, .repeat, .allowUserInteraction], animations: {
        self.view.transform = CGAffineTransform(rotationAngle: .pi)
    }, completion: nil)

Я выполнил некоторую элементарную отладку, проверив view.bounds, view.frame и view.image! .size для каждого полного l oop анимации; значения никогда не меняются. Есть ли другие виды значений в представлении, на которые я должен взглянуть, чтобы разгадать эту тайну?

...