UIView.animate: cos'è, animazione delle proprietà UIView in iOS

Autore: IT Sectr Pubblicato: 2026-03-01 Tempo di lettura: 8 min

UIView.animate è il metodo principale per animare le proprietà UIView in iOS, implementato in UIKit tramite blocchi con duration, delay e options. Il metodo anima frame, alpha, transform, backgroundColor e altre proprietà animabili. Questo articolo descrive la sintassi, i parametri, esempi pratici e la struttura interna delle animazioni UIKit.

Punti chiave

  • UIView.animate — metodo basato su blocchi per animare le proprietà UIView: frame, alpha, transform, backgroundColor
  • Parametri — duration (sec), delay (sec), options (curva, ripetizione, inversione automatica), completion (chiusura)
  • Animazione Spring — UIView.animate(withDuration:delay:usingSpringWithDamping:) con rimbalzo fisico
  • Animazione Keyframe — UIView.animateKeyframes per sequenze multi-step con temporizzazione relativa
  • Core Animation — internamente, UIView.animate utilizza CABasicAnimation a livello CALayer

Cos'è UIView.animate?

UIView.animate è un metodo statico della classe UIView, introdotto in iOS 4 (2010). Fornisce un'API dichiarativa per animare le proprietà animabili di UIView: frame, bounds, center, alpha, transform, backgroundColor. Il metodo accetta un blocco (chiusura) con modifiche delle proprietà — il sistema crea automaticamente CABasicAnimation per ogni proprietà modificata.

La sintassi a blocchi ha sostituito il vecchio beginAnimations/commitAnimations (iOS 2-3) ed è diventata lo standard di animazione in UIKit. Le animazioni UIView.animate vengono eseguite sul thread principale e non bloccano l'interfaccia utente. Per impostazione predefinita, la durata dell'animazione è di 0,25 secondi con una curva easeInOut.

Secondo Apple WWDC 2023, l'approccio di animazione consigliato nei nuovi progetti è SwiftUI con i modificatori .animation() e .transition(), ma UIView.animate rimane lo strumento principale per il supporto di iOS 16 e versioni precedenti, nonché per transizioni personalizzate complesse.

Parametri e opzioni di animazione

UIView.animate fornisce tre parametri chiave: duration (durata in secondi), delay (ritardo prima dell'inizio) e options (insieme di maschere di bit UIView.AnimationOptions). Le options includono curve (easeInOut, easeIn, easeOut, linear), repeat, autoreverse, allowUserInteraction, beginFromCurrentState e overrideInheritedDuration.

ParametroTipoDescrizione
durationTimeIntervalDurata dell'animazione in secondi (tipo Double)
delayTimeIntervalRitardo prima dell'inizio dell'animazione
optionsUIView.AnimationOptionsMaschera di bit: curve, repeat, autoreverse, layoutSubviews
animations() -> VoidBlocco con modifiche delle proprietà animabili
completion(Bool) -> VoidChiusura dopo il completamento dell'animazione

Il parametro options viene combinato tramite un array: [.curveEaseOut, .repeat, .autoreverse]. L'animazione con repeat e autoreverse riporta dolcemente la View allo stato iniziale e si ripete indefinitamente. Per un numero finito di ripetizioni, utilizza animateKeyframes.

Animazione Spring tramite UIView.animate

L'animazione Spring aggiunge un effetto fisico a molla: l'oggetto non si limita a spostarsi dal punto A al B, ma supera l'obiettivo con oscillazioni smorzate. Parametri: usingSpringWithDamping (smorzamento 0-1, dove 0 è oscillazione massima) e initialSpringVelocity (velocità iniziale della molla).

Apple consiglia usingSpringWithDamping nell'intervallo 0,4-0,8 per animazioni UI naturali. Un valore di 0,5 crea un rimbalzo evidente senza sensazione di "gomma". initialSpringVelocity = 1,0 corrisponde a una velocità di 1 pt/s. A 0, l'animazione parte da fermo.

swift
// Esempio di animazione spring e keyframe
import UIKit

class AnimatedView: UIView {

    func springBounce() {
        // Animazione spring con smorzamento
        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
        }
    }
}

Animazione Keyframe

UIView.animateKeyframes consente di suddividere un'animazione in più passaggi (keyframe), ciascuno con il proprio tempo e durata relativi. Il metodo addKeyframe(withRelativeStartTime:relativeDuration:) accetta valori temporali da 0 a 1 relativi alla durata totale dell'animazione.

Le animazioni keyframe sono utili per effetti multi-fase: pulsazione del pulsante (aumento → pausa → ritorno), comparsa sequenziale di elementi, deformazioni complesse con stati intermedi. Ogni keyframe può avere la propria curva di animazione tramite options.

swift
// Animazione keyframe con sequenza complessa
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
        }
    }
}

// Animazione con chiusure annidate
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
        }
    }
}

Struttura interna: Core Animation sotto il cofano

Sotto il cofano, UIView.animate delega l'animazione al CALayer di ogni UIView tramite Core Animation (CAAnimation). Quando si modifica il frame all'interno del blocco di animazione, il sistema crea CABasicAnimation per le proprietà position e bounds del livello corrispondente. Se viene modificato alpha — CABasicAnimation per la proprietà opacity del livello.

Core Animation utilizza un processo di server di rendering separato (backboardd su iOS) che elabora le animazioni a 120 Hz (ProMotion). UIView.animate non blocca il thread principale — le modifiche delle proprietà vengono inviate al server di rendering, che interpola i fotogrammi senza il coinvolgimento dell'applicazione.

Secondo Apple, le animazioni tramite UIView.animate hanno un overhead di circa il 2-3% di CPU per livello modificato a 60 FPS. Per animazioni di massa (20+ oggetti contemporaneamente), si consiglia di utilizzare CATransaction e la gestione manuale dei livelli.

Per eseguire il debug e visualizzare le animazioni UIKit, utilizzare Xcode Debug View Hierarchy — mostra le CAAnimations attive su ogni livello, la loro durata, curva e stato corrente. Comprendere la struttura interna di Core Animation aiuta a evitare problemi di prestazioni con animazioni complesse e a scegliere l'approccio ottimale tra UIView.animate e l'uso diretto di CABasicAnimation.

Per eseguire il debug e visualizzare le animazioni UIKit, utilizzare Xcode Debug View Hierarchy — mostra le CAAnimations attive su ogni livello, la loro durata, curva e stato corrente. Comprendere la struttura interna di Core Animation aiuta a evitare problemi di prestazioni con animazioni complesse e a scegliere l'approccio ottimale tra UIView.animate e l'uso diretto di CABasicAnimation.

Domande frequenti

Quali proprietà di UIView possono essere animate?

Proprietà animabili di UIView: frame, bounds, center, alpha, transform (CGAffineTransform), backgroundColor. Anche le modifiche a layoutIfNeeded() durante la modifica dei vincoli Auto Layout vengono animate. Le altre proprietà non possono essere animate tramite UIView.animate — per quelle utilizzare CALayer o CADisplayLink.

Qual è la differenza tra UIView.animate e UIView.animateKeyframes?

UIView.animate esegue un'animazione dallo stato corrente allo stato target. UIView.animateKeyframes suddivide la durata totale in più passaggi (keyframe) con diversi tempi di inizio e durate relativi. I keyframe sono adatti per sequenze multi-fase.

Perché UIView.animate non blocca l'interfaccia utente?

Le animazioni UIView.animate vengono elaborate nel server di rendering (backboardd) — un processo iOS separato. Il thread principale invia solo i valori iniziali e finali delle proprietà. L'interpolazione dei fotogrammi viene eseguita sulla GPU tramite Core Animation fino a 120 FPS.

Come fermare UIView.animate prima del completamento?

Chiamare layer.removeAllAnimations() sul UIView — questo rimuove tutte le CAAnimations create internamente. Per un controllo più preciso, utilizzare CATransaction e identificatori di animazione tramite CAAnimation.keyPath.

Riepilogo

  • UIView.animate — metodo basato su blocchi per animare le proprietà UIView con duration, delay, options e completion
  • Animazione Spring — usingSpringWithDamping + initialSpringVelocity per rimbalzo fisico
  • Animazione Keyframe — UIView.animateKeyframes con addKeyframe per sequenze multi-step
  • Proprietà animabili — frame, bounds, center, alpha, transform, backgroundColor
  • Core Animation — internamente, UIView.animate crea CABasicAnimation per CALayer
  • Server di rendering — le animazioni vengono elaborate a 120 Hz senza bloccare il thread principale
  • SwiftUI — strumento consigliato per nuovi progetti, UIView.animate per supporto iOS 16-

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche