CoreAnimation 名前空間

CoreAnimation 名前空間は、UIKit を機能させる基になるアニメーション フレームワークへのアクセスを提供します。

クラス

CAAction

CALayer によって調整されたアニメーションに参加するオブジェクトによって実装されるインターフェイス。

CAAnimation

アニメーションの基本クラス。

CAAnimationDelegate

CAAnimation クラスのデリゲート クラス。

CAAnimationDelegate_Extensions

クラスへの CAAnimationDelegate 拡張メソッド。

CAAnimationGroup

複数のアニメーションをグループにして調整します。

CAAnimationStateEventArgs

E:CoreAnimation.CAAnimationStateEventArgs.AnimationStopped イベントのデータ を提供します。

CABasicAnimation

1 つのキーフレーム ベースのアニメーション。

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

プロトコルからCALayerDelegateのすべてのメソッドをICALayerDelegateサポートする インターフェイスへの拡張メソッド。

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 の上に実装され、OpenGL および CoreGraphics と直接インターフェイスしてハードウェア アクセラレータ レンダリングを提供します。

UIView は、 プロパティを介してLayerアクセスされる によってCALayerサポートされます。 M:UIKit.UIView.Draw(System.Drawing.RectangleF) メソッドをオーバーライドして描画すると、CoreAnimation レイヤーに描画されます。

UIView に他の UIView を含めることができるのと同様に、CALayers には他の CALayer インスタンスを含めることができます。 子レイヤーをレイヤーAddSublayer(CALayer)に挿入するには、M:CoreAnimation.CALayer.InsertSublayer(CoreAnimation.CALayer,int)、InsertSublayerBelow(CALayer, CALayer)InsertSublayerAbove(CALayer, CALayer)または ) を使用してレイヤーを削除します。 さらに、オペレーティング システムによって提供される CALayer にはさまざまな種類があり、システムによって提供されるレイヤーの 1 つ (、 CATextLayerCATiledLayerCAGradientLayerCAEAGLLayerCAScrollLayerCAReplicatorLayerCAShapeLayerCATransformLayer) をサブクラス化して独自のレイヤーCALayerCAEmitterLayer作成できます。

レイヤーは、描画したコンテンツを保持します。他のツールキットとは異なり、リージョンで公開されているイベントに応答するために repaint メソッドを実装する必要はありません。 レイヤーの内容を更新する場合は、オーバーライドできるメソッドの呼び出しをトリガーする M:CoreAnimation.CALayer.CALayer.SetNeedsDisplay() メソッドを DrawInContext(CGContext) 呼び出す必要があります。

レイヤーのレンダリングをカスタマイズするには、 Delegate サブクラスのインスタンスを指すレイヤーの プロパティを CALayerDelegate 設定します。

プロパティを設定してレイヤーに 3D 変換を適用できます。また、 プロパティを設定 Transform してサブレイヤーに適用される 3D 変換を SublayerTransform 制御することもできます。 SublayerTransform を使用する場合は、 プロパティを ZPosition 使用して Z 軸の位置を指定することもできます。 これは、パースペクティブ レンダリングを行う場合に役立ちます。

レイヤーは、CoreAnimation がそのジョブを効率的に実行するために必要なハードウェア アクセラレータ コンポーネントを提供します。 この機能の上に、CoreAnimation には、レイヤーをアニメーション化するための一連の API が用意されています。

iOS 4 より前のバージョンでは、アニメーションはトランザクションとして指定されていました。アプリケーション開発者は、* と M:UIKit.UIView.CommitAnimations* の呼び出しの間でアニメーションの指定を角かっこで囲みます。 アニメーション イベント (アニメーションの完了後の継続など) に対応するには、デリゲート オブジェクトとカスタム セレクターを使用する必要があります。 この手法は引き続き使用できますが、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.: アニメーション ブロックを除き、レイヤー アニメーションは s でUIViewUIView無効になります。 (以下のディスカッションを参照してください。

暗黙的なアニメーションは、アプリ開発者がレイヤー内の 1 つ以上のプロパティを変更したときに行われ、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;
}

より多くの制御を必要とするアプリケーション開発者は、明示的なアニメーションを使用できます。 これを行うには、アニメーション クラス CAPropertyAnimationCABasicAnimationCATransitionCAAnimationGroup、または のいずれかのインスタンスを作成します。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");
});