【问题标题】:How to make a static image appear after 3 seconds?如何让静态图像在 3 秒后出现?
【发布时间】:2011-06-21 18:08:11
【问题描述】:

如何让图像在 3 秒后出现?

【问题讨论】:

  • 如何自动完成?
  • Xcode 4 只是一个 IDE,Objective C 只是一种语言——你可能在谈论 Mac OS X 编程(Cocoa)或 iPhone/iPad(iOS、CocoaTouch)?

标签: iphone objective-c ios


【解决方案1】:

你可以使用:

[self performSelector: withObject: afterDelay: ]

【讨论】:

    【解决方案2】:

    我非常喜欢使用 GCD (iOS 4+),因为您可以使用内联块简化代码。

    在您的情况下,您应该在 Interface Builder 中将图像设置为隐藏,然后创建一个 IBOutlet 并连接到您的类中的 ivar。

    然后你可以简单地在viewDidLoad 或类似的地方运行它:

    dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 3.0); 
    dispatch_after(delay, dispatch_get_main_queue(), ^(void){
        yourImage.hidden = NO;
    }); 
    

    【讨论】:

      【解决方案3】:

      这假设您正在从主线程调用 performSelector:withObject:afterDelay,并且您的 UIImageView 最初是隐藏的。

      //assumes theImageView.hidden = YES
      [self performSelector:@selector(showImage:) withObject:theImageView afterDelay:yourTimeInterval];
      
      -(void)showImage:(UIImageView*)anImageView {
          anImageView.hidden = NO;
      }
      

      从主线程调用 performSelector 很重要,因为延迟后调用的选择器将在同一线程上运行,并且作为一般规则,您不希望从主线程以外的任何地方更新 UI。

      【讨论】:

      • 实际上,-performSelector:withObject:afterDelay: 会安排一个计时器在延迟后触发。它不会暂停它被调用的线程,并且通常甚至不会在工作线程上正确运行(因为它们很少设置运行循环。)
      • @Steve:我不认为-performSelector:withObject:afterDelay: 作为后台线程运行,是吗?它只在 当前 线程上运行,在这种情况下很可能是主线程。
      • 我说 performSelector:withObject:afterDelay 阻塞了吗?但是,您关于运行循环的观点很好(我不能说我对此了解很多)。
      • @sudo - 你可能是对的,这似乎是有道理的。在这种情况下,showImageDelayed: 可以跳过 showImage: 更好。
      • @Steve,你能编辑你的答案吗?这对初学者来说是非常误导的。
      【解决方案4】:

      我有一段时间没有使用 XCode,但我会为你刺痛..

      1. 在 Interface Builder 中将图像的可见性设置为隐藏

      2. 当您的应用启动时,在 init fxn 中将一些全局变量设置为当前时间

      3. 在 UI 的主控制循环中,检查该全局变量是否包含超过 3 秒前的时间,如果是,则将该图像的可见性参数更改为显示。

      最好不用看就可以说,现在不可能。

      祝你好运!

      【讨论】:

      • 轮询超时?这太疯狂了!
      • 确实,一个糟糕的解决方案。虽然在概念上微不足道。但是,是的,你是对的,当然有更好的解决方案。从 sudo 的帖子中,看起来甚至有内置的方法,这似乎很理想。我想您可以通过配置计时器 ISR(我的意思是硬件计时器,这是嵌入式系统风格的思维)然后使用它来做得更好。但事实上,我承认,我的解决方案很好,因为它非常简单,而且超级丑陋且效率低下。
      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2020-08-13
      • 2011-09-12
      • 2020-08-26
      相关资源
      最近更新 更多