【问题标题】:How to display images in array, pause between each image? [duplicate]如何以数组显示图像,在每个图像之间暂停? [复制]
【发布时间】:2014-05-14 05:21:28
【问题描述】:

在我的应用程序中,我有一个 NSMutableArrayUIImage

我想在数组中显示第一个UIImage 三秒钟,然后 显示第二张图片。

当我按下 UIButton 时,所有这些都应该发生。

下面是我的代码:

[testImageView setImage:[arr objectAtIndex:0]] ;
sleep(3) ;
[testImageView setImage:[arr objectAtIndex:1]] ;

testImageView 是我屏幕上的 UIImageView 对象。

当我运行此代码时,我的按钮保持按下状态三秒钟,并且只显示第二张图片。

我该怎么办?

【问题讨论】:

  • 不要睡觉。最好使用NSTimerperformSelector:withObject:afterDelay

标签: ios iphone objective-c nsmutablearray sleep


【解决方案1】:

尝试使用UIImageView这种最晦涩难懂的方法之一。

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:...];

myImageView.animationImages   = images;
myImageView.animationDuration = 3.0 * images.count;

[self.view addSubview:myImageView];

然后,当你想开始制作动画时

[myImageView startAnimating];

我不知道你打算用这个做什么,但 3 秒可能太多了。如果您正在做某种演示,那么这种方法可能不是很好,因为没有简单的方法可以返回。

【讨论】:

    【解决方案2】:

    您的按钮保持按下状态的原因是因为您让主线程休眠了 3 秒,这意味着您的应用程序(至少是用户界面)不会发生任何事情,直到线程返回活跃。

    有多种方法可以实现您的愿望,但您必须在后台线程上放置一个计时器。我建议你先把代码在另一个方法中设置第二个图像,然后把数组变成一个属性。

    - (void)setImage
    {
        [testImageView setImage:self.yourArray[1]];
    }
    

    那么你可以使用以下方式之一来执行该方法:

    1. 使用NSTimer

      [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(setImage) userInfo:nil repeats:NO]
      
    2. 使用NSObjectperformSelector方法:

      [self performSelector:@selector(setImage) withObject:nil afterDelay:3.0];
      
    3. 使用Grand Central Dispatch

      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3.0), dispatch_get_main_queue(), ^{
          [self setImage];
      });
      

    上述任何一种方式都可以。

    在以下链接上阅读有关并发的更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2020-07-22
      相关资源
      最近更新 更多