Cocoa 为什么飞溅窗口可以’;在应用程序启动前不显示?
我想在应用程序午餐前显示启动屏幕。首先,我将SplashWindow子类化为NSWindow,代码如下:Cocoa 为什么飞溅窗口可以’;在应用程序启动前不显示?,cocoa,Cocoa,我想在应用程序午餐前显示启动屏幕。首先,我将SplashWindow子类化为NSWindow,代码如下: - (id)initWithContentRect(NSRect)contentRect styleMask(unsigned int)aStyle backing(NSBackingStoreType)bufferingType defer(BOOL)flag { self = [super initWithContentRect:contentRect styleMask:NSB
- (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]方法,但是当启动窗口关闭时,mainwinow没有显示。我错过了什么?我的应用程序是一个多文档的应用程序。在main menu.nib中有一个窗口(loadwindow),在IB中,我已连接主控制器中的loadwindow插座。我还连接了视图和图像。我改变了另一种方式:在委托方法中:applicationWillFinishLaunching:I orderFront加载窗口,在方法中:applicationdifinishLaunching:I orderOut加载窗口在3秒钟后,但主窗口也没有显示。有人可以给出一些建议或编码结果问题?多谢各位 在你发布的代码中,我没有看到任何会让另一个窗口显示的内容。为什么不尝试发送主窗口MakeKeyandDerfront:?在您发布的代码中,我没有看到任何会使另一个窗口显示的内容。为什么不尝试发送您的主窗口MakeKeyandDerfront:?回答标题:因为您的应用程序尚未运行。未运行的应用程序无法执行任何操作 认真回答问题: 首先,您不需要为NSWindow创建子类 其次,您不是在实例化子类,而是在实例化NSWindow。这就是为什么你没有得到你的子类的行为。(这是您应该做的,因为您不需要子类。) 第三,您试图向一个尚不存在的窗口询问将用于创建它的框架
loadWindow
是nil
,直到您创建了一些东西并将其存储在那里
第四,因为您要求nil
获取其帧,所以您得到的是一个垃圾矩形。然后用这个垃圾矩形创建一个窗口。毫不奇怪,当你把这个窗口放在屏幕上时,它会出现在一个随机位置(可能在屏幕外),大小随机(可能太大而无法创建或为负数)
第五,是什么让你认为让一个窗口下订单会导致其他窗口下订单?它怎么知道在哪个窗口下订单
撇开不可否认的事实不谈,您应该使用NSWindowController加载窗口并进行设置,如
setBackgroundColor:
和setLevel:
。在计时器方法中,您在启动窗口外排序,也必须在主窗口中明确排序。回答标题:因为您的应用程序尚未运行。未运行的应用程序无法执行任何操作
认真回答问题:
首先,您不需要为NSWindow创建子类
其次,您不是在实例化子类,而是在实例化NSWindow。这就是为什么你没有得到你的子类的行为。(这是您应该做的,因为您不需要子类。)
第三,您试图向一个尚不存在的窗口询问将用于创建它的框架loadWindow
是nil
,直到您创建了一些东西并将其存储在那里
第四,因为您要求nil
获取其帧,所以您得到的是一个垃圾矩形。然后用这个垃圾矩形创建一个窗口。毫不奇怪,当你把这个窗口放在屏幕上时,它会出现在一个随机位置(可能在屏幕外),大小随机(可能太大而无法创建或为负数)
第五,是什么让你认为让一个窗口下订单会导致其他窗口下订单?它怎么知道在哪个窗口下订单
撇开不可否认的事实不谈,您应该使用NSWindowController加载窗口并进行设置,如setBackgroundColor:
和setLevel:
。在计时器方法中,在启动窗口外进行排序,还必须在主窗口中显式排序