gpt4 book ai didi

objective-c - NSView 投影使用 setShadow :

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:44 25 4
gpt4 key购买 nike

我正在尝试为自定义 NSView 子类制作投影。

到目前为止,我已经做到了:

- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSShadow *dropShadow = [[NSShadow alloc] init];
[dropShadow setShadowColor: [NSColor redColor]];

[self setWantsLayer: YES];
[self setShadow: dropShadow];
}

return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor blueColor] setFill];
NSRectFill(dirtyRect);

[super drawRect: dirtyRect];
}

它只渲染一个蓝色方 block (即没有阴影)。

我是否在正确的位置设置了阴影?我是否满足使用 setShadow: 的所有必要要求?

最佳答案

回答问题前的几点说明:

  • 您不需要在普通 NSView 上调用 superdrawRect: 实现。默认实现什么都不做。
  • 您应该使用 [self bounds] 作为填充矩形,而不是 dirtyRectdirtyRect 参数用于指示 View 中需要绘制的部分,仅用于绘制优化。
  • 您正在泄漏 dropShadow 对象。您应该在创建后对其调用 autorelease,或者在调用 setShadow: 后对其调用 release

阴影不显示的原因有两个。首先,为了让 layer-backed view 显示阴影,view 的 superview 也必须是 layer-backed。

其次,您设置的是阴影的颜色而不是其他参数:

- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSShadow *dropShadow = [[NSShadow alloc] init];
[dropShadow setShadowColor:[NSColor redColor]];
[dropShadow setShadowOffset:NSMakeSize(0, -10.0)];
[dropShadow setShadowBlurRadius:10.0];

[self setWantsLayer: YES];
[self setShadow: dropShadow];

[dropShadow release];
}

return self;
}

关于objective-c - NSView 投影使用 setShadow :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com