【问题标题】:UIImageView change image immediatelyUIImageView 立即更改图像
【发布时间】: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"];

【问题讨论】:

    标签: ios uiimageview


    【解决方案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 方法,否则会有延迟

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多