如何在循环中显示图像(来自Web)?

时间:2012-04-17 12:49:36

标签: ios image uiimage slideshow

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

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];    
}

3 个答案:

答案 0 :(得分:1)

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

和initWithContentsOfURL你的所有图片;

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

答案 1 :(得分:1)

要解释一下,为什么你的代码 NOT 正在工作:

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

如果你把Travis和mhunturk的答案结合起来,那么你就可以找到完美的解决方案。 但我还建议使用异步方法从网址加载图像。

  

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

答案 2 :(得分: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的持续时间来控制图像的时间。我将持续时间设置为16s,变成2s / image,因为我在序列中使用了8个图像。

(在ios模拟器中进行了测试,效果很好)

P.S。在我的项目结构中,self.canvas指的是主要的UIView