UIImageView 立即更改图像
Posted
技术标签:
【中文标题】UIImageView 立即更改图像【英文标题】:UIImageView change image immediately 【发布时间】:2013-11-19 03:15:56 【问题描述】:在我当前的实现中,我点击视图,只有在整个点击手势方法完成后,图像才会发生变化。但是,如何在调用后立即刷新视图,以便用户在几秒钟内看到新图像并从那时起继续处理。
编辑:更多信息。 我只想显示新图像约 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"];
【问题讨论】:
【参考方案1】:在方法返回之前,显示不会更新图像,您对此无能为力,这就是显示循环的工作方式。如果您的处理时间足以在 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 秒后返回原始视图。更改回队列中的第一个图像失败。 改回图片需要在主线程上,看我的更新。【参考方案2】:我对这些手势检测器一无所知,但您可以在视图控制器中使用 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
不要在这些方法中使用 sleep 方法,否则会有延迟
【讨论】:
以上是关于UIImageView 立即更改图像的主要内容,如果未能解决你的问题,请参考以下文章