在NSTimer和UIView Animation的帮助下,每5秒显示一个新的UIImageView?

时间:2013-09-11 14:45:10

标签: ios nstimer uiviewanimation

我正在尝试创建校准视图!我有12个校准点作为UIImageViews。现在我想要显示每个点5秒。所以整个校准时间是1分钟。 ImageViews的Alpha设置为0.0!在UI动画中,我想将Alpha设置为1.0,然后将其设置为另一个点,每个点仅持续5秒。
到目前为止我做到了这一点(见代码)!但是这会在5秒内激活我(淡入),持续5秒,所有12点同时出现!我怎么能用NSTimer和UI动画一个接一个地解决这个问题?感谢

-(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];
    }

}

3 个答案:

答案 0 :(得分: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

}

答案 1 :(得分:1)

onTimer方法中,您不应该遍历所有图像视图,您应该有一个currentIndex或类似的变量,这样您就可以获得下一个图像视图并运行动画它一个人。

答案 2 :(得分:0)

根本不要使用计时器。

使用:

  [UIView animateWithDuration: animations: completion:]

方法

在动画块中淡化其中一个点,然后在完成块中再次运行动画。