我正在尝试创建校准视图!我有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];
}
}
答案 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:]
方法
在动画块中淡化其中一个点,然后在完成块中再次运行动画。