Mit NSString ist drawAtPoint Methode statt CGContextShowGlyphsAtPoint Probleme
In meine app, die ich versuche zu Darstellung von text entlang eines Pfades; dies ist in Ordnung für die meisten Zeichen, aber nicht für Japanisch (oder was auch nicht-mac-Roman). Ich habe empfohlen, um [NSString drawAtPoint], die zeigt das richtige Zeichen in meinem CATiledLayer, aber Sie verschwinden nach etwa 5 Sekunden. In dieser Zeit habe ich einen zoom von der Ebene und Sie korrekt skaliert, aber Sie scheinen nicht zu erhalten, engagiert sich für die CATiledLayer wie der rest des Textes in der Regel ist.
Bevor ich Rendern, damit ich überprüfen Sie die Zeichenfolge, und entscheiden Sie, ob Sie nicht renderable. Wenn ich dabei bin, haben Probleme, ich benutze drawAtpoint statt:
if (!isFullyDisplayable)
{
CGContextShowGlyphsAtPoint(context, pt.x, pt.y, realGlyph, 1);
}
else {
//fall back on less flexible font rendering for difficult characters
NSString *b = [gv text];
NSString *c = [b substringWithRange:NSMakeRange(j,1)];
[c drawAtPoint:pt withFont:[UIFont fontWithName:@"Helvetica-Bold" size:16.0]];
}
Hat jemand irgendwelche Hinweise, warum der text verschwindet?
Sobald die drawAtPoint ist meine debug-Ausgabe wird überflutet mit:
<Error>: CGContextGetShouldSmoothFonts: invalid context
<Error>: CGContextSetFont: invalid context
<Error>: CGContextSetTextMatrix: invalid context
<Error>: CGContextSetFontSize: invalid context
<Error>: CGContextSetTextPosition: invalid context
<Error>: CGContextShowGlyphsWithAdvances: invalid context
Also ich vermute, es ist etwas zu tun mit meinem context-management, aber ich hatte angenommen, dass wenn das im selben Ort wie ich CGContextShowGlyphsAtPoint sollte es den richtigen Kontext bereits?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantwortung meiner eigenen Frage:
NSString drawAtPoint:withFont: macht Gebrauch von der Kontext-Stapel, von wo ich war, hat der Aufruf dieser Methode der stack leer war. Wickeln Sie den Anruf mit
war der trick.
Vollständigkeit halber, hier ist der code, der benötigt wird für Kakao. Funktioniert auch mit
.drawInRect
...Dies ist meist nicht nötig, da @davbryn sagt, als normal es ist schon ein "Arbeits" Kontext auf den stack, dass ist das gleiche (Sie Hoffnung!) wie Ihr Kontext jedoch, wie er betont, manchmal gibt es nicht. Ich entdeckte dieses problem vor allem mit MapKit
MKOverlayRenderer
'sdrawMapRect:
, die einfach nicht zeigen, den text ohne den Zusammenhang explizit.