共用方式為


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

繪製 Bezier 曲線,並使用其第一個子圖層來撰寫結果。

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 之上實作,其可直接與 OpenGL 和 CoreGraphics 介面,以提供硬體加速轉譯。

每個 UIView 都會受到 CALayer 透過 屬性存取的 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,而且您可以藉由子類別化其中一個系統提供的層來建立自己的 CALayers: CALayer 、、 CATiledLayerCATextLayerCAScrollLayerCAShapeLayerCAGradientLayerCATransformLayerCAReplicatorLayerCAEAGLLayer 和 。 CAEmitterLayer

層會保留您繪製的內容,不同于其他工具組,您不需要實作重新繪製方法來回應區域公開的事件。 如果您想要更新圖層的內容,您應該呼叫 M:CoreAnimation.CALayer.SetNeedsDisplay () 方法,以觸發您可以覆寫的方法呼叫 DrawInContext(CGContext)

您可以將圖層的 屬性設定 Delegate 為指向子類別的實例,以自訂圖層轉 CALayerDelegate 譯。

您可以藉由設定 Transform 屬性,將 3D 轉換套用至圖層,也可以藉由設定 屬性來控制套用至子圖層的 SublayerTransform 3D 轉換。 如果您使用 SublayerTransform,也可以使用 ZPosition 屬性為它提供 Z 軸位置。 這有助於執行檢視方塊轉譯。

層提供 CoreAnimation 有效率地執行其工作所需的硬體加速元件。 在這項功能之上,CoreAnimation 提供一組 API 來建立圖層的動畫效果。

在 iOS 4 之前,動畫已指定為交易:應用程式開發人員會在呼叫 * 之間,以括弧括住其動畫的規格。 回應動畫事件 (,例如動畫完成之後的接續) 需要使用委派物件和自訂選取器。 這項技術仍可供使用,但 Apple 建議在現代應用程式中使用「區塊式」動畫。 在 C# 術語中,這些稱為「委派型」動畫,其中委派 (或匿名函式) 類型。 此外,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");
});