Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 将NSAffiNetTransform应用于NSView_Macos_Cocoa_Affinetransform_Nsaffinetransform - Fatal编程技术网

Macos 将NSAffiNetTransform应用于NSView

Macos 将NSAffiNetTransform应用于NSView,macos,cocoa,affinetransform,nsaffinetransform,Macos,Cocoa,Affinetransform,Nsaffinetransform,我想在NSView子类上做几个简单的转换,在X轴、Y轴或两者上翻转它。我是一名经验丰富的iOS开发人员,但我就是不知道如何在macOS中做到这一点。我已经创建了一个NSAffinetTransform,具有所需的翻译和比例,但无法确定如何将其实际应用于NSView。我能找到的唯一可以接受任何类型转换的属性是[[NSView layer]transform],但这需要一个CATTransformM3D 我所取得的唯一成功是使用变换在NSImageView中翻转图像,方法是对新的空的NSImage调

我想在NSView子类上做几个简单的转换,在X轴、Y轴或两者上翻转它。我是一名经验丰富的iOS开发人员,但我就是不知道如何在macOS中做到这一点。我已经创建了一个NSAffinetTransform,具有所需的翻译和比例,但无法确定如何将其实际应用于NSView。我能找到的唯一可以接受任何类型转换的属性是
[[NSView layer]transform]
,但这需要一个CATTransformM3D

我所取得的唯一成功是使用变换在NSImageView中翻转图像,方法是对新的空的
NSImage
调用
lockFocus
,创建变换,然后在锁定的图像中绘制未折叠的图像。但是,这远远不能令人满意,因为它不处理任何子视图,并且可能比直接将转换应用于
NSView
/
NSImageView
成本更高。这就是解决方案:

- (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的提示。

使用可能会满足您的需要。谢谢l'l'l。这是否意味着在
drawRect
中进行翻转,检查确定是否应该翻转的属性,然后在更改这些属性时调用
setNeedsDisplay