1

私はコミュニティに参加したばかりなので、質問が不明な場合はお知らせください。iPADで選択反応の練習をしようとしています。画面の左右にランダムに表示されるはずの画像が2つあり、ユーザーは表示された画像の位置に対応するボタンをタップすることで応答します。ここに問題があります。次の方法を使用して、2 つの画像をランダムな順序で表示しようとしました。

- (void) viewDidAppear:(BOOL)animated
{
   for(int n = 1; n <= 20; n = n + 1)
   {
      int r = arc4random() % 2;
      NSLog(@"%i", r);
      if(r==1)
      {
        [self greenCircleAppear:nil finished:nil context: nil];
      }
      else
     {
        [self redCircleAppear:nil finished:nil context: nil];
     }
  }
}

ただし、1 セットのアニメーションのみが実行される間に、20 個の乱数が生成されます。次のループが始まる前に各ループでアニメーションの実行を終了させる方法はありますか? どんな助けでも大歓迎です、事前に感謝します!

4

1 に答える 1

0

「アニメーションのセットが 1 つだけ実行される」と言うとき、それは一連の画像が表示され、ユーザーがボタンを押すことを意味するgreenCircleAppearと想定しています。redCircleAppearその場合は、forループを使用せviewDidAppearずにviewDidAppear、現在の状態を初期化して、次のアニメーションを表示するメソッドを呼び出すことをお勧めします。アニメーションが終了したら、次のアニメーションを表示するメソッドを呼び出します。これらの行に沿ったもの:

これをインターフェイスに追加します。

@interface ViewController ()

@property NSInteger currentIteration;

@end

これは実装にあります:

- (void)viewDidAppear:(BOOL)animated {
    self.currentIteration = 0;
    [self showNextAnimation];
}

- (void)greenCircleAppear:(id)arg1 finished:(id)arg2 context:(id)arg3 {
    //perform animation
    NSLog(@"green");
    [self showNextAnimation];
}

- (void)redCircleAppear:(id)arg1 finished:(id)arg2 context:(id)arg3 {
    //perform animation
    NSLog(@"red");
    [self showNextAnimation];
}

- (void)showNextAnimation {
    self.currentIteration = self.currentIteration + 1;
    if (self.currentIteration <= 20) { //you should replace '20' with a constant
        int r = arc4random() % 2;
        NSLog(@"%i", r);
        if(r==1)
        {
            [self greenCircleAppear:nil finished:nil context: nil];
        }
        else
        {
            [self redCircleAppear:nil finished:nil context: nil];
        }
    }
    else {
        //do what needs to be done after the last animation
    }
}
于 2013-01-08T16:24:25.143 に答える