我使用窗框创建了这种整洁的绽放效果,以便在应用程序启动时窗口打开。我只是搞乱了帧的起源和大小,就是这样。现在我想在有人点击窗口上的红色X按钮时执行反向操作。有人提到要将一个窗口子类化然后捕捉一个事件,但我还不知道如何在Objective C中做到这一点。而且,我需要它不要隐藏窗口,直到这个反绽放(枯萎?)效果已经完成了。
问题:如果窗口在窗口的标题栏上单击红色X按钮后停止显示,我如何对窗口进行子类化并触发此witherWindow函数?
这就是效果。请注意,我的窗口是固定大小1000w x 680h(但由于标题栏必须使其为700h)。这就是我使用静态数字而不是获取当前窗口宽度/高度并将其存储在属性中以供以后使用的原因,以及为什么在使用原始值时我没有对这些数字进行除法运算。
- (void)bloomWindow:(NSWindow*)window
{
NSRect frame = [window frame];
frame.origin.y -= 350.0f;
frame.origin.x -= 500.0f;
frame.size.height = 700.0f;
frame.size.width = 1000.0f;
[window setFrame:frame display:YES animate:YES];
}
- (void)witherWindow:(NSWindow*)window
{
NSRect frame = [window frame];
frame.origin.y += 350.0f;
frame.origin.x += 500.0f;
frame.size.height = 0.0f;
frame.size.width = 0.0f;
[window setFrame:frame display:YES animate:YES];
}
答案 0 :(得分:0)
这比继承窗口容易得多。
在具有AppDelegate.m类的默认Cocoa应用程序中,您将拥有此事件:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// add stuff here
}
现在,稍微关注this step,我们将// add stuff here
替换为:
NSButton *closeButton = [self.window standardWindowButton:NSWindowCloseButton];
[closeButton setTarget:self.window.delegate];
[closeButton setAction:@selector(applicationWillClose)];
然后,在applicationDidFinishLaunching
下方,添加以下内容:
- (void)applicationWillClose;
{
[self witherWindow:self.window];
[self.window close];
}
并确保您拥有问题中公布的witherWindow
类方法。