Freigeben über


CoreAnimation Namespace

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

Klassen

CAAction

Eine Schnittstelle, die von Objekten implementiert wird, die an Animationen teilnehmen, die von einem CALayer koordiniert werden.

CAAnimation

Basisklasse für Animationen.

CAAnimationDelegate

Delegatklasse für die CAAnimation-Klasse.

CAAnimationDelegate_Extensions

Erweiterungsmethoden für die CAAnimationDelegate -Klasse.

CAAnimationGroup

Gruppen und orchestriert mehrere Animationen.

CAAnimationStateEventArgs

Stellt Daten für das E:CoreAnimation.CAAnimationStateEventArgs.AnimationStopped-Ereignis bereit.

CABasicAnimation

Einzelne Keyframe-basierte Animationen.

CAConstraint

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAConstraintLayoutManager

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAContentsFormatExtensions

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CADisplayLink

Synchronisierungsobjekt zwischen Ihren Animationen und der Anzeigeaktualisierung.

CAEAGLLayer

Ebene, die zum Rendern von OpenGL-Inhalten verwendet wird.

CAEmitterBehavior

Definiert das Verhalten eines Partikelsystememittenters.

CAEmitterCell

Eine Quelle von Partikeln, die von einer CAEmitterLayer Instanz ausgegeben werden.

CAEmitterLayer

Ein Partikelsystem-Emitter. Partikeltypen werden durch CAEmitterCelldefiniert.

CAFillMode

Konstanten, die für die FillMode-Eigenschaft in CAAnimation und CALayer verwendet werden, um das Verhalten von Objekten nach Abschluss der Animation zu steuern.

CAGradientLayer

Ebene, die einen Farbverlauf über dem Hintergrund rendert.

CAGradientLayerTypeExtensions

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAKeyFrameAnimation

Unterstützung von Keyframe-basierten Animationen.

CALayer

Ebenen enthalten die Bilder, die auf dem Bildschirm gerendert werden.

CALayerDelegate

Delegatklasse für den CALayer.

CALayerDelegate_Extensions

Erweiterungsmethoden für die ICALayerDelegate Schnittstelle, um alle Methoden aus dem CALayerDelegate Protokoll zu unterstützen.

CAMediaTiming

Bietet ein hierarchisches Zeitsteuerungssystem mit Unterstützung für Wiederholung und Sequenzierung.

CAMediaTimingFunction

Definiert die Geschwindigkeit einer Animation.

CAMetalLayer

Eine CALayer , die mit Metal-Funktionen gerendert wird.

CAOpenGLLayer

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAPropertyAnimation

Eine Animation, die Objekteigenschaften animieren kann.

CARenderer

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CARendererOptions

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAReplicatorLayer

Eine Ebene, die eine vorhandene Ebene repliziert, wobei einige Attribute (Farbe, Transformation) geändert wurden.

CAScrollExtensions

Erweiterungsmethoden für CAScroll.

CAScrollLayer

Ebene, die verwendet wird, um Teile einer anderen Ebene anzuzeigen.

CAShapeLayer

Zeichnet eine Zierkurve und setzt das Ergebnis mit der ersten Unterschicht zusammen.

CASpringAnimation

Eine Federanimation mit Steifigkeit, Masse und Dämpfung.

CATextLayer

Einfache Text layour und Rendering von regulärem oder attributiertem Text.

CATextLayerAlignmentModeExtensions

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CATextLayerTruncationModeExtensions

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CATiledLayer

Ebene, deren Inhalt asynchron und mit mehreren Detailebenen bereitgestellt werden kann.

CATransaction

Framework zum Synchronisieren mehrerer Transformationsvorgänge.

CATransformLayer

3D-Kompositingebene.

CATransition

Übergangsanimationen für eine Ebene.

CAValueFunction

Klasse, die während einer Animation zum Anwenden von Funktionen auf Eigenschaftswerte verwendet wird.

Strukturen

CATransform3D

3D-Transformation.

Schnittstellen

ICAAction

Schnittstelle, die die erforderlichen Methoden (falls vorhanden) des Protokolls CAActiondarstellt.

ICAAnimationDelegate

Delegat für die Reaktion auf Ereignisse des Animationslebenszyklus.

ICALayerDelegate

Schnittstelle, die die erforderlichen Methoden (falls vorhanden) des Protokolls CALayerDelegatedarstellt.

ICAMediaTiming

Schnittstelle, die die erforderlichen Methoden (falls vorhanden) des Protokolls CAMediaTimingdarstellt.

ICAMetalDrawable

Schnittstelle, die ein Protokoll für einen Anzeigepuffer auf der Metallschicht definiert.

Enumerationen

CAAutoresizingMask

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAConstraintAttribute

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAContentsFormat

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CACornerMask

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAEdgeAntialiasingMask

Flags, die verwendet werden, um zu bestimmen, welche Seite einer Ebene antialiasiert werden soll.

CAGradientLayerType

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CAScroll

Listet scrollende Richtungen auf.

CATextLayerAlignmentMode

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

CATextLayerTruncationMode

Der CoreAnimation-Namespace bietet Zugriff auf das zugrunde liegende Animationsframework, das UIKit unterstützt.

Hinweise

CoreAnimation ist der Kern der iPhone-Benutzeroberfläche. Die APIs in diesem Namespace ermöglichen Ihnen den Zugriff auf das zugrunde liegende Animationsframework, das das UIKit antreibt.

Die UIKit-Steuerelemente werden zusätzlich zu CoreAnimation implementiert, die direkt mit OpenGL und CoreGraphics zusammenarbeiten, um hardwarebeschleunigtes Rendering bereitzustellen.

Jede UIView wird durch eine CALayer unterstützt, auf die über die Layer -Eigenschaft zugegriffen wird. Wenn Sie zeichnen, indem Sie die M:UIKit.UIView.Draw(System.Drawing.RectangleF)- Methode überschreiben, zeichnen Sie in die CoreAnimation-Ebene.

Genau wie UIViews andere UIViews enthalten können, können CALayer andere CALayer-Instanzen enthalten. Sie können untergeordnete Ebenen in eine Ebene einfügen, indem AddSublayer(CALayer)Sie M:CoreAnimation.CALayer.InsertSublayer(CoreAnimation.CALayer,int)aufrufen, InsertSublayerBelow(CALayer, CALayer), InsertSublayerAbove(CALayer, CALayer) oder entfernen Sie die Ebene mithilfe von M:CoreAnimation.CALayer.RemoveFromSuperLayer(). Darüber hinaus gibt es verschiedene Arten von CALayern, die vom Betriebssystem bereitgestellt werden, und Sie können Ihre eigenen erstellen, indem Sie eine der vom System bereitgestellten Ebenen unterklassieren: CALayer, , CATiledLayerCATextLayer, CAScrollLayer, , CAReplicatorLayer, , CAShapeLayer, , CAGradientLayerCATransformLayerund CAEAGLLayerCAEmitterLayer.

Ebenen behalten den Inhalt bei, den Sie in sie zeichnen. Im Gegensatz zu anderen Toolkits ist es nicht erforderlich, eine Neupaint-Methode zu implementieren, um auf ereignisse zu reagieren, die in der Region verfügbar gemacht werden. Wenn Sie den Inhalt der Ebene aktualisieren möchten, sollten Sie die M:CoreAnimation.CALayer.SetNeedsDisplay()- Methode aufrufen, die einen Aufruf der DrawInContext(CGContext) Methode auslöst, die Sie überschreiben können.

Sie können das Ebenenrendering anpassen, indem Sie die Delegate Eigenschaft Ihrer Ebene so festlegen, dass sie auf eine Instanz einer CALayerDelegate Unterklasse verweist.

Sie können 3D-Transformationen auf Ihre Ebenen anwenden, indem Sie die Transform -Eigenschaft festlegen, und Sie können auch die 3D-Transformation steuern, die auf Unterebenen angewendet wird, indem Sie die SublayerTransform -Eigenschaft festlegen. Wenn Sie die SublayerTransform verwenden, können Sie die ZPosition -Eigenschaft auch verwenden, um ihr eine Z-Achsenposition zu geben. Dies ist hilfreich, um perspektivische Renderings durchzuführen.

Ebenen stellen die hardwarebeschleunigten Komponenten bereit, die für CoreAnimation erforderlich sind, um ihre Aufgaben effizient zu erledigen. Zusätzlich zu dieser Funktionalität stellt CoreAnimation eine Reihe von APIs zum Animieren von Ebenen bereit.

Vor iOS 4 wurden Animationen als Transaktionen angegeben: Anwendungsentwickler klammern die Spezifikation ihrer Animationen zwischen Aufrufen von M:UIKit.UIView.BeginAnimations* und UIKit.UIView.CommitAnimations*. Das Reagieren auf Animationsereignisse (z. B. Fortsetzung nach Abschluss der Animation) erfordert die Verwendung eines Delegatobjekts und benutzerdefinierter Selektoren. Dieses Verfahren ist weiterhin verfügbar, aber Apple empfiehlt die Verwendung von "blockbasierten" Animationen in modernen Apps. In der C#-Terminologie werden diese animationen als "delegate-based" bezeichnet, wobei der Delegat (oder die anonyme Funktion) vom Typ T:Foundation.NSAction ist. Darüber hinaus bietet Xamarin.iOS asynchrone Wrapper für die häufig verwendeten Animationsfunktionen, sodass Anwendungsentwickler die Funktionen von async-await C# 5+ verwenden können.

Das folgende Beispiel zeigt die verschiedenen Techniken:

//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");
}

Blockbasiert

//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");
}

Asynchron

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

Diese UIKit-basierten Techniken sollten die meisten Animationsanwendungsfälle erfüllen (sprite Kit bietet auch Animationen und Physikmodellierung, die für Anwendungsfälle mit hoher Framerate wie Spiele geeignet sind). Zusätzlich zu diesen UIKit-basierten Techniken haben Anwendungsentwickler, die ihre eigenen CALayers erstellen, jedoch Zugriff auf Animationstechniken auf niedrigerer Ebene: Implizite Animationen und explizite Animationen.

N.B.: Ebenenanimationen sind in UIViews mit Ausnahme von UIView Animationsblöcken deaktiviert. (Siehe Diskussion unten.)

Implizite Animationen finden statt, wenn App-Entwickler eine oder mehrere Eigenschaften in einer Ebene ändern, und CoreAnimation wendet diese Änderungen schrittweise an, indem die Werte vom aktuellen Wert über einen vordefinierten Zeitraum in den neuen Wert interpoliert werden (sofern nicht konfiguriert, dauert die Ausführung der Animationen 0,25 Sekunden).

//
// 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;
}

Anwendungsentwickler, die mehr Kontrolle wünschen, können explizite Animation verwenden. Dazu erstellen sie eine Instanz einer der Animationsklassen CAPropertyAnimation, CATransition, CAAnimationGroupCABasicAnimation oder CAKeyFrameAnimation. Die Animation wird durch Aufrufen der AddAnimation(CAAnimation, String) -Methode an eine Ebene angefügt.

Im Gegensatz zu impliziten Animationen, die als Reaktion auf Änderungen in den Eigenschaften der Ebene erfolgen, ändern explizite Animationen die Eigenschaften Ihrer Objekte nicht. Stattdessen ändern sie die Eigenschaften einer Kopie Des Szenendiagramms, das PresentationLayerin gespeichert ist. Dies bedeutet, dass alle Änderungen, die Sie im Rahmen einer expliziten Animation an den Objekten vornehmen, nicht dauerhaft sind. Sobald die Animation abgeschlossen ist, werden die Objekte mit den Werten gerendert, die sich noch im Modell befinden.

//
// 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");

Ebenenbasierte Animationen werden von UIViews deaktiviert, außer innerhalb von UIView Animationsblöcken. Ebenenbasierte Animationen in solchen Blöcken ignorieren die Dauer der Blöcke und arbeiten mit ihrer eigenen angegebenen Dauer, entweder dem impliziten Standardwert von 0,25 Sekunden oder einer expliziten Länge. Dies wird im folgenden Beispiel gezeigt, in dem die Dauer des UIView Animationsblocks 1,0 ist, aber tatsächlich die ebenenbasierte implizite Deckkraftanimation in 0,25 Sekunden endet und die Neupositionierung 10 Sekunden lang ausgeführt wird.

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");
});