1

我需要以 2 秒的时间间隔在我的 imageview 中显示图像。但是,此代码仅显示最后一张图片

NSUInteger i,j;
for (i = 1; i <= kNumImages; i++)
{
    NSURL *picUrl=[NSURL URLWithString:[NSString stringWithFormat:@"http://panagtakdo.com/misc/images/%d.jpg",i]];
    NSData *picData=[[NSData alloc] initWithContentsOfURL:picUrl];
    image1.image = [UIImage imageWithData:picData];
    NSLog(@"Image %d Success",i);
    [NSThread sleepForTimeInterval:0.2];    
}
4

3 回答 3

1

首先你不应该那样做。首先创建 NSMutableArray *imageData;

和 initWithContentsOfURL 你所有的图片;

当 imageData 的数量等于您的 kNumImages 时,将其链接到您的 imageView。而不是使用 NSThread sleepForTimeInterval,您可以使用 performSelector: afterDelay 函数来更改图像。

于 2012-04-17T12:57:34.413 回答
1

只是解释一下,为什么您的代码不起作用

设置图像后,您的线程正在休眠。没有时间重新绘制图像视图(这将导致显示新图像)。因此,在所有循环运行之后,将发生第一次重绘。所以你只看到最后一张图片。

如果您将 Travis 和 mhunturk 的答案结合起来,您就有了如何完成的完美解决方案。但我也建议使用异步方法,从 url 加载图像。

永远不应该阻塞主 UI 线程。既不直接调用 sleepForTimeInterval,也不同步加载 web 内容。

于 2012-04-17T16:19:34.283 回答
0

如果要显示动画图像序列,可以创建一个 UIImage 来执行此操作:

NSMutableArray *mImageArray = [NSMutableArray arrayWithCapacity:0];
for(int i = 1; i < 9; i++) {
    NSString *imageFileName = [NSString stringWithFormat:@"0%d.tiff",i];
    UIImage *newImage = [UIImage imageNamed:imageFileName];
    [mImageArray addObject:newImage];
}

UIImage *animatedSequence = [UIImage animatedImageWithImages:mImageArray duration:16];

UIImageView *uiiv = [[UIImageView alloc] initWithImage:animatedSequence];
[self.canvas addSubview:uiiv];

您可以通过设置 UIImage 的持续时间来控制图像的时间。我将持续时间设置为 16 秒,这变成了 2 秒/图像,因为我在我的序列中使用了 8 个图像。

(在ios模拟器中测试过,效果很好)

PS在我的项目结构中,self.canvas指的是主UIView

于 2012-04-17T15:55:36.607 回答