如何旋转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,它不显示任何文本(仅显示光标)并且不会旋转。还有其他东西可以使它起作用吗?     
已邀请:
        您使它变得太复杂了。只需在视图本身上设置旋转:
[myView setFrameRotation:angleInDegrees];
还有
setFrameCenterRotation
,但这应该仅适用于层支持的视图(可以)。 我仍在调查自己的一个警告:旋转视图时,闪烁的文本光标变得很胖。     
        为什么不使视图成为分层支持?然后,您可以将仿射变换应用于视图的图层。
yourView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1.0);
    
        问题是您正在创建
NSAffineTransform
,但没有将其附加到文本视图。     

要回复问题请先登录注册