当突出显示某个区块时,我试图完成一种跟踪效果:here
我尝试更改图像,但要完成我想要的是选择下一个图像,然后更改回白色,例如,如果第一个图块是蓝色,但是你想要第三个,它不会第一个是蓝色,第二个是蓝色,然后是白色,然后是第三个。我希望这是有道理的。这是我的代码
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIImage *image = [UIImage imageNamed:@"inside_blue"];
_t1.image = image;
wait = @"yes";
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)move:(id)sender {
UIImage *imageblue = [UIImage imageNamed:@"inside_blue"];
UIImage *imagewhite = [UIImage imageNamed:@"inside_white"];
_t1.image = imagewhite;
_t2.image = imageblue;
[self performSelector:@selector(waitTime) withObject:nil afterDelay:0.2];
while ([wait isEqualToString:@"yes"]) {
//hi
}
_t2.image = imagewhite;
_t3.image = imageblue;
[self performSelector:@selector(waitTime2) withObject:nil afterDelay:0.2];
while ([wait2 isEqualToString:@"yes"]) {
//hi
}
_t3.image = imagewhite;
_t4.image = imageblue;
}
- (void)waitTime2 {
wait2 = @"no";
}
- (void)waitTime {
wait = @"no";
}
但这只会冻结应用程序。
答案 0 :(得分:0)
当然,这会冻结应用程序。当应用程序返回到运行循环并且可以提供绘图事件时,绘图完成。
您必须编写代码"异步",将实际状态存储到视图对象并触发重绘。设置定时器后,您将返回代码,设置下一个状态并再次触发绘图。我建议您阅读绘图简介。对SO的答案来说,整个解释太过分了。
可能更容易将整个移动实现为可动画的属性。在这种情况下,时间和重绘将自动执行。