如何确定子窗口是否是由用户直接移动的,而不是由于其父窗口被移动而导致的?
在这两种情况下我都会收到 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/