如何确定用户是否直接移动子窗口而不是移动父窗口?
我在两种情况下都收到了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];
}
}
答案 0 :(得分:4)
单击要移动的窗口将成为关键窗口,而子窗口如果因移动父窗口而移动则不会成为关键窗口。因此,如果您测试发送通知的窗口是否是关键窗口,您可以判断用户移动了哪个窗口。
- (void)windowDidMove:(NSNotification *)notification {
NSWindow *movedWindow = notification.object;
if ([movedWindow isKeyWindow]) {
NSLog(@"%@",movedWindow);
[movedWindow doThing];
}
}