如何旋转NSTextView
|
我想要像Adobe Illustrator一样具有可旋转的文本编辑区域。我尝试了几种方法,包括对NSTextView进行子类化以及在绘制代码之前添加坐标系旋转,如下所示:
@implementation MyNSTextView
-(void)drawRect:(NSRect)dirtyRect
{
NSAffineTransform * trafo = [NSAffineTransform transform];
[trafo rotateByDegrees:45];
[trafo concat];
[super drawRect:dirtyRect];
}
-(void)drawInsertionPointInRect:(NSRect)rect color:(NSColor *)color turnedOn:(BOOL)flag
{
NSAffineTransform * trafo = [NSAffineTransform transform];
[trafo rotateByDegrees:45];
[trafo concat];
[super drawInsertionPointInRect:rect color:color turnedOn:flag];
}
这会导致文本显示损坏。我还尝试通过子类化NSView并以编程方式组装文本体系结构来自己实现该功能。我使用NSLayoutManager的drawGlyphsForRange:方法绘制字符串。这部分起作用,但变得复杂,因为我必须旋转图形的坐标并处理鼠标单击,我必须将鼠标位置转换回旧坐标。
那么这是最好的方法吗?还是还有其他方法?
编辑:我现在尝试使用CALayer这样的:
@implementation MyNSTextView
-(id)initWithFrame:(NSRect)frameRect
{
self = [super initWithFrame:frameRect];
if (self) {
CALayer *myLayer = [CALayer layer];
myLayer.transform = CATransform3DMakeRotation(1.6,1,0,1.0);
[self setLayer:myLayer];
[self setWantsLayer:YES];
}
return self;
}
但这会产生一个TextView,它不显示任何文本(仅显示光标)并且不会旋转。还有其他东西可以使它起作用吗?
没有找到相关结果
已邀请:
3 个回复
抽法
还有
,但这应该仅适用于层支持的视图(可以)。 我仍在调查自己的一个警告:旋转视图时,闪烁的文本光标变得很胖。
温拎凯玛
帆攀缺锯欧
,但没有将其附加到文本视图。