将NSAffineTransform应用于NSView

时间:2019-02-03 09:21:59

标签: macos cocoa affinetransform nsaffinetransform

我想对NSView子类进行几个简单的转换,以使其在X轴,Y轴或两者上翻转。我是一位经验丰富的iOS开发人员,但我不知道如何在macOS中执行此操作。我创建了具有所需平移和缩放比例的NSAffineTransform,但无法确定如何将其实际应用于NSView。我可以找到的唯一可以接受任何形式的转换的属性是<div class="container"> <div id="item2">2</div> <div id="item1">1</div> </div> <button onclick="change()">change</button>,但这需要CATransform3D。

我唯一获得的成功是使用变换来翻转图像(如果是NSImageView),方法是在新的空白[[NSView layer] transform]上调用lockFocus,创建变换,然后在内部绘制未翻转的图像锁定的图像。但是,这远远不能令人满意,因为它不处理任何子视图,并且可能比直接将转换应用于NSImage / NSView更为昂贵。

1 个答案:

答案 0 :(得分: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];
}

感谢您L'L'升有关使用获取到NSGraphicsContext提示。