ここには3つのオプションがあると思います(さらに存在する場合はコメントしてください):
オプション 1:最初のアニメーションを 2 つに分割し、前半が終了したら、アニメーションの後半と他のアニメーションを開始します。
...
bordgauche.toValue = [NSNumber numberWithFloat:749.0f / 2];
bordgauche.duration = t/2;
bordgauche.delegate = self // necessary to catch end of anim
[bordgauche setValue:@"bordgauche_1" forKey: @"animname"]; // to identify anim if more exist
...
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
if ([theAnimation valueForKey: @"animname"]==@"bordgauche_1") {
CABasicAnimation * bordgauche = [CABasicAnimation
animationWithKeyPath:@"transform.translation.x"];
bordgauche.fromValue = [NSNumber numberWithFloat:749.0f / 2];
bordgauche.toValue = [NSNumber numberWithFloat:749.0f];
bordgauche.duration = t/2;
bordgauche.repeatCount = 1;
[ImageSuivante.layer addAnimation:bordgauche forKey:@"bordgauche_2"];
// plus start your second anim
}
オプション 2: NSTimer または CADisplayLink (こちらの方が優れています) コールバックをセットアップし、アニメーション レイヤーのパラメーターを継続的にチェックします。2 番目のアニメーションをトリガーするために必要な値のパラメーターをテストします。
displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(check_ca_anim)];
[displayLink setFrameInterval:1];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
... or
animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)(1.0 / 60.0) target:self selector:@selector(check_ca_anim) userInfo:nil repeats:TRUE];
[[NSRunLoop mainRunLoop] addTimer:animationTimer forMode:NSRunLoopCommonModes];
- (void) check_ca_anim {
...
CGPoint currentPosition = [[ImageSuivante.layer presentationLayer] position];
// test it and conditionally start something
...
}
オプション 3: CADisplayLink (現在は「gameloop」として呼び出すことができます) をセットアップし、アニメーション オブジェクトの適切なパラメーターを計算して設定することにより、アニメーションを自分で管理します。どんな種類のゲームを作成したいのかわからない場合、ゲームループは他のゲーム固有の理由で役立つかもしれません. また、ここでは、ゲーム開発の優れたフレームワークである Cocos2d についても言及します。