CoreAnimation 名前空間
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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) をサブクラス化して独自のレイヤーCALayerをCAEmitterLayer作成できます。
レイヤーは、描画したコンテンツを保持します。他のツールキットとは異なり、リージョンで公開されているイベントに応答するために 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");
});