gpt4 book ai didi

cocoa - 为什么应用程序启动前无法显示启动窗口?

转载 作者:行者123 更新时间:2023-12-03 17:37:23 25 4
gpt4 key购买 nike

我想在应用程序午餐之前显示启动屏幕。首先,我将 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;

}

然后在主应用程序 Controller 中从 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没有显示。我缺少什么?我的应用程序是一个 multi_Documents 。在mainMenu.nib中有一个窗口(loadwindow),在IB中我已经连接了主 Controller 中的loadWindow socket 。我还连接了 View 和图像。我改变了另一种方式:在委托(delegate)方法中:applicationWillFinishLaunching:我 orderFront the loadWindow ,在方法中:applicationDidFinishLaunching:I orderOut the loadWindow 3秒后,但 mainWindow 也没有显示。有人可以提供一些建议或编码结果问题?非常感谢!

最佳答案

标题答案:因为您的应用尚未运行。未运行的应用程序无法执行任何操作。

认真回答问题:

首先,您不需要子类化 NSWindow。

其次,您没有实例化您的子类,而是实例化 NSWindow。这就是为什么你没有得到你的子类的行为。 (这就是您应该做的,因为您不需要子类。)

第三,您试图向尚不存在的窗口询问用于创建它的框架。 loadWindownil,直到您创建某些内容并将其存储在那里之后。

第四,因为您要求 nil 获取其框架,所以您将得到一个垃圾矩形。然后用这个垃圾矩形创建一个窗口。毫不奇怪,当您将此窗口放在屏幕上时,它会以随机大小(可能太大而无法创建或为负数)出现在随机位置(可能在屏幕外)。

第五,是什么让你认为告诉一个窗口排序出去会导致其他一些窗口排序?它如何知道在哪个窗口订购?

抛开不可否认的现实,the very existence of a splash screen punishes the user for using your application ,您应该使用 NSWindowController 来加载窗口并进行设置,例如 setBackgroundColor:setLevel:。在您的计时器方法中,您在启动窗口中排序,您还必须在主窗口中显式排序。

关于cocoa - 为什么应用程序启动前无法显示启动窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/703744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com