Как анимировать UIView (не слой) по пути Безье, используя `animateKeyframes (withDuration: delay: options: animations: extension:)` - PullRequest
0 голосов
/ 29 апреля 2020

Я хорошо знаком как с CAAnimation, так и с различными формами анимации UIView. Более новый метод анимации UIView animateKeyframes(withDuration:delay:options:animations:completion:) позволяет вам легко анимировать объект UIView по изогнутому пути, указав серию положений ключевых кадров, по которым вы хотите, чтобы представление перемещалось. (Игнорирование того факта, что вы можете анимировать больше, чем положение представления. Это не предмет моего вопроса.)

Когда вы анимируете представление через серию точек, используя animateKeyframes(withDuration:delay:options:animations:completion:), представление движется по кривой, которая сплайн Катмулла-Рома. Это форма кривой сплайна cubi c, где форма проходит через все контрольные точки.

Анимация CAKeyframeAnimation в ответе Лео в этой теме Ios Swift Анимируйте представление в нелинейном пути

оживляет слой через изогнутый CGPath. Пример Лео создает квадрат кривой Кривая Безье c, и слой анимируется через этот путь Безье. Он мог бы так же легко использовать путь Безье cubi c, или круговую траекторию, или любую кривую, которую он описал, используя CGPath.

CALayer анимации фактически оживляют слой, в то время как UIView анимации оживляют представление (ну, они по-прежнему анимируют слой под обложками, но они принимают представления в качестве параметров, и представление заканчивается в месте назначения после завершения анимации, поэтому они, похоже, работают с представлениями)

Насколько мне известно, в анимации ключевых кадров UIView всегда используется сплайн Catmull-Rom для определения пути анимации. Если вы вместо этого хотели анимировать UIView вдоль кривой, определенной путем Безье, возможно ли это с помощью анимации UIView? (Не используется CAAnimation. Я знаю, как это сделать.)

...