UIView にいくつかのレイヤーを追加して、一種のアニメーションを作成しました。これらのレイヤーは、スクリプトによって表示または非表示に設定されます。
スクリプトは、プロトコルを実装するオブジェクトに基づいています。
// the general protocol for a step
@protocol ActionStep
-(void) applyForTime:(int)playtime;
-(void) reset;
@end
タイマーで、ステップ オブジェクトを反復処理します。
NSEnumerator* enumerator = [ScriptObjects objectEnumerator];
id obj;
while ( obj = [enumerator nextObject] )
{
id <ActionStep> step = obj;
[step applyForTime:currentmilliseconds];
}
1 つのスクリプト オブジェクトは次のオブジェクトです。
@interface LayerStep : NSObject <ActionStep>
{
int mTimeOffset;
CGPoint mOffset;
float mAlpha;
LayerObject* mTheLayer;
bool mPrepared;
}
-(id)initWithLayerObject: (LayerObject*) theLayer Milliseconds:(int) milliseconds Offset:(CGPoint) offset Alpha:(float)alpha;
@end
最後に、レイヤーにプロトコルを実装します。
-(void) applyForTime:(int)playtime
{
if ( mPrepared ) // has the step already been executed?
{
if ( playtime >= mTimeOffset )
{
[mTheLayer setAlpha:mAlpha]; // AssignedLayer.opacity = alpha;
[mTheLayer setPosition:mOffset]; // AssignedLayer.position = offset;
mPrepared = false;
}
}
}
ステップで変更を適用すると、トランジションが発生します。
この移行を無効にする方法はありますか? 現在、CoreAnimation 呼び出しはまったく使用しておらず、プロパティ自体のみを使用しています (コードを参照)。