0Pricing
Swift Academy · Урок

Неявные и явные анимации

Анимируйте свойства слоёв с помощью CABasicAnimation.

«Неявные и явные анимации» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Два способа анимировать слои

Core Animation предоставляет неявные анимации, которые запускаются автоматически при изменении свойства, и явные анимации, для которых Вы создаёте объект анимации.

Знание обоих подходов и их взаимодействия необходимо для плавного движения.

Неявные анимации

Изменение анимируемого свойства отдельного слоя запускает неявную анимацию с кривой по умолчанию длительностью 0,25 с — объект анимации не требуется.

let layer = CALayer()
// Later, this animates automatically:
layer.opacity = 0.0

Анимируемые свойства

Многие свойства слоя можно анимировать: opacity, position, bounds, backgroundColor, transform, cornerRadius и другие.

layer.cornerRadius = 20 // animates implicitly
layer.backgroundColor = UIColor.systemGreen.cgColor

Действия и механизм действий

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

Слои представлений отключают неявные анимации

Для слоёв, прикреплённых к UIView, неявные анимации отключены. Вместо этого анимируйте их через UIView.animate или используйте явные анимации.

UIView.animate(withDuration: 0.3) {
    view.alpha = 0
}

CABasicAnimation

CABasicAnimation анимирует одно свойство между значениями fromValue и toValue. Добавьте её к слою, указав путь ключа, соответствующий свойству.

let anim = CABasicAnimation(keyPath: "opacity")
anim.fromValue = 1.0
anim.toValue = 0.0
anim.duration = 0.5
layer.add(anim, forKey: "fade")

Представление и модель

Явная анимация изменяет только значения представления, отображаемые на экране; значение модели слоя возвращается обратно после завершения анимации.

Чтобы изменение сохранилось, задайте также значение модели.

layer.opacity = 0.0 // set model value so it persists
layer.add(anim, forKey: "fade")

Покадровые анимации

CAKeyframeAnimation анимирует переход через несколько values в течение keyTimes или вдоль path — это идеально подходит для отскоков и движения по кривым.

let move = CAKeyframeAnimation(keyPath: "position")
move.values = [
    NSValue(cgPoint: CGPoint(x: 0, y: 0)),
    NSValue(cgPoint: CGPoint(x: 100, y: 0)),
    NSValue(cgPoint: CGPoint(x: 100, y: 100))
]
move.duration = 1.0
layer.add(move, forKey: "path")

Функции времени

Управляйте ускорением с помощью timingFunction: плавность в начале, плавность в конце, линейная зависимость или пользовательская кубическая кривая Безье.

anim.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)

Группировка и транзакции

Объединяйте несколько изменений в CATransaction, чтобы использовать общие длительность и временные параметры или полностью отключить неявные анимации.

CATransaction.begin()
CATransaction.setDisableActions(true)
layer.position = CGPoint(x: 200, y: 200)
CATransaction.commit()

Делегаты анимации и завершение

Задайте CATransaction.setCompletionBlock или делегат анимации, чтобы выполнить код после завершения движения: очистить ресурсы, запустить следующую анимацию или обновить состояние.

CATransaction.begin()
CATransaction.setCompletionBlock { print("done") }
layer.add(anim, forKey: "fade")
CATransaction.commit()

Проверка: анимации

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

Итоги: неявные и явные анимации

Отдельные слои неявно анимируются через действия при изменении анимируемых свойств; для слоёв представлений это отключено, поэтому используется UIView.animate. Явные CABasicAnimation и CAKeyframeAnimation анимируют значение представления, поэтому для сохранения результата обновляйте значение модели.

Настраивайте движение с помощью функций времени, объединяйте изменения в CATransaction и используйте блоки завершения для последующих действий.

Часто задаваемые вопросы

Урок «Неявные и явные анимации» бесплатный?

Да — полный текст урока «Неявные и явные анимации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Неявные и явные анимации»?

Анимируйте свойства слоёв с помощью CABasicAnimation. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Неявные и явные анимации»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы CALayer
  2. Неявные и явные анимации
  3. Трансформации и трёхмерные эффекты
  4. Пользовательская отрисовка с Core Graphics
← Назад к Swift Academy