我有一张带有5张照片的NSArray。我想在循环中一个接一个地显示它们。 我的代码:
NSArray *tabImage = [[NSArray alloc] init];
tabImage = [[NSArray arrayWithObjects:
[UIImage imageNamed:@"picto_1.png"],
[UIImage imageNamed:@"picto_2.png"],
[UIImage imageNamed:@"picto_3.png"],
[UIImage imageNamed:@"picto_4.png"],
[UIImage imageNamed:@"picto_5.png"],
nil] retain];
int var = 0;
var = indexPath.row;
for (int var = 0; var < 20; var++) {
pictoImage.image = [tabImage objectAtIndex:(var % 5)];
}
我一直都有同样的照片。
感谢您的帮助。
答案 0 :(得分:6)
我猜pictoImage
是UIImageView
。在这种情况下,请查看class reference,特别是animationImages
属性。
pictoImage.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"picto_1.png"],
[UIImage imageNamed:@"picto_2.png"],
[UIImage imageNamed:@"picto_3.png"],
[UIImage imageNamed:@"picto_4.png"],
[UIImage imageNamed:@"picto_5.png"],
nil];
// How many seconds it should take to go through all images one time.
pictoImage.animationDuration = 5.0;
// How many times to repeat the animation (0 for indefinitely).
pictoImage.animationRepeatCount = 4;
[pictoImage startAnimating];
答案 1 :(得分:3)
您没有给框架时间实际将图像渲染到窗口。
您的所有更新都会合并为一个“setNeedsDisplay”调用。在运行循环的下一次迭代中,将使用您在循环中设置的最后一个图像渲染图像视图。
答案 2 :(得分:2)
如果pictoImage
是UIImageView
,@ Hagelin的答案是最好的方法。现在,如果pictoImage
不是UIImageView
对象,那么你将不得不采取不同的方法,这绝对不是一个循环。
使用所需的时间间隔设置NSTimer,并调用更新pictoImage
迭代tabImages
的方法。它应该是这样的: -
- (void)setup {
...
[NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(updatePictoImage:)
userInfo:nil
repeats:YES];
...
}
- (void)updatePictoImage:(NSTimer*)theTimer {
static int i = 0;
if ( i > 20 ) {
pictoImage.image = [tabImages objectAtIndex:(i % 5)];
} else {
[theTimer invalidate];
}
}
这应使用pictoImage
中的图片每2秒更新一次tabImages
。
答案 3 :(得分:0)
您不打印任何内容。
你连续20次覆盖pictoImage
的内容,当var为19时,将其留给最后一个赋值,所以它应该是picto_4.png。
此外,整个var
声明根本没有多大意义...首先将其设置为0
,然后将其设置为indexPath.row
,并在循环中它被完全重新定义....