1

X 軸、Y 軸、またはその両方で反転させるために、NSView サブクラスでいくつかの単純な変換を実行したいと考えています。私は経験豊富な iOS 開発者ですが、macOS でこれを行う方法がわかりません。必要な変換とスケールを使用して NSAffineTransform を作成しましたが、これを実際に NSView に適用する方法を判断できません。あらゆる種類の変換を受け入れる唯一のプロパティは ですが[[NSView layer] transform]、これには CATransform3D が必要です。

私が持っていた唯一の成功は、 NSImageView の場合、lockFocus新しい空のを呼び出しNSImageて変換を作成し、ロックされた画像内に反転されていない画像を描画することにより、変換を使用して画像を反転することです。NSViewただし、サブビューを処理せず、変換を/に直接適用するよりもおそらくコストがかかるため、これは満足のいくものではありませんNSImageView

4

1 に答える 1

1

これが解決策でした:

- (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];
}

NSGraphicsContext の使用に関するヒントを提供してくれた l'L'l に感謝します。

于 2019-02-03T10:38:12.033 に答える