Objective c NSView&x27;s的绘图上下文
从Objective c NSView&x27;s的绘图上下文,objective-c,macos,cocoa,core-graphics,quartz-2d,Objective C,Macos,Cocoa,Core Graphics,Quartz 2d,从-drawRect:获取NSView的CGContext并在以后执行更多绘图是否安全?在这样一个简单的测试中: CGContextRef context = NULL; - (void)drawRect:(NSRect)r { if (!context) context = [[NSGraphicsContext currentContext] graphicsPort]; } - (void)drawSomething { CGContextSetRGBF
-drawRect:
获取NSView的CGContext并在以后执行更多绘图是否安全?在这样一个简单的测试中:
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);
}
调用-drawSomething
时,一切似乎都正常,但是否保证上下文不会更改
正如您所看到的和可能猜到的,我正在尝试使用
-drawRect:
绕过标准的绘图方式。它在很多场合都能很好地工作,但在我的特殊情况下,一种更加程序化的绘图方式会使生活更轻松。你不应该这样做。不能保证上下文存在于drawRect:
之外,而且您的绘图代码正在工作这一事实是一个令人高兴的意外。不要依赖这种行为
如果需要在任意点强制绘图,应在视图上调用
display
,该视图将依次调用drawRect:
如果要在drawRect:
外部绘图,则需要使用lockFocus:
以下是以下文件的摘录:
如果你不使用显示器。。。方法来绘制NSView对象,您可以
必须在调用将命令发送到的方法之前调用lockFocus
窗口服务器,并且必须使用unlockFocus消息来平衡它
完成后
隐藏或缩小一次性窗口会导致备份存储
这个窗口将被释放。如果不使用标准显示器
绘制时,应使用lockFocusIfCanDraw而不是
锁定焦点,如果在窗口处于
小型化或隐藏的
当您第一次处理NSGraphicsContext时,很难理解这一点。谢谢你的回答,并向许多人指出这一点!