0

キャリブレーション ビューを作成しようとしています! UIImageViews として 12 のキャリブレーション ポイントがあります。ここで、すべてのポイントを 5 秒間表示したいと思います。したがって、全体のキャリブレーション時間は 1 分です。ImageViews のアルファは 0.0 に設定されています! UI アニメーションでは、アルファを次々と 1.0 に設定したいと思います。各ポイントは 5 秒間だけです。
これまでのところ、これを行いました(コードを参照)!しかし、これは 5 秒後に 5 秒後に 12 ポイントすべてを一度にアニメーション化 (フェードイン) します。ありがとう

-(id)init{
      _calibrationViewArray = [[NSMutableArray alloc]init];
      _calibrationPoint1 = [[UIImageView alloc]initWithFrame:(CGRectMake(115.5,113.0,25.0,25.0))];
      _calibrationPoint1.backgroundColor = [UIColor redColor];
      _calibrationPoint1.alpha = 0.0;
      [self addSubview:_calibrationPoint1];
      [_calibrationViewArray addObject:_calibrationPoint1];

      [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}

-(void)onTimer{

    for (int i = 0; i < [_calibrationViewArray count]; i++) {

        UIImageView* currentCalibrationPoint = [_calibrationViewArray objectAtIndex:i];

        [UIView beginAnimations:@"Calibration" context:nil];
        [UIView setAnimationDuration:5.0];

        // Make the animatable changes.
        currentCalibrationPoint.alpha = 1.0;


        // Commit the changes and perform the animation.
        [UIView commitAnimations];
    }

}
4

3 に答える 3

2

クラスの変数を次のように宣言します。

int cont;

必要に応じて変数を初期化します。

cont=0;

コードを次のように変更します。

-(void)onTimer{

    //Loop is not needed, with the timer and counter is enough


    UIImageView* currentCalibrationPoint = [_calibrationViewArray objectAtIndex:cont];

    [UIView beginAnimations:@"Calibration" context:nil];
    [UIView setAnimationDuration:5.0];

    // Make the animatable changes.
    currentCalibrationPoint.alpha = 1.0;


    // Commit the changes and perform the animation.
    [UIView commitAnimations];

    if(cont>0){
         //Hide previous view (here you can make another animation, instead of changing alpha right away)
         [_calibrationViewArray objectAtIndex:cont-1].alpha = 0.0;
    }
    cont++;//+1

}
于 2013-09-11T15:01:43.760 に答える
1

あなたのonTimer方法では、すべての画像ビューをループするべきではありませんcurrentIndex。次の画像ビューを取得してアニメーションを単独で実行できるように、または同様の変数が必要です。

于 2013-09-11T15:03:21.050 に答える
0

タイマーは一切使用しません。

使用:

  [UIView animateWithDuration: animations: completion:]

方法。

アニメーション ブロックでドットの 1 つをフェードさせ、完了ブロックでアニメーションを再度実行します。

于 2013-09-11T15:02:26.423 に答える