在Objective C中关闭窗口时如何进行窗口效果?

时间:2015-12-11 23:40:06

标签: objective-c cocoa animation window

我使用窗框创建了这种整洁的绽放效果,以便在应用程序启动时窗口打开。我只是搞乱了帧的起源和大小,就是这样。现在我想在有人点击窗口上的红色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];
}

1 个答案:

答案 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类方法。

相关问题