我想在App午餐之前显示一个闪屏。首先,我让SplashWindow成为NSWindow的子类,代码是:
- (id)initWithContentRect(NSRect)contentRect
styleMask(unsigned int)aStyle
backing(NSBackingStoreType)bufferingType
defer(BOOL)flag {
self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[self setBackgroundColor:
[NSColor clearColor]];
[self setLevel: NSStatusWindowLevel];
[self setAlphaValue:1.0];
[self setOpaque:NO];
[self setHasShadow: YES];
return self;
}然后在主应用控制器中从nib唤醒:
loadWindow = [[NSWindow alloc] initWithContentRect:[loadWindow frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
[loadWindow setContentView:theView];
[loadWindow setHasShadow:YES]; [
loadWindow setLevel:NSStatusWindowLevel];
[loadWindow makeKeyAndOrderFront:self];然后我让loadWindow在3秒后关闭,我使用了方法loadWindow orderOut:self,但是当启动窗口关闭时,主控窗口没有显示。我遗漏了什么?我的应用程序是一个multi_Documents。在mainMenu.nib中有一个窗口(加载窗口),在IB中,我已经连接了主控制器中的loadWindow插座。我还连接了视图和图像。我改变了另一种方式:在委托方法中:applicationWillFinishLaunching:I orderFront loadWindow,在方法:applicationDidFinishLaunching:3秒后我orderOut了loadWindow,但mainWindow没有显示too.Somebody可以给出一些建议或编码结果问题吗?非常感谢!
发布于 2009-04-01 05:23:13
标题的答案:因为你的应用程序还没有运行。一个没有运行的应用程序不能做任何事情。
对问题的认真回答:
首先,你不需要继承NSWindow的子类。
其次,您没有实例化您的子类,而是实例化NSWindow。这就是为什么你没有得到你的子类的行为。(这就是您应该做的,因为您不需要这个子类。)
第三,您试图向一个尚不存在的窗口请求用于创建它的框架。loadWindow是nil,直到你创建了一些东西并将它存储在那里。
第四,因为您正在向nil请求它的框架,所以您将得到一个垃圾矩形。然后用这个垃圾矩形创建一个窗口。不出所料,当您将此窗口放在屏幕上时,它会出现在一个随机位置(可能在屏幕外),大小随机(可能太大而无法创建或为负数)。
第五,是什么让你认为告诉一个窗口去订购会导致另一个窗口去订购?它怎么知道在哪个窗口点餐呢?
抛开the very existence of a splash screen punishes the user for using your application这一不可否认的事实不谈,你应该使用NSWindowController来加载窗口和进行设置,比如setBackgroundColor:和setLevel:。在您的timer方法中,您必须在主窗口中显式地对启动窗口进行排序。
发布于 2009-04-01 02:16:09
在你发布的代码中,我看不到任何可以让窗口显示的东西。为什么你不试着发送你的主窗口makeKeyAndOrderFront:?
https://stackoverflow.com/questions/703744
复制相似问题