NSView的绘图上下文

win*_*nck 6 macos cocoa core-graphics objective-c quartz-2d

获取NSView的CGContext -drawRect:并使用它以后执行更多绘图是否安全?在像这样的简单测试中:

CGContextRef context = NULL;

- (void)drawRect:(NSRect)r
{
    if (!context)
        context = [[NSGraphicsContext currentContext] graphicsPort];
}

- (void)drawSomething
{
    CGContextSetRGBFillColor(context, 1, 0, 0, 1);
    CGContextFillRect(context, CGRectMake (0, 0, 100, 100));
    CGContextFlush(context);
}
Run Code Online (Sandbox Code Playgroud)

-drawSomething调用时似乎一切正常,但它是否保证上下文不会改变?

你可以看到并猜测,我试图绕过标准的绘图方式-drawRect:.它适用于无数场合,但是在我的特定情况下,更加程序化的绘图方式会让生活变得更轻松.

Rob*_*ger 7

你不应该这样做.上下文不保证存在于外部,drawRect:并且您的绘图代码工作的事实是一个快乐的事故.不要依赖这种行为.

如果你需要在任何时候强制绘图,你应该调用display视图,然后调用它drawRect:.