在我目前的实现中,我点击视图,只有在整个点击手势方法完成后图像才会发生变化。但是,如何在调用后立即刷新视图,以便用户看到新图像几秒钟,然后继续处理。
编辑:更多信息。 我只想显示新图像~1秒。然后,应该显示旧图像。这就是我想要睡眠功能的原因。我们的目标是在这里使用卡片进行棋盘游戏......
建议任何人?
myUIImageViewSubclass.image = [UIImage imageNamed:@"newImage.jpg"];
[myUIImageViewSubclass refresh]; // <- that's what I'm looking for
sleep(1);
//do something else
myUIImageViewSubclass.image = [UIImage imageNamed:@"oldImage.jpg"];
答案 0 :(得分:3)
在方法返回之前,显示器不会更新图像,并且您无法做任何事情,这就是显示循环的工作方式。如果您的处理需要足够长的时间才能在UI上产生明显的延迟,那么您应该将该代码分派到另一个队列。
必须在主线程上进行UI更新,因此当您想要更改图像时,您需要返回它。
myUIImageViewSubclass.image = [UIImage imageNamed:@"newImage.jpg"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
sleep(1);
//do other stuff
dispatch_async(dispatch_get_main_queue(), ^{
myUIImageViewSubclass.image = [UIImage imageNamed:@"oldImage.jpg"];
});
});
答案 1 :(得分:0)
我对这些手势检测器一无所知,但您可以在视图控制器中使用touchesBegan:withEvent:
和touchesEnded:withEvent
方法。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *t = [event touchesForView:_myImageView];
if([t count] > 0) {
// Change image here
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *t = [event touchesForView:_myImageView];
if([t count] > 0) {
// Or change image here
}
}
不要在这些方法中使用睡眠方法,否则会有延迟