0

我有一个 NSWindow,它位于 NSStatusItem 的位置。窗口可以使用它自己的方法改变它的大小setSize:,这只是得到窗口的正确框架,如下所示:

- (NSRect)frameForSize:(NSSize)size {
    NSRect newFrame = self.frame;
    newFrame.origin.x += (newFrame.size.width - size.width) / 2;
    newFrame.origin.y += (newFrame.size.height - size.height);
    newFrame.size = size;

    return newFrame;
}

如果宽度改变,这允许窗口保持居中。我可以使用代码轻松调用它,但是当我使用窗口边缘调整它的大小时,直接调用 setFrame:display:。有一个委托方法windowDidResize:notification:,但是如果我在那里设置框架,它会被设置两次并且它会滞后。

在实际调整窗口大小之前是否有一个事件被调用?如果没有,我该怎么做?

4

1 回答 1

2

根据您的上述评论,您已分类NSWindow。假设您的方法-frameForSize:在您的NSWindow子类上,覆盖-[NSWindow setFrame:display:]如下:

- (void)setFrame:(NSRect)frameRect display:(BOOL)flag
{
    frameRect = (self.inLiveResize) ? [self frameForSize:frameRect.size] : frameRect;
    [super setFrame:frameRect display:flag];
}

我已经测试过了。窗口将平滑调整大小并始终居中。

于 2012-10-24T17:17:37.640 回答