UIView.animate: шта је то, анимација својстава UIView у iOS

Аутор: IT Sectr Објављено: 2026-03-01 Време читања: 8 мин

UIView.animate — основни метод анимације својстава UIView у iOS, реализован у UIKit-у кроз блокове са duration, delay и options. Метод анимира frame, alpha, transform, backgroundColor и друга анимирана својства. Чланак описује синтаксу, параметре, практичне примере и унутрашње уређење анимација UIKit-а.

Главне ствари

  • UIView.animate — блочни метод анимације својстава UIView: frame, alpha, transform, backgroundColor
  • Параметри — duration (сек), delay (сек), options (крива, понављање, аутоматски обрт), completion (затварање)
  • Spring анимација — UIView.animate(withDuration:delay:usingSpringWithDamping:) са физичким одбијањем
  • Keyframe анимација — UIView.animateKeyframes за вишекорачне секвенце са релативним временом
  • Core Animation — испод хаубе UIView.animate користи CABasicAnimation на нивоу CALayer

Шта је UIView.animate?

UIView.animate — статички метод класе UIView, представљен у iOS 4 (2010). Пружа декларативни API за анимацију анимираних својстава UIView: frame, bounds, center, alpha, transform, backgroundColor. Метод прима блок (затварање) са променама својстава — систем аутоматски креира CABasicAnimation за свако промењено својство.

Блочна синтакса је заменила стари beginAnimations/commitAnimations (iOS 2-3) и постала стандард анимације у UIKit-у. Анимације UIView.animate се извршавају на главној нити и не блокирају UI. Подразумевано трајање анимације је 0.25 секунди са кривом easeInOut.

Према подацима Apple WWDC 2023, препоручени начин анимације у новим пројектима је SwiftUI са модификаторима .animation() и .transition(), али UIKit.animate остаје главни алат за подршку iOS 16 и ниже, као и за сложене прилагођене прелазе.

Параметри и опције анимације

UIView.animate пружа три кључна параметра: duration (трајање у секундама), delay (кашњење пре почетка) и options (скуп битних маски UIView.AnimationOptions). Options укључују curve (easeInOut, easeIn, easeOut, linear), repeat (понављање), autoreverse (аутоматски обрт), allowUserInteraction, beginFromCurrentState и overrideInheritedDuration.

ПараметарТипОпис
durationTimeIntervalТрајање анимације у секундама (тип Double)
delayTimeIntervalКашњење пре почетка анимације
optionsUIView.AnimationOptionsБитна маска: curve, repeat, autoreverse, layoutSubviews
animations() -> VoidБлок са променама анимираних својстава
completion(Bool) -> VoidЗатварање након завршетка анимације

Параметар options се комбинује кроз низ: [.curveEaseOut, .repeat, .autoreverse]. Анимација са repeat и autoreverse нежно враћа View у почетно стање и понавља се бесконачно. За коначан број понављања користите animateKeyframes.

Spring анимација кроз UIView.animate

Spring анимација додаје физички ефекат опруге: објекат не само да прелази из тачке A у B, већ прелеће циљ са пригушеним осцилацијама. Параметри: usingSpringWithDamping (пригушење 0-1, где 0 — максималне осцилације) и initialSpringVelocity (почетна брзина опруге).

Apple препоручује usingSpringWithDamping у опсегу 0.4-0.8 за природне UI анимације. Вредност 0.5 ствара приметан одскок без осећаја гумастости. initialSpringVelocity = 1.0 одговара брзини од 1 pt/сек. При 0 анимација почиње из стања мировања.

swift
// Пример spring анимације и keyframe
import UIKit

class AnimatedView: UIView {

    func springBounce() {
        // Spring анимација са пригушењем
        UIView.animate(
            withDuration: 0.8,
            delay: 0,
            usingSpringWithDamping: 0.5,
            initialSpringVelocity: 1.0,
            options: [.allowUserInteraction],
            animations: {
                self.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
                self.alpha = 0.7
            },
            completion: { _ in
                UIView.animate(withDuration: 0.3) {
                    self.transform = .identity
                    self.alpha = 1.0
                }
            }
        )
    }

    func slideIn(from offset: CGFloat) {
        self.transform = CGAffineTransform(translationX: offset, y: 0)
        self.alpha = 0.0

        UIView.animate(
            withDuration: 0.6,
            delay: 0.1,
            options: [.curveEaseOut]
        ) {
            self.transform = .identity
            self.alpha = 1.0
        }
    }
}

Keyframe анимација

UIView.animateKeyframes омогућава поделу анимације на неколико корака (keyframes), сваки са својим релативним временом и трајањем. Метод addKeyframe(withRelativeStartTime:relativeDuration:) прихвата временске вредности од 0 до 1 у односу на укупно трајање анимације.

Keyframe анимације су корисне за вишекорачне ефекте: пулсација дугмета (повећање → пауза → враћање), секвенцијално појављивање елемената, сложене деформације са међустањима. Сваки keyframe може имати своју криву анимације кроз options.

swift
// Keyframe анимација са сложеном секвенцом
func complexPulse() {
    UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [.repeat]) {
        UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.25) {
            self.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
            self.alpha = 0.5
        }
        UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.25) {
            self.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
            self.alpha = 0.8
        }
        UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5) {
            self.transform = .identity
            self.alpha = 1.0
        }
    }
}

// Анимација са угњежденим затварањима
func animateCardTransition() {
    UIView.animate(withDuration: 0.4, delay: 0, options: [.curveEaseOut]) {
        self.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
    } completion: { _ in
        UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseIn]) {
            self.transform = .identity
        }
    }
}

Унутрашње уређење: Core Animation испод хаубе

Испод хаубе, UIView.animate делегира анимацију CALayer-у сваког UIView-а кроз Core Animation (CAAnimation). Када промените frame унутар блока анимације, систем креира CABasicAnimation за својства position и bounds одговарајућег слоја. Ако се промени alpha — CABasicAnimation за својство opacity слоја.

Core Animation користи засебан процес render server (backboardd на iOS-у) који обрађује анимације на фреквенцији од 120 Hz (ProMotion). UIView.animate не блокира главну нит — промене својстава се шаљу render server-у, који интерполира оквире без учешћа апликације.

Према Apple-у, анимације кроз UIView.animate имају додатно оптерећење од ~2-3% CPU по сваком измењеном слоју при 60 FPS. За масовне анимације (20+ објеката истовремено) препоручује се коришћење CATransaction и ручно управљање слојевима.

За отклањање грешака и визуализацију UIKit анимација користите Xcode Debug View Hierarchy — приказује активне CAAnimations на сваком слоју, њихово трајање, криву и тренутно стање. Разумевање унутрашњег уређења Core Animation помаже у избегавању проблема са перформансама код сложених анимација и избору оптималног приступа између UIView.animate и директног коришћења CABasicAnimation.

За отклањање грешака и визуализацију UIKit анимација користите Xcode Debug View Hierarchy — приказује активне CAAnimations на сваком слоју, њихово трајање, криву и тренутно стање. Разумевање унутрашњег уређења Core Animation помаже у избегавању проблема са перформансама код сложених анимација и избору оптималног приступа између UIView.animate и директног коришћења CABasicAnimation.

Често постављана питања

Која својства UIView се могу анимирати?

Анимирана својства UIView: frame, bounds, center, alpha, transform (CGAffineTransform), backgroundColor. Такође се анимирају промене layoutIfNeeded() при промени Auto Layout ограничења. Остала својства се не анимирају кроз UIView.animate — за њих користите CALayer или CADisplayLink.

По чему се UIView.animate разликује од UIView.animateKeyframes?

UIView.animate извршава једну анимацију од тренутног до циљног стања. UIView.animateKeyframes дели укупно трајање на неколико корака (keyframes) са различитим релативним почетком и трајањем. Keyframe је погодан за вишекорачне секвенце.

Зашто UIView.animate не блокира UI?

Анимације UIView.animate се обрађују у render server-у (backboardd) — засебном iOS процесу. Главна нит само шаље почетне и крајње вредности својстава. Интерполација оквира се извршава на GPU-у кроз Core Animation на фреквенцији до 120 FPS.

Како зауставити UIView.animate пре завршетка?

Позовите layer.removeAllAnimations() на UIView-у — то ће уклонити све CAAnimations креиране испод хаубе. За прецизнију контролу користите CATransaction и идентификаторе анимација кроз CAAnimation.keyPath.

Резиме

  • UIView.animate — блочни метод анимације својстава UIView са duration, delay, options и completion
  • Spring анимација — usingSpringWithDamping + initialSpringVelocity за физички одскок
  • Keyframe анимација — UIView.animateKeyframes са addKeyframe за вишекорачне секвенце
  • Анимирана својства — frame, bounds, center, alpha, transform, backgroundColor
  • Core Animation — испод хаубе UIView.animate креира CABasicAnimation за CALayer
  • Render server — анимације се обрађују на 120 Hz без блокирања главне нити
  • SwiftUI — препоручени алат за нове пројекте, UIKit.animate — за подршку iOS 16-

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође