NSRect与CoreGraphics

时间:2013-03-19 11:57:06

标签: objective-c core-graphics nsrect

我有一个关于在NSView中绘制非常简单形状的一般问题。是否有“规则”何时使用NSRect 结构(drawrect)与使用CoreGraphics框架? 到目前为止我所理解的是我可以使用其中一个用于我的osx应用程序。我可以吗?

1 个答案:

答案 0 :(得分:2)

首先,没有NSRect (它是一个结构),您指的是NSView方法drawRect:。一般来说,Core Graphics框架比AppKit绘图方法“低级”,它们通常只是Core Graphics的“包装”。它也是普通的C而不是Objective-C,所以AppKit通常更容易使用,但你可以在两者之间自由混合搭配。

例如:

- (void)drawRect:(NSRect)rect
{
    //This uses AppKit:
    [[NSColor redColor] set];
    [[NSBezierPath bezierPathWithOvalInRect:[self bounds]] fill];

    //This does the same, using Core Graphics:
    CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort];
    CGContextSetRGBFillColor(ctx, 1.0, 0.0, 0.0, 1.0);
    CGContextFillEllipseInRect(ctx, NSRectToCGRect([self bounds]));
}