Pat*_*ini 3 cocoa core-animation objective-c nsview dropshadow
我正在尝试为自定义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];
}
Run Code Online (Sandbox Code Playgroud)
它只渲染一个蓝色方块(即没有阴影).
我在正确的地方设置投影吗?我是否满足使用所有必要的要求setShadow:?
Rob*_*ger 19
在回答问题之前的一些注意事项:
super的实现.默认实现什么都不做.drawRect:NSView[self bounds]用作填充矩形,而不是dirtyRect.该dirtyRect参数用于指示需要绘制的视图部分,仅用于绘图优化.dropShadow物体.您应该autorelease在创建release后调用它或在调用后调用它setShadow:.阴影不显示的原因是双重的.首先,为了使图层支持的视图显示阴影,视图的超级视图也必须是图层支持的.
其次,您要设置阴影的颜色,而不是其他参数:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6533 次 |
| 最近记录: |