gpt4 book ai didi

objective-c - 确定子窗口是由用户移动还是因为父窗口移动?

转载 作者:行者123 更新时间:2023-12-03 16:55:09 25 4
gpt4 key购买 nike

如何确定子窗口是否是由用户直接移动的,而不是由于其父窗口被移动而导致的?

在这两种情况下我都会收到 NSWindowDidMoveNotification 通知。

我想我可以在 NSWindowWillMoveNotification 处理程序中测试父框架原点,并将其与 NSWindowDidMoveNotification 处理程序中的原点进行比较,但也许有更好的方法吗?

这是我当前的解决方案:

- (void)windowWillMove:(NSNotification *)notification
{
NSWindow *window = [notification object];
_parentOrigin = [[window parentWindow] frame].origin;
}

- (void)windowDidMove:(NSNotification *)notification
{
NSWindow *window = [notification object];
NSPoint newParentOrigin = [[window parentWindow] frame].origin;
if (_parentOrigin.x == newParentOrigin.x &&
_parentOrigin.y == newParentOrigin.y)
{
// The parent hasn't moved, therefore the user moved the window directly...
[window doThing];
}
}

最佳答案

您点击移动的窗口将成为关键窗口,而如果子窗口因父窗口的移动而移动,则子窗口不会成为关键窗口。因此,如果您测试发送通知的窗口是否是关键窗口,您就可以判断哪个窗口被用户移动了。

- (void)windowDidMove:(NSNotification *)notification {
NSWindow *movedWindow = notification.object;
if ([movedWindow isKeyWindow]) {
NSLog(@"%@",movedWindow);
[movedWindow doThing];
}
}

关于objective-c - 确定子窗口是由用户移动还是因为父窗口移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10472162/

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