Core Animation
# 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.

