Domanda

Attualmente sto usando il codice seguente per andare a prendere la posizione NSView logica di glifi, che sta lavorando bene ma sembra un po 'lento e le posizioni non sono proprio sul punto di carattere la crenatura e della linea di base. E 'molto ben potrebbe essere il caso che tutto ciò che devo fare è iterare i glifi stessi uno per uno e costruire il me stesso rect.

Questo codice (funzioni) ora, voglio solo vedere se può essere fatto in modo più efficiente e corretto.

// 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];
È stato utile?

Soluzione

Questo è il modo per farlo. Tuttavia, se è un lastRange characterRange come hai descritto, bisogna mettere attraverso

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

prima di ottenere risultati corretti. è anche necessario fare in modo di spiegare l'origine della textcontainer il testo viene layouted in e poi fare un

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

prima di disegnare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top