Skip to main content
LanguageУкраїнська
Інженерія5 хвилин читанняжовтень 2026 р

Як працюють весняні анімації в SwiftUI?

Коротка відповідь

У SwiftUI ви додаєте пружину за допомогою .animation(.spring) або withAnimation(.spring). Починаючи з iOS 17 основними налаштуваннями є тривалість і відскок, а також є пресети: .smooth (без відскоку), .snappy (трохи) і .bouncy (більше). Старіший код використовує відповідь і dampingFraction. Пружини SwiftUI зберігають свою швидкість, коли їх перериває нова анімація, що робить жести природними.

Основний винос

  • Використовуйте withAnimation(.spring) для зміни стану або .animation(.spring, value:) у поданні
  • iOS 17+: .spring(duration:bounce:) плюс пресети .smooth, .nappy і .bouncy
  • Старіший API: .spring(response:dampingFraction:blendDuration:)
  • Пружини — стиль анімації SwiftUI за замовчуванням з iOS 17
  • Переривчасті пружини зберігають свою швидкість, тому рухи передаються плавно

SwiftUI анімує зміни стану. Коли таке значення, як isExpanded, змінюється всередині withAnimation(.spring), кожен перегляд, який залежить від нього, переміщується до свого нового макета за допомогою пружини.

В iOS 17 і пізніших версіях найпростіший спосіб описати пружину – це два значення: тривалість, приблизно скільки часу потрібно, щоб осісти, і відскок, наскільки вона перевищує. Відскік 0 дає плавний рух без викидів; вищі значення додають відскок. Apple також надає пресети: .smooth, .nappy і .bouncy.

Старіший код використовує .spring(response:dampingFraction:). Відповідь подібна до тривалості, і демпфіруюча частка 1 означає відсутність відскоку, тоді як менші значення додають відскок. Обидві форми описують ту саму фізичну пружину.

Великою перевагою пружин є переривання. Якщо користувач торкається ще раз або жест перетягування завершує анімацію, нова пружина починається з поточної позиції та швидкості, тому стрибка не відбувається. Для жестів перетягування передайте швидкість жесту, коли користувач відпускає, щоб елемент продовжував рух у напрямку, у якому його кинули.

Якщо той самий компонент також потрібно запускати в Інтернеті або на Android, допоможе зберегти пружинні значення як спільні маркери руху. ExodeUI, який ми робимо, має середовище виконання SwiftUI, тому один розроблений компонент із його пружинами може працювати в SwiftUI та на інших платформах.

Часті запитання

Яка анімація за замовчуванням у SwiftUI?

Починаючи з iOS 17, стандартною анімацією є плавна пружина.

Яка різниця між .snappy і .bouncy?

.snappy швидко осідає з невеликим викидом; .bouncy перевищує більше. .smooth не має перерегулювання.

Як перетворити відповідь і dampingFraction на тривалість і відскок?

Відповідь приблизно відповідає тривалості. Частка демпфування, що дорівнює 1, є відскоком 0; нижча частка демпфування означає більше відскоку.

Як додати швидкість за допомогою жесту перетягування?

Зчитайте швидкість, коли перетягування закінчується, і використовуйте інтерполяційну пружину або новіші API пружини, які приймають початкову швидкість.

Відповідні посібники та приклади

Налаштуйте пружину, перш ніж писати код

Перетягуйте повзунки, спостерігайте за рухом і копіюйте пружинні значення для SwiftUI, CSS та інших платформ.

Відкрийте пружинний генератор
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →