【发布时间】:2012-06-22 10:06:10
【问题描述】:
我需要使用 CALayer 覆盖在NSTextView 中突出显示带有插入符号的行,并在我的子类NSTextView 中获取与此代码一致的矩形...:
- (NSRect)overlayRectForRange:(NSRange)aRange
{
NSScreen *currentScreen = [NSScreen currentScreenForMouseLocation];
NSRect rect = [self firstRectForCharacterRange:aRange];
rect = [self convertRectToLayer:rect];
rect.origin = [currentScreen flipPoint:rect.origin];
rect = [self.window convertRectToScreen:rect];
return rect;
}
...并放置叠加层:
- (void)focusOnLine
{
NSInteger caretLocation = [aTextView selectedRange].location;
NSRange neededRange;
(void)[layoutMgr lineFragmentRectForGlyphAtIndex:caretLocation effectiveRange:&neededRange];
CALayer *aLayer = [CALayer layer];
[aLayer setFrame:NSRectToCGRect([aTextView overlayRectForRange:neededRange])];
[aLayer setBackgroundColor:[[NSColor redColor] coreGraphicsColorWithAlfa:0.5]];
[[aTextView layer] addSublayer:aLayer];
}
因此,选择覆盖与所需线条的宽度一致,但绝对不匹配 Y 轴(X 轴可以)。
我错过了什么?
【问题讨论】:
标签: cocoa calayer nstextview