2017-01-23 5 views
1

Ausgehend von Sierra ist eine pdf drawWithBox:toContext: Operation verfügbar. Aber in früheren OS-Versionen ist dies nicht vorhanden. Wenn es einen grafischen Kontext gibt, funktionierte der Vorgänger drawWithBox: gut, wo auch immer ein Kontext vorhanden ist (z. B. in drawRect:). Aber wenn Sie keinen solchen Kontext haben, sehe ich keinen Weg, drawWithBox: zu verwenden (außer für einen zufälligen Kontext, der "möglicherweise" vorhanden ist). Ich versuchte dies:Draw PDFPage ohne aktuellen Kontext

_contextRef = 
    CGBitmapContextCreate(_cvMat.data, ... 

... 

if (v12) { 
    [page drawWithBox:kPDFDisplayBoxBleedBox toContext:cgContext]; 
} else { 
    [NSGraphicsContext setCurrentContext:(__bridge NSGraphicsContext * _Nullable)(cgContext)]; 
    [page drawWithBox:kPDFDisplayBoxBleedBox]; 
} 

aber das abgeladen nur

- [__ NSCFType graphicsPort]: Unbekannter Selektor an Instanz gesendet 0x7f8de1e219a0

das ist keine Fehlermeldung aufgetreten (oder gefragte) sehr oft.

+0

Mögliche Duplikate von [Mac OS X: Das Zeichnen in einem NSCRAPHICSContext außerhalb des Bildschirms mit CGContextRef C-Funktionen hat keine Auswirkungen. Warum?] (Http://stackoverflow.com/questions/10627557/mac-os-x-drawing-into-an-offscreen-nsgraphicscontext-using-cgcontexref-c-funct) - Definitiv ist dies ein Duplikat :-) –

Antwort

0

Das Problem, das Sie haben, ist, dass CGContextRef und NSGraphicsContext nicht dasselbe sind. Sie rufen +[NSGraphicsContext setCurrent:] mit einem CGContextRef, wenn es eine NSGraphicsContext Instanz erwartet.

Die gute Nachricht ist, dass Sie eine NSGraphicsContext von einem CGContext ganz einfach erstellen können:

CGContextRef cgContext; 
NSGraphicsContext *newContext = [[NSGraphicsContext alloc] initWithCGContext:cgContext flipped:NO]; 
[NSGraphicsContext setCurrent: newContext]; 

Sehen, ob das können Sie Ihre PDF ziehen, wo Sie erwarten.

+0

Woher hast du diesen Initialisierer? Meine NSGraphicsContext.h hat keine CGContext-bezogene Methode und der Compiler krächzt daher: _Nicht sichtbar @interface für 'NSGraphicsContext' deklariert den Selektor 'initWithCGContext: geflippt:' _ –

+0

Wie auch immer, Sie führen mich in die richtige Richtung und ich fand http : //stackoverflow.com/questions/10627557/mac-os-x-drawing-into-an-offscreen-nsgraphicscontext-using-cgcontextref-c-funct was mein Problem gelöst hat. –

Verwandte Themen