CoreAnimation 命名空间

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAAction

由参与由 CALayer 协调的动画的对象实现的接口。

CAAnimation

动画的基类。

CAAnimationDelegate

CAAnimation 类的委托类。

CAAnimationDelegate_Extensions

类的 CAAnimationDelegate 扩展方法。

CAAnimationGroup

对多个动画进行分组和协调。

CAAnimationStateEventArgs

提供 E:CoreAnimation.CAAnimationStateEventArgs.AnimationStopped 事件的数据。

CABasicAnimation

基于单个关键帧的动画。

CAConstraint

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAConstraintLayoutManager

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAContentsFormatExtensions

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CADisplayLink

动画与显示刷新之间的同步对象。

CAEAGLLayer

用于呈现 OpenGL 内容的层。

CAEmitterBehavior

定义粒子系统发射器的行为。

CAEmitterCell

由 实例发出的 CAEmitterLayer 粒子的源。

CAEmitterLayer

粒子系统发射器。 粒子类型由 CAEmitterCell定义。

CAFillMode

用于 CAAnimation 和 CALayer 中的 FillMode 属性的常量,用于在动画完成后控制对象的行为。

CAGradientLayer

在其背景上呈现渐变的层。

CAGradientLayerTypeExtensions

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAKeyFrameAnimation

基于关键帧的动画支持。

CALayer

层保存呈现到屏幕中的图像。

CALayerDelegate

CALayer 的委托类。

CALayerDelegate_Extensions

接口的 ICALayerDelegate 扩展方法,以支持协议中的所有方法 CALayerDelegate

CAMediaTiming

提供分层计时系统,支持重复和排序。

CAMediaTimingFunction

定义动画的节奏。

CAMetalLayer

CALayer使用 Metal 函数呈现的 。

CAOpenGLLayer

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAPropertyAnimation

可对对象属性进行动画处理的动画。

CARenderer

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CARendererOptions

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAReplicatorLayer

复制现有层的层,其中某些属性 (颜色、转换) 更改。

CAScrollExtensions

CAScroll 的扩展方法。

CAScrollLayer

用于显示另一层部分的层。

CAShapeLayer

绘制贝塞尔曲线,并使用其第一个子层组成结果。

CASpringAnimation

具有刚度、质量和阻尼的弹簧动画。

CATextLayer

简单文本布局和常规文本或属性化文本的呈现。

CATextLayerAlignmentModeExtensions

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CATextLayerTruncationModeExtensions

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CATiledLayer

其内容可以异步提供且具有多个详细级别的层。

CATransaction

用于同步多个转换操作的框架。

CATransformLayer

3D 合成层。

CATransition

层的过渡动画。

CAValueFunction

用于在动画期间将函数应用于属性值的类。

结构

CATransform3D

3D 转换。

接口

ICAAction

表示所需方法的接口 ((如果协议 CAAction有任何) )。

ICAAnimationDelegate

用于响应动画生命周期事件的委托。

ICALayerDelegate

表示所需方法的接口 ((如果协议 CALayerDelegate有任何) )。

ICAMediaTiming

表示所需方法的接口 ((如果协议 CAMediaTiming有任何) )。

ICAMetalDrawable

为金属层上的显示缓冲区定义协议的接口。

枚举

CAAutoresizingMask

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAConstraintAttribute

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAContentsFormat

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CACornerMask

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAEdgeAntialiasingMask

用于确定层的哪一侧应抗锯齿的标志。

CAGradientLayerType

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CAScroll

枚举滚动方向。

CATextLayerAlignmentMode

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

CATextLayerTruncationMode

CoreAnimation 命名空间提供对支持 UIKit 的基础动画框架的访问权限。

注解

CoreAnimation 是 iPhone UI 的核心。 通过此命名空间中的 API,可以访问支持 UIKit 的基础动画框架。

UIKit 控件在 CoreAnimation 上实现,CoreAnimation 直接与 OpenGL 和 CoreGraphics 进行交互,以提供硬件加速呈现。

每个 都 UIViewCALayer (通过 属性访问) Layer 提供支持。 通过替代 M:UIKit.UIView.Draw (System.Drawing.RectangleF) 方法进行绘制时,将绘制到 CoreAnimation 层中。

就像 UIView 可以包含其他 UIView 一样,CALayers 也可以包含其他 CALayer 实例。 可以通过调用 AddSublayer(CALayer) (CoreAnim 将子层插入层ation.CALayer,int) InsertSublayerBelow(CALayer, CALayer)InsertSublayerAbove(CALayer, CALayer) 通过使用 M:CoreAnimation.CALayer.RemoveFromSuperLayer () 删除层。 此外,操作系统还提供各种类型的 CALayers,可以通过对系统提供的层之一进行子类化来创建自己的 CALayer:CALayer、、CATiledLayerCATextLayerCAScrollLayerCAReplicatorLayerCAShapeLayerCAGradientLayer、、 CATransformLayerCAEAGLLayer 和 。CAEmitterLayer

层将保留你绘制到其中的内容,与其他工具包不同,不需要实现 repaint 方法来响应区域公开的事件。 如果要更新层的内容,应调用 M:CoreAnimation.CALayer.SetNeedsDisplay () 方法,该方法将触发对可替代的方法的调用 DrawInContext(CGContext)

可以通过将层的 属性设置为 Delegate 指向子类的 CALayerDelegate 实例来自定义层呈现。

可以通过设置 属性将 3D 转换应用于图层, Transform 还可以通过设置 属性来控制应用于子图层的 SublayerTransform 3D 转换。 如果使用 SublayerTransform,还可以使用 ZPosition 属性为其指定 Z 轴位置。 这有助于进行透视渲染。

层提供 CoreAnimation 高效完成其工作所需的硬件加速组件。 在此功能的基础上,CoreAnimation 提供了一组 API 来对层进行动画处理。

在 iOS 4 之前,动画被指定为事务:应用程序开发人员在调用 * 和 M:UIKit.UIView.CommitAnimationsM:UIKit.UIView.CommitAnimations*之间将动画规范括起来。 在动画完成) 后响应动画事件 ((如延续)需要使用委托对象和自定义选择器。 此方法仍然可用,但 Apple 建议在现代应用中使用“基于块的”动画。 在 C# 术语中,这些动画称为“基于委托的”动画,其中委托 (或匿名函数) 的类型为 T:Foundation.NSAction。 此外,Xamarin.iOS 为常用动画函数提供异步包装器,因此应用程序开发人员可以使用 C# 5+ async-await 的功能。

以下示例演示了不同的技术:

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

基于块

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

异步

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

这些基于 UIKit 的技术还应满足大多数动画用例 (,Sprite Kit 提供适用于高帧速率用例(如游戏) )的动画和物理建模。 但是,除了这些基于 UIKit 的技术外,创建自己的 CALayer的应用程序开发人员还可以访问较低级别的动画技术:隐式动画和显式动画。

N.B.:除动画块外,在 中UIViewUIView禁用层动画。 (请参阅下面的讨论。)

隐式动画在应用开发人员更改层中的一个或多个属性时发生,CoreAnimation 将通过在预先确定的时间段内插当前值中的值到新值来逐渐应用这些更改 (除非配置,否则动画执行) 需要 0.25 秒。

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

需要更多控制权的应用程序开发人员可以使用显式动画。 为此,他们创建一个动画类 CAPropertyAnimationCATransitionCAAnimationGroupCABasicAnimationCAKeyFrameAnimation的实例。 通过调用 AddAnimation(CAAnimation, String) 方法将动画附加到层。

与响应层属性更改时发生的隐式动画不同,显式动画不会更改对象的属性。 相反,它们更改存储在 中的 PresentationLayer场景图副本的属性。 这意味着,作为显式动画的一部分对对象所做的任何更改都不是永久性的。 动画完成后,将使用仍在模型中的值呈现对象。

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

基于层的动画由 UIView禁用,动画块中 UIView 除外。 此类块中基于层的动画会忽略块的持续时间,并在其自己的指定持续时间(隐式默认值为 0.25 秒或显式长度)下运行。 以下示例中显示了这一点,其中 UIView 动画块的持续时间为 1.0,但实际上,基于层的隐式不透明度动画在 0.25 秒内结束,重新定位运行 10 秒。

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