Frage

Ich bin derzeit mit dem folgenden Code die logische NSView Position von Glyphen zu holen, die feinen aber arbeitet es scheint ein bisschen langsam und die Positionen sind nicht genau auf den Charakter Kerning Punkt und den Ausgangswerten. Es kann sehr wohl der Fall sein, dass alles, was ich tun müssen, um die Glyphen sich eine nach der anderen durchlaufen und die rect selbst bauen.

Dieser Code (Funktionen) jetzt, wollen einfach nur, um zu sehen, ob es effiziente oder richtig gemacht werden kann.

// lastRange is any valid, bounds checked character range in an NSTextView


NSLayoutManager *layoutManager = [self layoutManager];
NSRect paragraphRect = [layoutManager boundingRectForGlyphRange:lastRange inTextContainer:[self textContainer]];

// Draw a gradient around the range.
NSGradient * gradient = [self indicatorGradient];
CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetBlendMode(myContext , kCGBlendModeMultiply);
[gradient drawInRect:paragraphRect angle:90];
War es hilfreich?

Lösung

Dies ist der Weg, es zu tun. Allerdings, wenn lastRange ein characterRange ist, wie Sie beschrieben, müssen Sie es durch

put
lastRange = [layoutManager glyphRangeForCharacterRange:lastRange actualRange:NULL];

erster korrekte Ergebnisse zu erhalten. Sie müssen auch für den Ursprung des textcontainer berücksichtigen sicherzustellen, dass der Text in und dann layoutet wird tun a

NSPoint containerOrigin = [[container textView] textContainerOrigin];
paragraphRect = NSOffsetRect(paragraphRect,containerOrigin.x,containerOrigin.y);

vor dem Zeichnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top