UIImageView立即更改图像

时间:2013-11-19 03:15:56

标签: ios uiimageview

在我目前的实现中,我点击视图,只有在整个点击手势方法完成后图像才会发生变化。但是,如何在调用后立即刷新视图,以便用户看到新图像几秒钟,然后继续处理。

编辑:更多信息。 我只想显示新图像~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"];

2 个答案:

答案 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
    }
}

不要在这些方法中使用睡眠方法,否则会有延迟