문제

나는 현재 다음 코드를 사용하여 글리프의 논리적 NSView 위치를 가져 오는 것으로 잘 작동하지만 약간 느리게 보이며 위치는 캐릭터 Kerning Point와 기준선에 정확하게는 아닙니다. 내가해야 할 일은 글리프 자체를 하나씩 반복하고 직접 직접 구축하는 것입니다.

이 코드 (함수)는 이제 더 효율적으로 또는 올바르게 수행 할 수 있는지 확인하고 싶습니다.

// 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];
도움이 되었습니까?

해결책

이것이하는 방법입니다. 그러나 Lastrange가 설명한대로 캐릭터 레인지 인 경우

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

먼저 올바른 결과를 얻습니다. 또한 TextContainer의 원점을 설명해야합니다. 텍스트가 레이아웃 된 다음

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

그리기 전에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top