Mac OS X: Rysowanie na ekranie NSGraphicsContext przy użyciu funkcji CGContextRef C nie działa. Czemu?

Mac OS X 10.7.4

Rysuję w pozaekranowym kontekście graficznym utworzonym przez+[NSGraphicsContext graphicsContextWithBitmapImageRep:].

Kiedy rysuję w tym kontekście graficznym za pomocąNSBezierPath klasa, wszystko działa zgodnie z oczekiwaniami.

Jednak gdy wciągam do tego kontekstu graficznego za pomocąCGContextRef Funkcje C, Nie widzę żadnych wyników mojego rysunku. Nic nie działa.

Z powodów, w które nie wejdę, naprawdę muszę rysować za pomocąCGContextRef funkcje (a nie kakaoNSBezierPath klasa).

Mój przykładowy kod jest wymieniony poniżej. Próbuję narysować prosty „X”. Jeden skok za pomocąNSBezierPath, jeden skok za pomocąCGContextRef Funkcje C. Pierwsze uderzenie działa, drugie nie. Co ja robię źle?

NSRect imgRect = NSMakeRect(0.0, 0.0, 100.0, 100.0);
NSSize imgSize = imgRect.size;

NSBitmapImageRep *offscreenRep = [[[NSBitmapImageRep alloc]
   initWithBitmapDataPlanes:NULL
   pixelsWide:imgSize.width
   pixelsHigh:imgSize.height
   bitsPerSample:8
   samplesPerPixel:4
   hasAlpha:YES
   isPlanar:NO
   colorSpaceName:NSDeviceRGBColorSpace
   bitmapFormat:NSAlphaFirstBitmapFormat
   bytesPerRow:0
   bitsPerPixel:0] autorelease];

// set offscreen context
NSGraphicsContext *g = [NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep];
[NSGraphicsContext setCurrentContext:g];

NSImage *img = [[[NSImage alloc] initWithSize:imgSize] autorelease];

CGContextRef ctx = [g graphicsPort];

// lock and draw
[img lockFocus];

// draw first stroke with Cocoa. this works!
NSPoint p1 = NSMakePoint(NSMaxX(imgRect), NSMinY(imgRect));
NSPoint p2 = NSMakePoint(NSMinX(imgRect), NSMaxY(imgRect));
[NSBezierPath strokeLineFromPoint:p1 toPoint:p2];

// draw second stroke with Core Graphics. This doesn't work!
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 0.0, 0.0);
CGContextAddLineToPoint(ctx, imgSize.width, imgSize.height);
CGContextClosePath(ctx);
CGContextStrokePath(ctx);

[img unlockFocus];

questionAnswers(4)

yourAnswerToTheQuestion