CoreAnimation Namespace
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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");
});