UIView.animate: vad är det, animation av UIView-egenskaper i iOS

Författare: IT Sectr Publicerad: 2026-03-01 Lästid: 8 min

UIView.animate — den primära metoden för animering av UIView-egenskaper i iOS, implementerad i UIKit genom block med duration, delay och options. Metoden animerar frame, alpha, transform, backgroundColor och andra animerbara egenskaper. Artikeln beskriver syntax, parametrar, praktiska exempel och den interna strukturen för UIKit-animationer.

Huvudpunkter

  • UIView.animate — blockmetod för animering av UIView-egenskaper: frame, alpha, transform, backgroundColor
  • Parametrar — duration (sek), delay (sek), options (kurva, upprepning, automatisk omvändning), completion (slutning)
  • Fjäderanimation — UIView.animate(withDuration:delay:usingSpringWithDamping:) med fysisk studs
  • Keyframe-animation — UIView.animateKeyframes för flerstegssekvenser med relativ tid
  • Core Animation — under huven använder UIView.animate CABasicAnimation på CALayer-nivå

Vad är UIView.animate?

UIView.animate — en statisk metod i UIView-klassen, introducerad i iOS 4 (2010). Den tillhandahåller ett deklarativt API för animering av animerbara UIView-egenskaper: frame, bounds, center, alpha, transform, backgroundColor. Metoden tar emot ett block (slutning) med egenskapsändringar — systemet skapar automatiskt CABasicAnimation för varje ändrad egenskap.

Blocksyntaxen ersatte den gamla beginAnimations/commitAnimations (iOS 2-3) och blev standard för animation i UIKit. UIView.animate-animationer körs på huvudtråden och blockerar inte UI. Som standard är animationstiden 0.25 sekunder med easeInOut-kurva.

Enligt Apple WWDC 2023 är det rekommenderade sättet att animera i nya projekt SwiftUI med .animation() och .transition()-modifierare, men UIKit.animate förblir det huvudsakliga verktyget för stöd av iOS 16 och äldre, samt för komplexa anpassade övergångar.

Parametrar och alternativ för animation

UIView.animate tillhandahåller tre nyckelparametrar: duration (varaktighet i sekunder), delay (fördröjning före start) och options (uppsättning bitmasker UIView.AnimationOptions). Options omfattar curve (easeInOut, easeIn, easeOut, linear), repeat (upprepning), autoreverse (automatisk omvändning), allowUserInteraction, beginFromCurrentState och overrideInheritedDuration.

ParameterTypBeskrivning
durationTimeIntervalAnimationens varaktighet i sekunder (typ Double)
delayTimeIntervalFördröjning före start av animation
optionsUIView.AnimationOptionsBitmask: curve, repeat, autoreverse, layoutSubviews
animations() -> VoidBlock med ändringar av animerbara egenskaper
completion(Bool) -> VoidSlutning efter animationens slutförande

Parametern options kombineras via en array: [.curveEaseOut, .repeat, .autoreverse]. Animation med repeat och autoreverse återställer smidigt View till ursprungsläget och upprepar oändligt. För ett begränsat antal upprepningar, använd animateKeyframes.

Fjäderanimation via UIView.animate

Fjäderanimation lägger till en fysisk fjädereffekt: objektet går inte bara från punkt A till B, utan överskjuter målet med dämpade oscillationer. Parametrar: usingSpringWithDamping (dämpning 0-1, där 0 — maximala oscillationer) och initialSpringVelocity (fjäderns initiala hastighet).

Apple rekommenderar usingSpringWithDamping i intervallet 0.4-0.8 för naturliga UI-animationer. Värdet 0.5 skapar en märkbar studs utan gummikänsla. initialSpringVelocity = 1.0 motsvarar en hastighet på 1 pt/sek. Vid 0 startar animationen från vilotillstånd.

swift
// Exempel på fjäder- och keyframe-animation
import UIKit

class AnimatedView: UIView {

    func springBounce() {
        // Fjäderanimation med dämpning
        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-animation

UIView.animateKeyframes gör det möjligt att dela upp animationen i flera steg (keyframes), var och en med sin egen relativa tid och varaktighet. Metoden addKeyframe(withRelativeStartTime:relativeDuration:) accepterar tidsvärden från 0 till 1 i förhållande till den totala animationstiden.

Keyframe-animationer är användbara för flerstegseffekter: knapppulsering (förstoring → paus → återgång), sekventiell uppkomst av element, komplexa deformationer med mellanliggande tillstånd. Varje keyframe kan ha sin egen animationskurva via options.

swift
// Keyframe-animation med komplex sekvens
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
        }
    }
}

// Animation med nästlade slutningar
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
        }
    }
}

Intern struktur: Core Animation under huven

Under huven delegerar UIView.animate animationen till CALayer för varje UIView via Core Animation (CAAnimation). När du ändrar frame inuti animationsblocket, skapar systemet CABasicAnimation för egenskaperna position och bounds för motsvarande lager. Om alpha ändras — CABasicAnimation för egenskapen opacity för lagret.

Core Animation använder en separat render server-process (backboardd på iOS) som bearbetar animationer vid 120 Hz (ProMotion). UIView.animate blockerar inte huvudtråden — egenskapsändringar skickas till render servern, som interpolerar bildrutor utan appens deltagande.

Enligt Apple har animationer via UIView.animate en overhead på ~2-3% CPU per ändrat lager vid 60 FPS. För massanimationer (20+ objekt samtidigt) rekommenderas användning av CATransaction och manuell lagerhantering.

För felsökning och visualisering av UIKit-animationer, använd Xcode Debug View Hierarchy — den visar aktiva CAAnimations på varje lager, deras varaktighet, kurva och aktuella tillstånd. Förståelse av Core Animations interna struktur hjälper till att undvika prestandaproblem vid komplexa animationer och välja den optimala metoden mellan UIView.animate och direkt användning av CABasicAnimation.

För felsökning och visualisering av UIKit-animationer, använd Xcode Debug View Hierarchy — den visar aktiva CAAnimations på varje lager, deras varaktighet, kurva och aktuella tillstånd. Förståelse av Core Animations interna struktur hjälper till att undvika prestandaproblem vid komplexa animationer och välja den optimala metoden mellan UIView.animate och direkt användning av CABasicAnimation.

Vanliga frågor

Vilka UIView-egenskaper kan animeras?

Animerbara egenskaper för UIView: frame, bounds, center, alpha, transform (CGAffineTransform), backgroundColor. Även ändringar av layoutIfNeeded() vid ändring av Auto Layout-begränsningar animeras. Övriga egenskaper animeras inte via UIView.animate — för dem använd CALayer eller CADisplayLink.

Vad är skillnaden mellan UIView.animate och UIView.animateKeyframes?

UIView.animate utför en animation från nuvarande tillstånd till måltillstånd. UIView.animateKeyframes delar upp den totala tiden i flera steg (keyframes) med olika relativ start och varaktighet. Keyframe passar för flerstegssekvenser.

Varför blockerar UIView.animate inte UI?

UIView.animate-animationer bearbetas i render server (backboardd) — en separat iOS-process. Huvudtråden skickar endast initiala och slutliga egenskapsvärden. Bildruteinterpolering utförs på GPU via Core Animation med en frekvens på upp till 120 FPS.

Hur stoppar man UIView.animate före slutförande?

Anropa layer.removeAllAnimations() på UIView — detta tar bort alla CAAnimations som skapats under huven. För mer exakt kontroll, använd CATransaction och animationsidentifierare via CAAnimation.keyPath.

Sammanfattning

  • UIView.animate — blockmetod för animering av UIView-egenskaper med duration, delay, options och completion
  • Fjäderanimation — usingSpringWithDamping + initialSpringVelocity för fysisk studs
  • Keyframe-animation — UIView.animateKeyframes med addKeyframe för flerstegssekvenser
  • Animerbara egenskaper — frame, bounds, center, alpha, transform, backgroundColor
  • Core Animation — under huven skapar UIView.animate CABasicAnimation för CALayer
  • Render server — animationer bearbetas vid 120 Hz utan att blockera huvudtråden
  • SwiftUI — rekommenderat verktyg för nya projekt, UIKit.animate — för stöd av iOS 16-

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också