gpt4 book ai didi

objective-c - 如何旋转 NSTextView

转载 作者:行者123 更新时间:2023-12-03 17:16:06 26 4
gpt4 key购买 nike

我想要像 Adob​​e 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,它不显示任何文本(仅显示光标)并且不旋转。还需要添加其他东西才能使其正常工作吗?

最佳答案

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

[myView setFrameRotation:angleInDegrees];

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

有一个警告我仍在研究:当 View 旋转时,闪烁的文本光标变得非常粗。

关于objective-c - 如何旋转 NSTextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com