我需要在我的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];
}
答案 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