CoreAnimation Spazio dei nomi
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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");
});