2

我不明白如何在 Objective-C 中控制和操作 2D 图形。我不介意答案是否说明如何使用 Quartz 或只是 Cocoa。我现在有这个代码:

CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetRGBFillColor (myContext, 1, 0, 0, 1);
CGContextFillRect (myContext, CGRectMake (0, 0, 200, 100 ));
CGContextSetRGBFillColor (myContext, 0, 0, 1, .5);
CGContextFillRect (myContext, CGRectMake (0, 0, 100, 200));

我从 Apple 的 Quartz 2D graphics 教程中得到了这段代码,但是当我调用该方法时没有任何反应。我确定我只是在某处遗漏了一些代码。

我正在用 Xcode 开发一个带有 2D 图形的 OS X 应用程序,但 Mac 开发人员库中的教程不是很详细,除非我一直在阅读所有错误的教程。我对使用 Obj-C 绘图完全不熟悉,所以这看起来很基础。

如果需要任何其他信息,请在评论中询问。谢谢。

4

3 回答 3

1

您需要继承 NSView,将绘图代码放在方法 drawRect 中:将自定义视图放在 UI 中的某个位置,并将其连接到检​​查器中的子类。

Cocoa 绘图 APi开始。它更容易开始,你可以走得很远。

如果你在你的绘图代码中有一个你改变的属性,你在属性的设置器中写 [self setNeedsDisplay]。

于 2013-10-06T16:27:26.583 回答
0

您的应用程序应该有一个 IUView 实例。然后覆盖drawRect。例子:

- (void)drawRect:(CGRect)rect
{
    UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:
                           CGRectMake(0.0f, 0.0f, 150.0f, 100.0f)];
    [[UIColor blackColor] setStroke];
    CGContextRef aRef = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(aRef, 50.0f, 50.0f);
    aPath.lineWidth = 5.0f;
    [aPath stroke];
}

不要直接调用这个方法;采用

[self setNeedsDisplay].
于 2013-12-04T14:57:08.890 回答
0

您可以创建一个新类(NSView 的子类) - 在我的情况下为“绘图”(“@interface 绘图:NSView”)。在 ViewController (您的 NSWindow 被调用的地方)中,您可以调用该类:

#import "Drawing.h"
<...>
- (void)viewDidLoad {
    [super viewDidLoad];
    Drawing  *draw = [[Drawing  alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
    [self.view addSubview:draw];
<...>
}
于 2015-04-08T00:26:57.183 回答