Я хочу иметь вращаемую область редактирования текста, как в 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 и программно собрав текстовую архитектуру. Я рисую строку с помощью drawGlyphsForRange: метод моего NSLayoutManager. Это отчасти работает, но усложняется, потому что мне нужно повернуть координаты для чертежа и для обработки щелчков мыши, мне нужно преобразовать местоположение мыши обратно в старые координаты.
Так это лучший способ сделать это или есть что-то еще?
Редактировать: теперь я пытался использовать 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, который не показывает никакого текста (только курсор) и не поворачивается. Что-то еще, чтобы добавить это, чтобы это работало ??