Quartz代码创建一个按钮?

时间:2011-06-17 10:55:48

标签: cocoa macos core-graphics quartz-graphics

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)

非常感谢任何帮助。

谢谢。

1 个答案:

答案 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。

相关问题