使用循环按顺序显示图像

3

我有一个包含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)];
}

我一直看到同样的图片。
谢谢帮助。

可能是在循环中连续显示多个图像的重复问题。 - jscs
4个回答

6
我猜测pictoImage是一个UIImageView。如果是这样,请查看类参考文档,特别是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];

3

您没有给框架足够的时间将图像实际渲染到窗口中。

您的所有更新都被合并成一个“setNeedsDisplay”调用。在运行循环的下一次迭代中,图像视图将使用您在循环中设置的最后一个图像进行渲染。


我应该如何打印每张图片? - Florian_accessdev
如果你所说的“print”是指“渲染到窗口”,那么有许多选择。如果你坚持同步进行,那么在更改图像之间给运行循环一些时间来运行。请参见我的答案:http://stackoverflow.com/questions/5829977/nstextfield-waits-until-the-end-of-a-loop-to-update/5830376#5830376 - Steven Kramer
1
否则,使用Hagelin的答案中提供的内置动画支持,使用不同的延迟执行performSelectorAfterDelay等方法。所有这些方法都会让运行循环运行,这意味着窗口会更新以反映您的更改。 - Steven Kramer

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

这段代码将每2秒钟使用tabImages中的图像来更新pictoImage


0

你没有打印 任何东西。

你正在连续20次覆盖你的 pictoImage 的内容,最后一次赋值时 var 为19,所以应该是 picto_4.png。

此外,整个 var 声明根本没有什么意义...首先将其设置为 0,然后将其设置为 indexPath.row,在循环中它被完全重新定义....


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接