Jer*_*y L 18 macos cocoa objective-c nsview nswindow
由于Xcode中OS X应用程序的模板似乎与空的app模板类似,因此以下内容用于添加视图和按钮(现在尝试不使用"界面"构建器):
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
[self.window.contentView addSubview:view];
NSRect frame = NSMakeRect(10, 40, 90, 40);
NSButton* pushButton = [[NSButton alloc] initWithFrame: frame];
pushButton.bezelStyle = NSRoundedBezelStyle;
[self.window.contentView addSubview:pushButton];
NSLog(@"subviews are %@", [self.window.contentView subviews]);
}
Run Code Online (Sandbox Code Playgroud)
iOS上的类似代码应该生成一个黄色框和一个按钮,但上面的代码只生成一个按钮,但视图不会显示.上面的代码有什么问题,以及如何让它以黄色背景显示视图?
Par*_*fna 18
使用setWantsLayer:
NSView类的方法.
NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
[view setWantsLayer:YES];
view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
[self.window.contentView addSubview:view];
NSRect frame = NSMakeRect(10, 40, 90, 40);
NSButton* pushButton = [[NSButton alloc] initWithFrame: frame];
pushButton.bezelStyle = NSRoundedBezelStyle;
[self.window.contentView addSubview:pushButton];
NSLog(@"subviews are %@", [self.window.contentView subviews]);
Run Code Online (Sandbox Code Playgroud)
NSView
默认情况下,Cocoa中的s不是图层支持的.我怀疑如果你输入
NSLog(@"%@", view.layer);
Run Code Online (Sandbox Code Playgroud)
你会看到它nil
.
在iOS中,所有视图都有图层.但在OS X上,视图没有图层.此外,在OS X上有2个"模式"的层支持视图.这就是所谓的"层支持视图"和"层托管视图".图层支持的视图使用CoreAnimation图层来缓存绘制的数据,但不允许您以任何方式与图层交互.图层托管视图使用CALayer
您明确提供的视图,您可能会想要使用该图层.但是,使用图层托管视图,您可能无法添加任何子视图,或使用内置NSView
绘图机制.图层托管视图只能用作CoreAnimation图层层次结构的根.
鉴于这一切,您应该完全避免使用CoreAnimation进行查看.
一个人可能NSBox
会做你想做的事.您当然可以在那里设置填充颜色,关闭边框,并将样式设置为自定义.我只是不是100%肯定它将绘制为一个简单的填充矩形颜色.或者,您可以定义自己的NSView
绘制颜色的子类-drawRect:
.
为了扩展Kevin Ballard的建议,执行此操作的经典方法是子类化NSView
并覆盖该-drawRect:
方法.NSRectFill
是一个非常方便的函数,用于填充矩形而无需创建贝塞尔曲线路径:
- (void)drawRect:(NSRect)rect
{
[[NSColor yellowColor] set];
NSRectFill(rect);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25186 次 |
最近记录: |