macOS:使用父 window 移动子 window 时出现问题

macOS: Problem moving child window with Parent window

我在 objective-c 中写了一个示例代码来绘制两个 windows 并使第一个 window 成为第二个 window 的父级,这样当第一个 window 移动,第二个 window 也移动。我可以看到绘制了两个 windows,但是当我移动父 window 时子 window 没有移动。这段代码有什么问题?

NSRect frame = NSMakeRect(0, 0, 200, 200);
NSUInteger styleMask = NSTitledWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];

NSWindow * window =  [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered    defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront:NSApp];

NSRect frame1 = NSMakeRect(0, 0, 100, 100);
NSUInteger styleMask1 =  NSTitledWindowMask;
NSRect rect1 = [NSWindow contentRectForFrameRect:frame1 styleMask:styleMask1];

NSWindow * window1 =  [[NSWindow alloc] initWithContentRect:rect1 styleMask:styleMask1 backing: NSBackingStoreBuffered    defer:false];
[window1 setBackgroundColor:[NSColor greenColor]];
[window1 makeKeyAndOrderFront:NSApp];

CFRunLoopRun();
[window1 setParentWindow:window];

问题 1:

setParentWindow 未执行。 CFRunLoopRun:

Runs the current thread’s CFRunLoop object in its default mode indefinitely.

CFRunLoopRun之前设置父window。

第 2 期:

来自 parentWindow 的文档:

This property should be set from a subclass when it is overridden by a subclass’s implementation. It should not be set otherwise.

改用addChildWindow:ordered:

[window addChildWindow:window1 ordered:NSWindowAbove];