Condividi tramite


CoreAnimation Spazio dei nomi

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

Classi

CAAction

Interfaccia implementata dagli oggetti che partecipano alle animazioni coordinate da un CALayer.

CAAnimation

Classe di base per le animazioni.

CAAnimationDelegate

Classe Delegate per la classe CAAnimation.

CAAnimationDelegate_Extensions

Metodi di estensione alla CAAnimationDelegate classe.

CAAnimationGroup

Gruppi e orchestra più animazioni.

CAAnimationStateEventArgs

Fornisce dati per l'evento E:CoreAnimation.CAAnimationStateEventArgs.AnimationStopped.

CABasicAnimation

Animazioni basate su fotogrammi chiave singolo.

CAConstraint

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAConstraintLayoutManager

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAContentsFormatExtensions

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CADisplayLink

Oggetto di sincronizzazione tra le animazioni e l'aggiornamento dello schermo.

CAEAGLLayer

Livello usato per eseguire il rendering del contenuto OpenGL.

CAEmitterBehavior

Definisce il comportamento di un sistema di particelle generato.

CAEmitterCell

Origine di particelle generate da un'istanza CAEmitterLayer .

CAEmitterLayer

Emettitore di particelle. I tipi di particelle sono definiti da CAEmitterCell.

CAFillMode

Costanti usate per la proprietà FillMode in CAAnimation e CALayer, usate per controllare il comportamento degli oggetti dopo il completamento dell'animazione.

CAGradientLayer

Livello che esegue il rendering di una sfumatura sullo sfondo.

CAGradientLayerTypeExtensions

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAKeyFrameAnimation

Supporto dell'animazione basata su fotogrammi chiave.

CALayer

I livelli contengono le immagini di cui viene eseguito il rendering nello schermo.

CALayerDelegate

Delegare la classe per CALayer.

CALayerDelegate_Extensions

Metodi di estensione all'interfaccia ICALayerDelegate per supportare tutti i metodi dal CALayerDelegate protocollo.

CAMediaTiming

Fornisce un sistema di temporizzazione gerarchico, con supporto per la ripetizione e la sequenza.

CAMediaTimingFunction

Definisce la pacing di un'animazione.

CAMetalLayer

Oggetto CALayer di cui viene eseguito il rendering usando le funzioni Metal.

CAOpenGLLayer

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAPropertyAnimation

Animazione che può animare le proprietà dell'oggetto.

CARenderer

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CARendererOptions

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAReplicatorLayer

Livello che replica un livello esistente, con alcuni attributi (colore, trasformazione) modificati.

CAScrollExtensions

Metodi di estensione per CAScroll.

CAScrollLayer

Livello usato per visualizzare parti di un altro livello.

CAShapeLayer

Disegna una curva di bezier e compone il risultato con il primo sottostrato.

CASpringAnimation

Animazione di primavera con rigidità, massa e umidità.

CATextLayer

Testo semplice layour e rendering di testo regolare o attribuito.

CATextLayerAlignmentModeExtensions

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CATextLayerTruncationModeExtensions

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CATiledLayer

Livello il cui contenuto può essere fornito in modo asincrono e con più livelli di dettaglio.

CATransaction

Framework per sincronizzare più operazioni di trasformazione.

CATransformLayer

Livello di composizione 3D.

CATransition

Animazioni di transizione per un livello.

CAValueFunction

Classe usata per applicare funzioni ai valori delle proprietà durante un'animazione.

Struct

CATransform3D

Trasformazione 3D.

Interfacce

ICAAction

Interfaccia che rappresenta i metodi necessari (se presenti) del protocollo CAAction.

ICAAnimationDelegate

Delegato per rispondere agli eventi del ciclo di vita dell'animazione.

ICALayerDelegate

Interfaccia che rappresenta i metodi necessari (se presenti) del protocollo CALayerDelegate.

ICAMediaTiming

Interfaccia che rappresenta i metodi necessari (se presenti) del protocollo CAMediaTiming.

ICAMetalDrawable

Interfaccia che definisce un protocollo per un buffer di visualizzazione a livello metal.

Enumerazioni

CAAutoresizingMask

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAConstraintAttribute

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAContentsFormat

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CACornerMask

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAEdgeAntialiasingMask

Flag usati per determinare il lato di un livello deve essere antialiased.

CAGradientLayerType

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CAScroll

Enumera le direzioni di scorrimento.

CATextLayerAlignmentMode

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

CATextLayerTruncationMode

Lo spazio dei nomi CoreAnimation fornisce l'accesso al framework di animazione sottostante che abilita UIKit.

Commenti

CoreAnimation è al centro dell'interfaccia utente di iPhone. Le API in questo spazio dei nomi consentono di accedere al framework di animazione sottostante che abilita l'uiKit.

I controlli UIKit vengono implementati all'inizio di CoreAnimation che si interfaccia direttamente con OpenGL e CoreGraphics per fornire il rendering accelerato dell'hardware.

Ogni UIView oggetto è supportato da un CALayer oggetto a cui viene eseguito l'accesso tramite la Layer proprietà . Quando si disegna eseguendo l'override del metodo ), si sta disegnando nel livello CoreAnimation.

Proprio come uiView può contenere altre interfacce UIView, CALayers può contenere altre istanze CALayer. È possibile inserire i livelli figlio in un livello chiamando AddSublayer(CALayer), ), InsertSublayerBelow(CALayer, CALayer)InsertSublayerAbove(CALayer, CALayer) oppure rimuovere il livello usando M:)M:CoreAnimation.CALayer.RemoveFromSuperLayer(). Sono inoltre disponibili vari tipi di CALayer forniti dal sistema operativo e è possibile creare i propri tipi di sottoclasse eseguendo una sottoclasse di uno dei livelli forniti dal sistema: CALayerCATextLayerCAReplicatorLayerCAScrollLayerCATiledLayerCAGradientLayerCATransformLayerCAShapeLayerCAEAGLLayer , e .CAEmitterLayer

I livelli manterranno il contenuto che si disegna in essi, a differenza di altri toolkit non è necessario implementare un metodo di copia per rispondere agli eventi esposti dall'area. Se si vuole aggiornare il contenuto del livello, è necessario chiamare il metodo ) che attiverà una chiamata al metodo che è possibile eseguire l'override DrawInContext(CGContext) .

È possibile personalizzare il rendering del livello impostando la Delegate proprietà del livello per puntare a un'istanza di una CALayerDelegate sottoclasse.

È possibile applicare trasformazioni 3D ai livelli impostando la proprietà ed è anche possibile controllare la Transform trasformazione 3D applicata ai sottostrati impostando la SublayerTransform proprietà. Se si usa SublayerTransform, è anche possibile usare la ZPosition proprietà per assegnargli una posizione dell'asse Z. Questo è utile per eseguire i rendering di prospettiva.

I livelli forniscono i componenti accelerati hardware necessari per CoreAnimation per eseguire il proprio lavoro in modo efficiente. Oltre a questa funzionalità, CoreAnimation fornisce un set di API per animare i livelli.

Prima di iOS 4, le animazioni sono state specificate come transazioni: gli sviluppatori di applicazioni parentesirebbero la specifica delle relative animazioni tra chiamate a UIKit.UIView.BeginAnimations* e M:UIKit.UIView.CommitAnimations*M:UIKit.UIKit.UIView.CommitAnimations. La reazione agli eventi di animazione , ad esempio la continuazione al termine dell'animazione, richiede l'uso di un oggetto delegato e di selettori personalizzati. Questa tecnica è ancora disponibile, ma Apple consiglia l'uso di animazioni basate su blocchi nelle app moderne. Nella terminologia C# queste verranno denominate animazioni basate su delegato, in cui il delegato (o la funzione anonima) è di tipo . Inoltre, Xamarin.iOS offre wrapper asincroni per le funzioni di animazione comunemente usate, in modo che gli sviluppatori di applicazioni possano usare le strutture C# 5+.async-await

L'esempio seguente illustra le diverse tecniche:

//Transaction-based (recommended only for iOS < 4)
UIView.BeginAnimations("transactional");
UIView.SetAnimationDuration(2.0);
imgView.Layer.Position = newPosition;
UIView.SetAnimationDelegate (this);
UIView.SetAnimationDidStopSelector (new Selector ("positionAnimationFinished:"));
UIView.CommitAnimations();
//...etc...
[Export("positionAnimationFinished:")]
void SlideStopped ()
{
    Console.WriteLine("Animation finished; logic continues here");
}

Basato su blocchi

//Block-based, with animations in lambda, continuation as delegate (either technique works in either position)
UIView.Animate(2.0, () => imgView.Layer.Position = newPosition, SlideStopped);
//...etc...
void SlideStopped() { 
     Console.WriteLine("Animation finished; logic continues here");
}

Asincrono

async void MyAnimateAsync {
    await UIView.AnimateAsync(2.0, () => imgView.Layer.Position = newPosition);
    Console.WriteLine("Animation finished; logic continues here");
}          

Queste tecniche basate su UIKit devono soddisfare la maggior parte dei casi d'uso dell'animazione (anche Sprite Kit fornisce sia l'animazione che la modellazione fisica appropriata per casi d'uso ad alta frequenza di fotogramma, ad esempio giochi). Tuttavia, oltre a queste tecniche basate su UIKit, gli sviluppatori di applicazioni che creano i propri CALayerutenti hanno accesso alle tecniche di animazione di livello inferiore: animazioni implicite e animazioni esplicite.

N.B.: le animazioni livello sono disabilitate in UIViews tranne nei UIView blocchi di animazione. Vedere la discussione seguente.

Le animazioni implicite si svolgono quando gli sviluppatori di app modificano una o più delle proprietà in un livello e CoreAnimation applicano gradualmente tali modifiche interpolando i valori dal valore corrente al nuovo valore in un periodo di tempo predeterminato (a meno che non siano configurate, le animazioni richiederanno 0,25 secondi per l'esecuzione).

//
// The following method sets the opacity to zero on the image's Layer
// and will trigger a 0.25 animation to vanish the image by setting the
// opacity to zero
//
void HideImage (UIImageView image)
{
    view.Layer.Opacity = 0;
}

Gli sviluppatori di applicazioni che vogliono più controllo possono usare l'animazione esplicita. A tale scopo, creano un'istanza di una delle classi CAPropertyAnimationdi animazione , , CATransition, CAAnimationGroupCABasicAnimation o CAKeyFrameAnimation. L'animazione è associata a un livello chiamando il AddAnimation(CAAnimation, String) metodo .

A differenza delle animazioni implicite che si verificano in reazione alle modifiche nelle proprietà del livello, le animazioni esplicite non modificano le proprietà degli oggetti. Modificano invece le proprietà di una copia del grafico della scena archiviato in PresentationLayer. Ciò significa che le modifiche apportate agli oggetti come parte di un'animazione esplicita non sono permanenti. Al termine dell'animazione, gli oggetti verranno visualizzati con i valori ancora presenti nel modello.

//
// Notice that we set the final position for the layer before we start
// animating from 0 to 120 since this is an explicit animation and we
// do not want to see the object "jump" back to 0, 0 at the end of
// the animation
//
layer.Position = new PointF (0, 120);
var positionAnimation = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath ("position.y");
positionAnimation.Values = new NSNumber [] { 0, 30, 60, 120 };
layer.AddAnimation (positionAnimation, "myAnimation");

Le animazioni basate su livelli sono disabilitate da UIViews tranne all'interno di UIView blocchi di animazione. Le animazioni basate su livello all'interno di tali blocchi ignorano la durata dei blocchi e operano in base alla durata specificata, ovvero l'impostazione predefinita implicita di 0,25 secondi o una lunghezza esplicita. Questo è illustrato nell'esempio seguente, in cui la durata del blocco di animazione è 1,0, ma in realtà, l'animazione UIView di opacità implicita basata su livelli termina in 0,25 secondi e la ri-posizionamento viene eseguita per 10 secondi.

UIView.AnimateAsync(1.0, () => {
	imgView.Layer.Opacity = 0.0f;

	var theAnim = CABasicAnimation.FromKeyPath("position");
	theAnim.From = NSObject.FromObject(firstPosition);
	theAnim.To =  NSObject.FromObject(secondPosition);
	theAnim.Duration = 10.0;

	imgView.Layer.AddAnimation(theAnim, "AnimateFrame");
});