title: Core Animation
text: # Core Animation
  
  Core Animation è un API per la visualizzazione dei dati, usata sotto il sistema operativo macOS per produrre un'interfaccia utente animata.
  
  Core Animation offre la possibilità agli sviluppatori di produrre interfacce utente animate, sfruttando un modello implicito. Il programmatore specifica solamente lo stato iniziale e finale di un oggetto, mente Core Animation è in grado di calcolarne lo spostamento. Questo permette la creazione relativamente semplice di complicate animazioni, senza richiedere nessun codice specifico. Core Animation può creare un'animazione per qualunque oggetto che sia visibile e fornisce un accesso unificato a Core Image, Core Video e altre tecnologie Quartz. Come altri modelli grafici, Core Animation può sfruttare l'accelerazione con un processore grafico (GPU).
  
  ## Storia
  
  Core Animation è apparso pubblicamente per la prima volta con Mac OS X Leopard, ma realmente è emerso dallo sviluppo di iPhone. È stato mostrato in una demo, il 7 agosto 2006 durante l'annuale conferenza WWDC. Al Macworld Expo, Apple ha rivelato che anche iPhone utilizza lo stesso concetto di animazione.
  
  ## Funzionamento
  
  Le animazioni vengono eseguite in un thread indipendente dal programma, consentendo così l'esecuzione di processi simultanea a Core Animation. In questo modo le prestazioni dell'applicazione non vengono diminuite ed è possibile controllare, interrompere, invertire e ricostruire le animazioni stesse.
  
  ## Esempi
  
  Uno degli esempi più evidenti di Core Animation, è iChat, l'istant messenger di Apple, ora sostituito con iMessage. Le animazioni vengono utilizzate per aggiungere gli amici che hanno effettuato l'accesso nella tua lista contatti.
  
  Ancora un altro esempio è l'interfaccia dell'iPhone, dispositivo che monta una versione modificata di macOS, che sfrutta appunto Core Animation.
  
  ## Temi
  
  ### Nozioni di base sui livelli
  
  class CALayer
  
  Un oggetto che gestisce il contenuto basato su immagini e consente di eseguire animazioni su quel contenuto.
  
  protocol CALayerDelegate
  
  Metodi che un'app può implementare per rispondere agli eventi relativi al livello.
  
  class CAConstraint
  
  Una rappresentazione di un singolo vincolo di layout tra due livelli.
  
  protocol CALayoutManager
  
  Metodi che consentono a un oggetto di gestire il layout di un layer e dei suoi sottolivelli.
  
  class CAConstraintLayoutManager
  
  Un oggetto che fornisce un gestore di layout basato su vincoli.
  
  protocol CAAction
  
  Un'interfaccia che consente agli oggetti di rispondere alle azioni innescate da una CALayermodifica.
  
  ### Testo, forme e sfumature
  
  class CATextLayer
  
  Un livello che fornisce un layout di testo semplice e il rendering di stringhe normali o attribuite.
  
  class CAShapeLayer
  
  Un livello che disegna una spline Bézier cubica nel suo spazio di coordinate.
  
  class CAGradientLayer
  
  Un livello che disegna una sfumatura di colore sul colore di sfondo, riempiendo la forma del livello (compresi gli angoli arrotondati)
  
  ### Animazione
  
  class CAAnimation
  
  La superclasse astratta per le animazioni in Core Animation.
  
  protocol CAAnimationDelegate
  
  Metodi che l'app può implementare per rispondere all'avvio e all'arresto delle animazioni.
  
  class CAPropertyAnimation
  
  Una sottoclasse astratta di CAAnimationper la creazione di animazioni che manipolano il valore delle proprietà del livello.
  
  class CABasicAnimation
  
  Un oggetto che fornisce funzionalità di animazione di base con fotogramma chiave singolo per una proprietà del livello.
  
  class CAKeyframeAnimation
  
  Un oggetto che fornisce funzionalità di animazione dei fotogrammi chiave per un oggetto livello.
  
  class CASpringAnimation
  
  Un'animazione che applica una forza simile a una molla alle proprietà di un livello.
  
  class CATransition
  
  Un oggetto che fornisce una transizione animata tra gli stati di un livello.
  
  class CAValueFunction
  
  Un oggetto che fornisce un metodo flessibile per definire le trasformazioni animate.
  
  ### Gruppi di animazione
  
  class CAAnimationGroup
  
  Un oggetto che consente di raggruppare ed eseguire più animazioni contemporaneamente.
  
  class CATransaction
  
  Un meccanismo per raggruppare più operazioni dell'albero dei livelli in aggiornamenti atomici dell'albero di rendering.
  
  ### Tempistica dell'animazione
  
  func CACurrentMediaTime -> CFTimeInterval
  
  Restituisce il tempo assoluto corrente, in secondi.
  
  class CAMediaTimingFunction
  
  Una funzione che definisce il ritmo di un'animazione come una curva di temporizzazione.
  
  protocol CAMediaTiming
  
  Metodi che modellano un sistema di temporizzazione gerarchico, consentendo agli oggetti di mappare il tempo tra l'ora principale e l'ora locale.
  
  class CADisplayLink
  
  Un oggetto timer che consente all'applicazione di sincronizzare il proprio disegno con la frequenza di aggiornamento del display.
  
  ### Sistemi di particelle
  
  class CAEmitterLayer
  
  Un livello che emette, anima e rende un sistema di particelle.
  
  class CAEmitterCell
  
  La definizione di una particella emessa da un CAEmitterLayer.
  
  ### Opzioni avanzate dei livelli
  
  class CAScrollLayer
  
  Un livello che visualizza contenuti scorrevoli più grandi dei propri limiti.
  
  class CATiledLayer
  
  Un livello che fornisce un modo per fornire in modo asincrono porzioni del contenuto del livello, potenzialmente memorizzato nella cache a più livelli di dettaglio.
  
  class CATransformLayer
  
  Oggetti utilizzati per creare vere gerarchie di livelli 3D, piuttosto che il modello di rendering della gerarchia appiattito utilizzato da altre classi CALayer.
  
  class CAReplicatorLayer
  
  Un livello che crea un numero specificato di copie del sottolivello con trasformazioni geometriche, temporali e di colore variabili.
  
  ### Metal e OpenGL
  
  class CAMetalLayer
  
  Un livello di animazione principale in cui Metal può eseguire il rendering, in genere da visualizzare sullo schermo.
  
  protocol CAMetalDrawable
  
  Un oggetto MetalDrawable associato a un livello Core Animation.
  
  class CAEDRMetadata
  
  Metadati che descrivono come i valori della gamma dinamica estesa (EDR) devono essere mappati sui toni.
  
  class CARenderer
  
  Un livello che consente a un'applicazione di eseguire il rendering di un albero dei livelli in un contesto OpenGL principale.
  
  ### Visualizzazione remota del contenuto dei livelli
  
  class CARemoteLayerClient
  
  class CARemoteLayerServer
  
  ### Trasforma
  
  Transforms
  
  Definisce le matrici di trasformazione per applicare trasformazioni affini ai livelli in Core Animation.
  
  