在Objective C中关闭window时如何做一个window效果?
How do I do a window effect when closing the window in Objective C?
我使用 window 框架创建了这种整齐的绽放效果,以便 window 在应用程序启动时绽放。我只是弄乱了框架原点和大小,仅此而已。现在我想在有人单击 window 上的红色 X 按钮时执行相反的操作。有人提到要对 window 进行子类化,然后捕获一个事件,但我还不知道如何在 Objective C 中做到这一点。此外,我需要它在 anti-bloom(枯萎?)效果完成之前不隐藏 window。
问题:如何在单击 window 标题栏上的红色 X 按钮时 window 停止显示之前将 window 子类化并触发此 witherWindow 函数?
效果如下。请注意,我的 window 是 1000w x 680h 的固定大小(但由于标题栏的原因,必须将其设置为 700h)。这就是为什么我使用静态数字而不是获取当前 window width/height 并将其存储在 属性 中供以后使用的原因,以及为什么我在玩这些数字时没有对这些数字进行除法运算原始值。
- (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];
}
比classwindow更容易。
在带有 AppDelegate.m class 的默认 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
class 方法。
我使用 window 框架创建了这种整齐的绽放效果,以便 window 在应用程序启动时绽放。我只是弄乱了框架原点和大小,仅此而已。现在我想在有人单击 window 上的红色 X 按钮时执行相反的操作。有人提到要对 window 进行子类化,然后捕获一个事件,但我还不知道如何在 Objective C 中做到这一点。此外,我需要它在 anti-bloom(枯萎?)效果完成之前不隐藏 window。
问题:如何在单击 window 标题栏上的红色 X 按钮时 window 停止显示之前将 window 子类化并触发此 witherWindow 函数?
效果如下。请注意,我的 window 是 1000w x 680h 的固定大小(但由于标题栏的原因,必须将其设置为 700h)。这就是为什么我使用静态数字而不是获取当前 window width/height 并将其存储在 属性 中供以后使用的原因,以及为什么我在玩这些数字时没有对这些数字进行除法运算原始值。
- (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];
}
比classwindow更容易。
在带有 AppDelegate.m class 的默认 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
class 方法。