Cocoa / Carbon使用下面的石英来创建UI。我正在尝试在可可中创建按钮时生成石英代码?
NSButton *myButton = [[NSButton alloc] initWithFrame:NSRectFromCGRect(CGRectMake(20,20,200, 44))];
[myButton setTitle:@"Click Me!"];
[myButton setBezelStyle:NSRoundedBezelStyle];
[[window contentView] addSubview:myButton];
或者,请让我知道一个低级别的调用,在Cocoa中创建类似于
的按钮extern OSStatus
HIThemeDrawButton(
const HIRect * inBounds,
const HIThemeButtonDrawInfo * inDrawInfo,
CGContextRef inContext,
HIThemeOrientation inOrientation,
HIRect * outLabelRect)
非常感谢任何帮助。
谢谢。
答案 0 :(得分:3)
我正在尝试在可可中创建按钮时生成石英代码?
你无法得到它,因为没有这样的东西可以得到。
创建按钮不会生成代码,Quartz或其他。代码已经写好了;当该对象被告知绘制时,它被新按钮对象简单地使用,其中按钮(具有其所有属性)作为输入提供给代码。您自己的drawRect:
实现也是如此。
然而,在AppKit的情况下,它有点抽象。在Mac OS X的最后几个版本中,Apple已经转而描述标准视图在XML文件中的外观。一个名为Core UI的框架通过遵循这些XML“recipes”来实现绘图;据推测,这最终会最终调用Quartz函数(尽管这仍然不一定意味着生成任何代码)。
John Siracusa talks in broad strokes about Core UI in his Leopard review.
HITheme和Appearance Manager现在可能以同样的方式调用Core UI,尽管他们只是绘制一个按钮(或其他)。这是唯一一种公开可用的方法,无需创建可以响应事件的实际按钮。
作为我研究的一部分,我需要证明Cocoa / Carbon框架的所有UI都使用了Quartz ......
otx可以帮助您:它可以让您反汇编框架以查看它们实际执行的操作。请注意,这样做违反了Mac OS X EULA。
......并且可以使用石英渲染所有这些。
是的。为了获得设计丰富的基于矢量的全局视图,可能需要做很多工作(在Quartz Debug中使用比例因子并观察矢量化控件的分离),但这是可能的。即使你打平并只绘制光栅图像,你仍然会使用Quartz来做到这一点。
然而,AppKit几乎肯定不会做的是使用Quartz直接绘制。那是HITheme(以及之前的外观经理)工作,现在是Core UI。我希望看到AppKit使用HITheme,HITheme使用Core UI,使用Core UI使用Quartz。