CoreAnimation 命名空間
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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 、、 CATiledLayerCATextLayer 、 CAScrollLayer 、 CAShapeLayerCAGradientLayerCATransformLayerCAReplicatorLayerCAEAGLLayer 和 。 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;
}
想要更多控制項的應用程式開發人員可以使用明確動畫。 若要這樣做,他們會建立其中一個動畫類別 CAPropertyAnimation 、 CATransition 、 CAAnimationGroupCABasicAnimation 或 CAKeyFrameAnimation 的實例。 動畫會藉由呼叫 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");
});