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 立即更改图像的主要内容,如果未能解决你的问题,请参考以下文章

更改 UIImageView 或 UIImage 宽度

UIImageView 立即更改图像

如何更改UIImage / UIImageView的单个像素的颜色

如何在 uiimage 选择器控制器中更改图像大小

通过图像更改为单个 UIImageView 编写多个动画

在运行时更改 UIImageView 中的图像