首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何旋转NSTextView

如何旋转NSTextView
EN

Stack Overflow用户
提问于 2011-06-14 19:43:03
回答 3查看 1.3K关注 0票数 1

我想有像Adobe Illustrator一样的可旋转的文本编辑区域。我尝试了几种方法,包括子类化NSTextView和在绘制代码之前添加坐标系旋转,如下所示:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@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。还有没有其他东西可以让它正常工作??

EN

回答 3

Stack Overflow用户

发布于 2012-06-13 16:22:39

你把事情搞得太复杂了。只需在视图本身上设置旋转:

代码语言:javascript
复制
[myView setFrameRotation:angleInDegrees];

也有setFrameCenterRotation,但它应该只适用于支持层的视图(这是可以的)。

有一个警告,我自己还在调查:当视图旋转时,闪烁的文本光标变得非常胖。

票数 1
EN

Stack Overflow用户

发布于 2011-06-15 11:50:51

为什么不让视图分层呢?然后,您可以只将仿射变换应用于视图的图层。

代码语言:javascript
复制
yourView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1.0);
票数 0
EN

Stack Overflow用户

发布于 2011-06-15 11:53:25

问题是您正在创建一个NSAffineTransform,但是没有将它附加到您的文本视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6342937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档