如何在循环中添加延迟?

Sar*_*ios 1 loops objective-c uiimageview ios

我尝试使用此代码将图像视图添加到UIView:

for (int i = 0; i <numberOfImages; i++) {
    UIImageView *image = [UIImageView alloc]initWithFrame:CGRectMake(40, 40, 40, 40)];
    image.image = [images objectAtIndex:i];
    [self.view addSubview:image];
}
Run Code Online (Sandbox Code Playgroud)

这有效,但问题是我希望在添加每个图像之前有5秒的延迟,而是将它们全部添加到同一时间.有人可以帮帮我吗?谢谢.

例:

5 seconds = one image on screen
10 seconds = two images on screen
15 seconds = three images on screen
Run Code Online (Sandbox Code Playgroud)

Sid*_*Sid 6

使用NSTimer会更有效.

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:numberOfSeconds
                                                      target:self 
                                                    selector:@selector(methodToAddImages:) 
                                                    userInfo:nil 
                                                     repeats:YES];
Run Code Online (Sandbox Code Playgroud)

这基本上会methodToAddImages以指定的时间间隔重复调用.要停止调用此方法,请调用[NSTimer invalidate](请记住,无效的计时器无法重用,并且您需要创建一个新的计时器对象,以防您想重复此过程).

在里面methodToAddImages你应该有代码来遍历数组并添加图像.您可以使用计数器变量来跟踪索引.

另一个选项(我的建议)是拥有此数组的可变副本并添加lastObject为子视图,然后将其从数组的可变副本中删除.

您可以通过首先以相反的顺序创建mutableCopy来执行此操作,如下所示:

NSMutableArray* reversedImages = [[[images reverseObjectEnumerator] allObjects] mutableCopy];
Run Code Online (Sandbox Code Playgroud)

您的methodToAddImages看起来像:

- (void)methodToAddImages
{
    if([reversedImages lastObject] == nil)
    {
        [timer invalidate];
        return;
    }

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:(CGRectMake(40, 40, 40, 40))];
    imageView.image = [reversedImages lastObject];
    [self.view addSubview:imageView];
    [reversedImages removeObject:[reversedImages lastObject]];
}
Run Code Online (Sandbox Code Playgroud)

我不知道您是使用ARC还是手动保留版本,但这个答案是在假设ARC(根据您的问题中的代码)编写的.