0

forループが実行されるたびに、プレーヤーを処理する関数animateを呼び出す必要があります。

  -(void)animateDealingToPlayer:(Player *)player withDelay:(NSTimeInterval)delay
{
self.frame = CGRectMake(-100.0f, -100.0f, CardWidth, CardHeight);
self.transform = CGAffineTransformMakeRotation(M_PI);


NSArray *position = [NSArray arrayWithObjects:

                     [NSValue valueWithCGPoint:CGPointMake(100, 100)],                               
                     [NSValue valueWithCGPoint:CGPointMake(0, 0)],                                             
                     [NSValue valueWithCGPoint:CGPointMake(0, 0)],                         
                     [NSValue valueWithCGPoint:CGPointMake(200, 100)],                          
                     [NSValue valueWithCGPoint:CGPointMake(200, 100)],                                                   


                     nil];              


for(int i=0; i<6; i++) {
    NSValue *value = [position objectAtIndex:i];
    CGPoint point = [value CGPointValue];
    NSLog(@"%@",NSStringFromCGPoint(point));

    _angle = [self angleForPlayer:player];

    [UIView animateWithDuration:0.2f
                          delay:delay
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^
     {





         self.center = point;              



         self.transform = CGAffineTransformMakeRotation(_angle);
     }
                     completion:nil];

現在、すべてのインデックス番号を個別に呼び出すのではなく、5番目のオブジェクトインデックスを提供するまで、self.centerを何度も書き換えています。たとえば、すべてのポイントでカードを処理する代わりに、(200,100)でのみ処理します。すべてのポイントで対処できるように、毎回animaitedealingwithplayerを呼び出す方法が必要ですが、どうすればよいですか?私が得ることができるどんな助けにも感謝します。

4

1 に答える 1

1

問題は、単一のビュー要素に適用される複数のアニメーションブロックを作成していて、これらすべてを一度に適用していることです。

代わりに、アニメーションブロックが完了時に別のアニメーションをトリガーするようにすることができます。

Apple Viewプログラミングドキュメントに例があります。「リスト4-2は、最初のアニメーションが終了した後、完了ハンドラを使用して新しいアニメーションを開始するアニメーションブロックの例を示しています。

ここに例を投稿しているので、その感触をつかむことができますが、ドキュメントを読んでください!:

- (IBAction)showHideView:(id)sender
{
    // Fade out the view right away
    [UIView animateWithDuration:1.0
        delay: 0.0
        options: UIViewAnimationOptionCurveEaseIn
        animations:^{
             thirdView.alpha = 0.0;
        }
        completion:^(BOOL finished){
            // Wait one second and then fade in the view
            [UIView animateWithDuration:1.0
                 delay: 1.0
                 options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                    thirdView.alpha = 1.0;
                 }
                 completion:nil];
        }];
}

あなたの例では、おそらく(擬似コードで)次のようにする必要があります。

// center card on dealer
Animate: ^{
   // move card to player1
}, completion: ^{
   // center card on dealer
   Animate: ^{
     // move card to player2
   }, completion: ^{
     //center 
     // animate again, and again etc.
   }
}
于 2012-09-07T04:15:59.923 に答える