Применить NSAffineTransform к NSView - PullRequest
       37

Применить NSAffineTransform к NSView

0 голосов
/ 03 февраля 2019

Я хочу сделать пару простых преобразований в подклассе NSView, чтобы перевернуть его по оси X, оси Y или обоим.Я опытный разработчик iOS, но я просто не могу понять, как это сделать в macOS.Я создал NSAffineTransform с необходимыми переводами и масштабами, но не могу определить, как на самом деле применить это к NSView.Единственное свойство, которое я могу найти, которое может принять любое преобразование, это [[NSView layer] transform], но для этого требуется CATransform3D.

Единственный успех, который у меня был, - это использование преобразования, чтобы перевернуть изображение, если NSImageView, вызвавlockFocus на новом пустом NSImage, создавая преобразование, затем рисуя раскрученное изображение внутри заблокированного изображения.Однако это далеко не удовлетворительно, поскольку оно не обрабатывает никакие подпредставления и, по-видимому, более затратно, чем применение преобразования непосредственно к NSView / NSImageView.

1 Ответ

0 голосов
/ 03 февраля 2019

Это было решение:

- (void)setXScaleFactor:(CGFloat)xScaleFactor {
    _xScaleFactor = xScaleFactor;
    [self setNeedsDisplay];
}

- (void)setYScaleFactor:(CGFloat)yScaleFactor {
    _yScaleFactor = yScaleFactor;
    [self setNeedsDisplay];
}

- (void)drawRect:(NSRect)dirtyRect {
    NSAffineTransform *transform = [[NSAffineTransform alloc] init];
    [transform scaleXBy:self.xScaleFactor yBy:self.yScaleFactor];
    [transform set];

    [super drawRect:dirtyRect];
}

Спасибо l'L'l за подсказку об использовании NSGraphicsContext.

...