使用循环按顺序显示图像

时间:2011-05-13 10:30:47

标签: objective-c cocoa-touch ios uiimage

我有一张带有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)];
}

我一直都有同样的照片。

感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

我猜pictoImageUIImageView。在这种情况下,请查看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)

如果pictoImageUIImageView,@ 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,并在循环中它被完全重新定义....