Question

Je suis actuellement en utilisant le code suivant pour aller chercher la position de NSView logique de glyphes fonctionne bien mais il semble un peu lent et les positions ne sont pas précisément sur le point de crénage de caractère et de référence. Il peut très bien être le cas que tout ce que je dois faire itérer les Glyphes eux-mêmes, un par un et de construire moi-même rect.

Ce code (fonctions) maintenant, je veux juste voir si cela peut se faire de manière plus efficace ou bien.

// 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];
Était-ce utile?

La solution

Ceci est la façon de le faire. Toutefois, si lastRange est un Characterrange que vous avez décrit, vous devez le mettre dans

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

premier à obtenir des résultats corrects. vous devez également vous assurer de rendre compte de l'origine du textcontainer le texte est layouted et puis faire un

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

avant de tirer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top