Apple Developer Connection
Member Login Log In | Not a Member? Contact ADC

< 前ページ次ページ > 目次を隠す

トランザクション

レイヤへの変更はすべて、トランザクションの一部として行われます。CATransactionは、複数のレイヤツリーへの変更を描画ツリーへのアトミックな更新として一括処理する役割を果たすCore Animationクラスです。

この章では、Core Animationがサポートする2つのタイプのトランザクション、すなわち、暗黙的なトランザクションと明示的なトランザクションについて説明します。

目次:

暗黙的なトランザクション
明示的なトランザクション


暗黙的なトランザクション

暗黙的なトランザクションは、レイヤツリーがアクティブなトランザクションなしでスレッドによって変更されると自動的に作成され、スレッドの実行ループの次の反復時に自動的にコミットされます。

リスト 1の例では、結果のアニメーションが同時に実行されるようにする暗黙的なトランザクションを使用して、レイヤのopacityプロパティ、zPositionプロパティ、およびpositionプロパティを変更しています。

リスト 1  暗黙的なトランザクションを使ったアニメーション

theLayer.opacity=0.0;
theLayer.zPosition=-200;
thelayer.position=CGPointMake(0.0,0.0);

重要: 実行ループのないスレッドからレイヤプロパティを変更する場合は、明示的なトランザクションを使う必要があります。

明示的なトランザクション

レイヤツリーの変更前にCATransactionクラスに class a beginメッセージを送り、その後commitメッセージを送ることにより、明示的なトランザクションを作成します。明示的なトランザクションは、一度に多数のレイヤのプロパティを設定する場合(たとえば複数レイヤのレイアウト時など)、レイヤアクションを一時的に無効にする場合、あるいは結果として生じた暗黙的なアニメーションの再生時間を一時的に変更する場合などに特に役立ちます。

レイヤアクションを一時的に無効にする

トランザクションのkCATransactionDisableActionsの値をtrueに設定することによって、レイヤのプロパティ値の変更時にレイヤのアクションを一時的に無効にすることができます。そのトランザクションの範囲内でどのような変更が行われても、アニメーションは生じません。リスト 2に、可視のレイヤツリーからaLayerを削除したときに発生するフェードアニメーションを無効にする例を示します。

リスト 2  レイヤのアクションを一時的に無効にする

 
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
[aLayer removeFromSuperlayer];
[CATransaction commit];

暗黙的なアニメーションの再生時間のオーバーライド

トランザクションのkCATransactionAnimationDurationキーの値に異なる再生時間を設定することによって、レイヤプロパティの変更を受けて実行するアニメーションの再生時間を一時的に変更できます。そのトランザクションの範囲内で生じるすべてのアニメーションは、自身の時間ではなくその再生時間を使用します。リスト 3に、アニメーションをzPositionおよびopacityアニメーションによって指定された再生時間よりも10秒長く再生させる例を示します。

リスト 3  アニメーションの再生時間のオーバーライド

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:10.0f]
                 forKey:kCATransactionAnimationDuration];
theLayer.zPosition=200.0;
theLayer.opacity=0.0;
[CATransaction commit];

上記の例は、明示的なトランザクションであるbegincommitによって囲まれた再生時間を示していますが、これらを省略して暗黙的なトランザクションを代わりに使うことも考えられます。

トランザクションのネスト

明示的なトランザクションをネストし、アニメーションの一部に対してアクションを無効にすることや、変更されたプロパティの暗黙的なアニメーションに対して異なる再生時間を使用することなどができます。最も外側のトランザクションがコミットされた場合のみ、アニメーションが発生します。

リスト 4に、2つのトランザクションのネストの例を示します。外側のトランザクションは、暗黙的なアニメーションの再生時間を2秒に設定し、レイヤのpositionプロパティを設定します。内側のトランザクションは、暗黙的なアニメーションの再生時間を5秒に設定し、レイヤのopacityzPositionを設定します。

リスト 4  明示的なトランザクションのネスト

[CATransaction begin];

// アニメーションの再生時間を5秒に変更する
[CATransaction setValue:[NSNumber numberWithFloat:2.0f]
                forKey:kCATransactionAnimationDuration];

// レイヤを新しい位置に移動する
theLayer.position = CGPointMake(0.0,0.0);

// ネストしたトランザクションを使って
// zPositionとopacityのアニメーションの
// 再生時間を変更する

[CATransaction begin];

[CATransaction setValue:[NSNumber numberWithFloat:5.0f]
                 forKey:kCATransactionAnimationDuration];

theLayer.zPosition=200.0;
theLayer.opacity=0.0;

[CATransaction commit];

[CATransaction commit];


< 前ページ次ページ > 目次を隠す


Last updated: 2007-12-06




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
Get information on Apple products.
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Copyright © 2007 Apple Inc.
All rights reserved. | Terms of use | Privacy Notice