Неявные и явные анимации
Используйте модификатор .animation() или блок withAnimation {} в зависимости от задачи.
«Неявные и явные анимации» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Два стиля анимации
SwiftUI поддерживает неявные анимации (модификатор .animation) и явные анимации (замыкание withAnimation).
struct Demo: View {
@State private var scale = 1.0
var body: some View {
Circle().scaleEffect(scale)
}
}Неявная анимация с .animation
Добавление .animation(_:value:) к представлению запускает его анимацию при каждом изменении связанного значения.
Circle()
.scaleEffect(scale)
.animation(.easeInOut(duration: 0.3), value: scale)Запуск неявной анимации
Любое изменение состояния, влияющее на представление, автоматически запускает заданную для него неявную анимацию.
Button("Grow") {
scale = 2.0 // .animation fires automatically
}Явная анимация с withAnimation
withAnimation оборачивает изменение состояния и одновременно анимирует все получившиеся изменения представления.
Button("Animate") {
withAnimation(.spring()) {
scale = 2.0
offset = 50
}
}Анимация нескольких свойств
withAnimation удобнее, когда нужно синхронно анимировать несколько изменений состояния как одну транзакцию.
withAnimation(.easeOut(duration: 0.5)) {
isExpanded = true
rotation = 90
opacity = 0.5
}Типы анимации
Swift предоставляет анимации spring, easeIn, easeOut, easeInOut, linear и анимации с пользовательской кривой времени.
.spring(response: 0.4, dampingFraction: 0.6)
.easeInOut(duration: 0.3)
.linear(duration: 0.5)
.timingCurve(0.2, 0.8, 0.2, 1.0, duration: 0.4)Отключение анимации
Передайте .animation(.none, value:) или оберните изменения в withAnimation(nil), чтобы выборочно отключить анимацию.
Circle()
.scaleEffect(scale)
.animation(.none, value: scale) // no animationПриоритет анимации
Явный вызов withAnimation имеет приоритет над неявными модификаторами .animation во вложенных представлениях.
withAnimation(.linear) {
value = true // linear wins over any .animation on subviews
}Повторяющиеся анимации
Используйте .repeatForever или .repeatCount для циклических анимаций, например эффектов пульсации.
.animation(
.easeInOut(duration: 0.8).repeatForever(autoreverses: true),
value: pulsing
)Задержка и скорость
Сочетайте анимации с модификаторами .delay и .speed значения анимации.
.animation(.spring().delay(0.2).speed(1.5), value: flag)Выбор между неявной и явной анимацией
Используйте неявную анимацию для анимации одного представления, связанной с одним значением; явную — для координации нескольких свойств или представлений.
// Implicit: simple, single view
.animation(.easeIn, value: isVisible)
// Explicit: multi-property or cross-view
withAnimation { a = 1; b = 2 }Быстрая проверка
Какой подход лучше всего координирует одновременную анимацию нескольких свойств состояния?
Итоги урока
Неявные анимации (.animation(_:value:)) автоматически реагируют на изменения значения одного представления. Явные анимации (withAnimation {}) координируют несколько изменений. Для создания сложных эффектов объединяйте их с .delay, .speed и .repeatForever.
Часто задаваемые вопросы
Урок «Неявные и явные анимации» бесплатный?
Да — полный текст урока «Неявные и явные анимации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Неявные и явные анимации»?
Используйте модификатор .animation() или блок withAnimation {} в зависимости от задачи. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Неявные и явные анимации»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Неявные и явные анимации
- matchedGeometryEffect для эффектных переходов
- Пользовательские AnimatableModifier и Animatable
- TimelineView и Canvas для высокопроизводительной отрисовки