CoreAnimation Espacio de nombres
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit.
Clases
CAAction |
Interfaz implementada por objetos que participan en animaciones coordinadas por una CALayer. |
CAAnimation |
Clase base para animaciones. |
CAAnimationDelegate |
Clase delegada para la clase CAAnimation. |
CAAnimationDelegate_Extensions |
Métodos de extensión a la CAAnimationDelegate clase . |
CAAnimationGroup |
Agrupa y organiza varias animaciones. |
CAAnimationStateEventArgs |
Proporciona datos para el evento E:CoreAnimation.CAAnimationStateEventArgs.AnimationStopped. |
CABasicAnimation |
Animaciones basadas en fotogramas clave únicas. |
CAConstraint |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAConstraintLayoutManager |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAContentsFormatExtensions |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CADisplayLink |
Objeto de sincronización entre las animaciones y la actualización de pantalla. |
CAEAGLLayer |
Capa usada para representar contenido de OpenGL. |
CAEmitterBehavior |
Define el comportamiento de un emisor del sistema de partículas. |
CAEmitterCell |
Una fuente de partículas emitidas por una CAEmitterLayer instancia de . |
CAEmitterLayer |
Emisor del sistema de partículas. Los tipos de partículas se definen mediante CAEmitterCell. |
CAFillMode |
Constantes usadas para la propiedad FillMode en CAAnimation y CALayer, usadas para controlar el comportamiento de los objetos una vez completada la animación. |
CAGradientLayer |
Capa que representa un degradado sobre su fondo. |
CAGradientLayerTypeExtensions |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAKeyFrameAnimation |
Compatibilidad con animaciones basadas en fotogramas clave. |
CALayer |
Las capas contienen las imágenes que se representan en la pantalla. |
CALayerDelegate |
Clase delegada para CALayer. |
CALayerDelegate_Extensions |
Métodos de extensión a la ICALayerDelegate interfaz para admitir todos los métodos del CALayerDelegate protocolo. |
CAMediaTiming |
Proporciona un sistema de control de tiempo jerárquico, con compatibilidad con la repetición y la secuenciación. |
CAMediaTimingFunction |
Define el ritmo de una animación. |
CAMetalLayer |
que CALayer se representa mediante funciones metal. |
CAOpenGLLayer |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAPropertyAnimation |
Animación que puede animar propiedades de objeto. |
CARenderer |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CARendererOptions |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAReplicatorLayer |
Capa que replica una capa existente, con algunos atributos (color, transformación) modificados. |
CAScrollExtensions |
Métodos de extensión para CAScroll. |
CAScrollLayer |
Capa usada para mostrar partes de otra capa. |
CAShapeLayer |
Dibuja una curva bezier y compone el resultado con su primera subcapa. |
CASpringAnimation |
Animación de muelle con rigidez, masa y amortiguación. |
CATextLayer |
Texto simple y representación de texto normal o con atributos. |
CATextLayerAlignmentModeExtensions |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CATextLayerTruncationModeExtensions |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CATiledLayer |
Capa cuyo contenido se puede proporcionar de forma asincrónica y con varios niveles de detalle. |
CATransaction |
Marco para sincronizar varias operaciones de transformación. |
CATransformLayer |
Capa de composición 3D. |
CATransition |
Animaciones de transición para una capa. |
CAValueFunction |
Clase usada para aplicar funciones a valores de propiedad durante una animación. |
Estructuras
CATransform3D |
Transformación 3D. |
Interfaces
ICAAction |
Interfaz que representa los métodos necesarios (si los hay) del protocolo CAAction. |
ICAAnimationDelegate |
Delegado para responder a eventos de ciclo de vida de animación. |
ICALayerDelegate |
Interfaz que representa los métodos necesarios (si los hay) del protocolo CALayerDelegate. |
ICAMediaTiming |
Interfaz que representa los métodos necesarios (si los hay) del protocolo CAMediaTiming. |
ICAMetalDrawable |
Interfaz que define un protocolo para un búfer de visualización en la capa metálica. |
Enumeraciones
CAAutoresizingMask |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAConstraintAttribute |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAContentsFormat |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CACornerMask |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAEdgeAntialiasingMask |
Marcas usadas para determinar qué lado de una capa se debe suavizar. |
CAGradientLayerType |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CAScroll |
Enumera las direcciones de desplazamiento. |
CATextLayerAlignmentMode |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
CATextLayerTruncationMode |
El espacio de nombres CoreAnimation proporciona acceso al marco de animación subyacente que impulsa UIKit. |
Comentarios
CoreAnimation está en el núcleo de la interfaz de usuario de iPhone. Las API de este espacio de nombres proporcionan acceso al marco de animación subyacente que impulsa uiKit.
Los controles UIKit se implementan sobre CoreAnimation, que interactúa directamente con OpenGL y CoreGraphics para proporcionar una representación acelerada por hardware.
Cada UIView uno está respaldado por un CALayer objeto al que se accede a través de la Layer propiedad . Al dibujar reemplazando el método M:UIKit.UIView.Draw(System.Drawing.RectangleF), se dibuja en la capa CoreAnimation.
Al igual que uiView puede contener otras uiView, CALayers puede contener otras instancias de CALayer. Puede insertar capas secundarias en una capa llamando a AddSublayer(CALayer), M:CoreAnimation.CALayer.InsertSublayer(CoreAnimation.CALayer,int), InsertSublayerBelow(CALayer, CALayer)InsertSublayerAbove(CALayer, CALayer) o quitar la capa mediante M:CoreAnimation.CALayer.RemoveFromSuperLayer()). Además, hay varios tipos de CALayers proporcionados por el sistema operativo y puede crear el suyo propio mediante la subclase de una de las capas proporcionadas por el sistema: CALayer, , CATiledLayer, CAScrollLayerCATextLayer, , CAShapeLayerCAReplicatorLayer, CATransformLayerCAGradientLayer, CAEAGLLayer y .CAEmitterLayer
Las capas conservarán el contenido que dibuje en ellos, a diferencia de otros kits de herramientas, no es necesario implementar un método de reintentos para responder a eventos expuestos por regiones. Si desea actualizar el contenido de la capa, debe llamar al método M:CoreAnimation.CALayer.SetNeedsDisplay() que desencadenará una llamada al DrawInContext(CGContext) método que puede invalidar.
Puede personalizar la representación de capas estableciendo la Delegate propiedad de la capa para que apunte a una instancia de una CALayerDelegate subclase.
Puede aplicar transformaciones 3D a las capas estableciendo la Transform propiedad y también puede controlar la transformación 3D aplicada a las subcapas estableciendo la SublayerTransform propiedad . Si usa SublayerTransform, también puede usar la ZPosition propiedad para darle una posición del eje Z. Esto resulta útil para realizar representaciones de perspectiva.
Las capas proporcionan los componentes acelerados de hardware necesarios para que CoreAnimation realice su trabajo de forma eficaz. Además de esta funcionalidad, CoreAnimation proporciona un conjunto de API para animar capas.
Antes de iOS 4, las animaciones se especificaban como transacciones: los desarrolladores de aplicaciones entretendrían la especificación de sus animaciones entre las llamadas a M:UIKit.UIView.BeginAnimations* y M:UIKit.UIView.CommitAnimations*. Reaccionar a eventos de animación (como la continuación después de que finalice la animación) requiere el uso de un objeto delegado y selectores personalizados. Esta técnica sigue estando disponible, pero Apple recomienda el uso de animaciones "basadas en bloques" en aplicaciones modernas. En la terminología de C#, se denominarían animaciones "basadas en delegados", donde el delegado (o función anónima) es de tipo Foundation.NSAction. Además, Xamarin.iOS proporciona contenedores asincrónicos para las funciones de animación que se usan habitualmente, por lo que los desarrolladores de aplicaciones pueden usar las instalaciones de async-await
C# 5+.
En el ejemplo siguiente se muestran las distintas técnicas:
//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");
}
Basado en bloques
//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");
}
Asincrónica
async void MyAnimateAsync {
await UIView.AnimateAsync(2.0, () => imgView.Layer.Position = newPosition);
Console.WriteLine("Animation finished; logic continues here");
}
Estas técnicas basadas en UIKit deben satisfacer la mayoría de los casos de uso de animación (también, Sprite Kit proporciona animación y modelado físico adecuado para casos de uso de alta velocidad de fotogramas, como juegos). Sin embargo, además de estas técnicas basadas en UIKit, los desarrolladores de aplicaciones que crean sus propios CALayertienen acceso a técnicas de animación de nivel inferior: animaciones implícitas y animaciones explícitas.
N.B.: Las animaciones de capa están deshabilitadas en s excepto en UIViewUIView bloques de animación. (Vea la explicación a continuación).
Las animaciones implícitas tienen lugar cuando los desarrolladores de aplicaciones cambian una o varias de las propiedades de una capa y CoreAnimation aplicará esos cambios gradualmente interpolando los valores del valor actual al nuevo valor durante un período predeterminado de tiempo (a menos que se configure, las animaciones tardarán 0,25 segundos en ejecutarse).
//
// 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;
}
Los desarrolladores de aplicaciones que quieran tener más control pueden usar animación explícita. Para ello, crean una instancia de una de las clases CAPropertyAnimationde animación , CATransition, CAAnimationGroupCABasicAnimation o CAKeyFrameAnimation. La animación se adjunta a una capa mediante una llamada al AddAnimation(CAAnimation, String) método .
A diferencia de las animaciones implícitas que se producen en reacción a los cambios en las propiedades de la capa, las animaciones explícitas no modifican las propiedades de los objetos. En su lugar, modifican las propiedades de una copia del gráfico de escena almacenado en .PresentationLayer Esto significa que los cambios realizados en los objetos como parte de una animación explícita no son permanentes. Una vez finalizada la animación, los objetos se representarán con los valores que todavía están en el modelo.
//
// 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");
Las animaciones basadas en capas están deshabilitadas por UIViews, excepto dentro de los bloques de UIView animación. Las animaciones basadas en capas dentro de estos bloques omiten la duración de los bloques y funcionan con su propia duración especificada, ya sea el valor predeterminado implícito de 0,25 segundos o una longitud explícita. Esto se muestra en el ejemplo siguiente, en el que la UIView duración del bloque de animación es de 1,0, pero en realidad, la animación implícita de opacidad basada en capas termina en 0,25 segundos y la relocalización se ejecuta durante 10 segundos.
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");
});