如何有一个按钮投射到 NSView 之外?

swa*_*tel 0 macos cocoa objective-c nsview nsbutton

我想实现一个投射到 NSView 之外的按钮。类似的按钮如下图所示。

pfa*_*ade 5

如果您必须让视图溢出窗口,则不能使用masksToBound以下属性来做到这一点CALayer来做到这一点。您需要使用子无边框窗口并将其正确放置。

这是一个示例(在 ObjC 中):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application


    NSRect windowFrame = self.window.frame;
    NSRect childWindowFrame = {
        .origin.x = CGRectGetMidX(windowFrame) - 25,
        .origin.y = CGRectGetMinY(windowFrame) - 25,
        .size.width = 50,
        .size.height = 50,
    };

    NSWindow *childWindow = [[NSWindow alloc] initWithContentRect:childWindowFrame
                                                        styleMask:NSWindowStyleMaskBorderless
                                                          backing:NSBackingStoreBuffered
                                                            defer:YES];
    childWindow.backgroundColor = [NSColor clearColor];
    childWindow.contentView.wantsLayer = YES;
    childWindow.contentView.layer.backgroundColor = [NSColor redColor].CGColor;
    childWindow.contentView.layer.cornerRadius = 25.0;



    [self.window addChildWindow:childWindow ordered:NSWindowAbove];
}
Run Code Online (Sandbox Code Playgroud)

此屏幕截图中的红色圆圈是子窗口。

溢出的子窗口