【发布时间】:2011-06-21 18:08:11
【问题描述】:
如何让图像在 3 秒后出现?
【问题讨论】:
-
如何自动完成?
-
Xcode 4 只是一个 IDE,Objective C 只是一种语言——你可能在谈论 Mac OS X 编程(Cocoa)或 iPhone/iPad(iOS、CocoaTouch)?
标签: iphone objective-c ios
如何让图像在 3 秒后出现?
【问题讨论】:
标签: iphone objective-c ios
你可以使用:
[self performSelector: withObject: afterDelay: ]
【讨论】:
我非常喜欢使用 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;
});
【讨论】:
这假设您正在从主线程调用 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: 会安排一个计时器在延迟后触发。它不会暂停它被调用的线程,并且通常甚至不会在工作线程上正确运行(因为它们很少设置运行循环。)
-performSelector:withObject:afterDelay: 作为后台线程运行,是吗?它只在 当前 线程上运行,在这种情况下很可能是主线程。
我有一段时间没有使用 XCode,但我会为你刺痛..
在 Interface Builder 中将图像的可见性设置为隐藏
当您的应用启动时,在 init fxn 中将一些全局变量设置为当前时间
在 UI 的主控制循环中,检查该全局变量是否包含超过 3 秒前的时间,如果是,则将该图像的可见性参数更改为显示。
最好不用看就可以说,现在不可能。
祝你好运!
【讨论】: