为 NSView 创建投影 - Cocoa

发布于 2024-11-26 00:57:41 字数 784 浏览 0 评论 0原文

我正在尝试在 NSView 周围创建一个阴影,就像 NSWindow 如何使用其阴影一样,但我遇到了一些困难。我为 NSView 创建了一个类,我正在为其创建投影,并且我使用此代码作为重写方法:

   -(void)drawRect:(NSRect)dirtyRect {
    NSRect rect = NSInsetRect([self bounds], 10.0, 10.0);
    NSShadow *dropShadow = [[[NSShadow alloc] init] autorelease];
    [dropShadow setShadowColor:[NSColor blackColor]];
    [dropShadow setShadowBlurRadius:5];
    [dropShadow setShadowOffset:NSMakeSize(0,-3)];

    [NSGraphicsContext saveGraphicsState];

    [dropShadow set];

    NSRectFill(rect);

    [NSGraphicsContext restoreGraphicsState];

    [super drawRect:dirtyRect];
}

这并没有真正创建我正在查看的投影。

这是我想要瞄准的阴影...

NSWindow Shadow

而是通过 NSView 创建一条线,看起来像视图范围内的边框。有人对此有什么想法吗?

I'm trying to create a drop shadow surrounding the NSView like how NSWindow does it with its shadow, but I'm having some difficulty. I created a class for the NSView I'm creating the drop shadow for and I'm using this code for the overriding method:

   -(void)drawRect:(NSRect)dirtyRect {
    NSRect rect = NSInsetRect([self bounds], 10.0, 10.0);
    NSShadow *dropShadow = [[[NSShadow alloc] init] autorelease];
    [dropShadow setShadowColor:[NSColor blackColor]];
    [dropShadow setShadowBlurRadius:5];
    [dropShadow setShadowOffset:NSMakeSize(0,-3)];

    [NSGraphicsContext saveGraphicsState];

    [dropShadow set];

    NSRectFill(rect);

    [NSGraphicsContext restoreGraphicsState];

    [super drawRect:dirtyRect];
}

This doesn't really create a drop shadow in which I'm looking.

Here is the shadow I'm trying to aim for...

NSWindow Shadow

rather creates a line through the NSView that seems like a border within the bounds of the view. Anyone got any ideas for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清浅ˋ旧时光 2024-12-03 00:57:41

我也遇到过类似的阴影问题,因为 NSView 剪切了它的边界。

当我使用图层支持视图时我修复了它。我只需将超级视图的 wantsLayer 属性设置为 YES.. 即 [[view superView] setWantsLayer:YES] 并为视图设置阴影 [view setShadow:dropShadow]< /强>。

I have faced similar shadow issues because NSView clips its bounds.

I fixed it when I used a layer backed view. I simply set the superview's wantsLayer property to YES.. i.e [[view superView] setWantsLayer:YES] and set shadow for view [view setShadow:dropShadow].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文