无法让setNeedsDisplay在UIImageView的循环中工作

时间:2010-08-19 23:00:55

标签: iphone

一个经常回答的问题,我很担心,但我对这个问题一无所知。

在我的视图控制器中,我有以下方法在两个图像之间前后切换,共5次

- (IBAction)cycle{

 BOOL select1;
 select1=YES;

 UIImage *image1 = [UIImage imageNamed:@"image1.png"];
 UIImage *image2 = [UIImage imageNamed:@"image2.png"];

 for (int i=0; i<5; i++) {

  if (select1){
   [imageview setImage:image1];
  } else {
   [imageview setImage:image2];
  }

  [NSThread sleepForTimeInterval:1.0];

  [imageview setNeedsDisplay];

 }
}

问题是setNeedsDisplay消息在循环中不起作用,视图仅在方法退出时更新。

我能在这做什么吗?方法是否可行,或者我完全走错了轨道。这是一个非常多的测试程序(我是这种语言的新手)但是以编程方式控制这样的东西会很有用。下一步应用程序将实现图片更改之间随机更改的时间。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

错误的曲目。调用

[NSThread sleepForTimeInterval:1.0];

只是试图让主线程处于睡眠状态。问题是这是实际绘图的线程。你需要结束你正在做的事情并将控制bakc提供给NS运行时,以便它可以更新gui元素。

尝试使用NSTimer创建计划的计时器。让它重复你想要的时间间隔。您需要做的就是设置图像:

if (select1){     
   [imageview setImage:image1];     
  } else {     
   [imageview setImage:image2];     
  } 

没有必要

[imageview setNeedsDisplay];

由于imageview将为自己处理。