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
Objective c 如何翻转NSView的坐标系?_Objective C_Cocoa - Fatal编程技术网

Objective c 如何翻转NSView的坐标系?

Objective c 如何翻转NSView的坐标系?,objective-c,cocoa,Objective C,Cocoa,我在interface builder中创建了一个NSScrollView,它具有数量可变的半唯一NSView,可以通过编程方式添加和删除这些NSView。将子视图添加到documentView时,它们会显示在左下角,而不是左上角。我看到您可以检查isFlipped bool以确定视图的坐标系是否翻转,但我找不到将其设置为翻转的方法 有人知道我遗漏了什么吗?在您的NSView子类中,覆盖已翻转: 我翻了 一个布尔值,指示视图是否使用翻转的坐标系 宣言 讨论 此属性的默认值为false,这将导致坐

我在interface builder中创建了一个NSScrollView,它具有数量可变的半唯一NSView,可以通过编程方式添加和删除这些NSView。将子视图添加到documentView时,它们会显示在左下角,而不是左上角。我看到您可以检查isFlipped bool以确定视图的坐标系是否翻转,但我找不到将其设置为翻转的方法


有人知道我遗漏了什么吗?

在您的
NSView
子类中,覆盖
已翻转

我翻了 一个布尔值,指示视图是否使用翻转的坐标系

宣言 讨论 此属性的默认值为
false
,这将导致坐标系不翻转

[……]

如果希望视图使用翻转坐标系,请重写此属性并返回
true


来源:

对于希望在Swift中执行此操作的任何人,以下是如何在自定义类中重写:

class FlippedView: NSView {
    override var flipped:Bool {
        get {
            return true
        }
    }
}

其思想是,每个单独的视图都有自己的绘制方式(例如,使用人工计算的路径),如果您突然翻转其坐标平面,这可能会变得非常不稳定(光栅可能会很好,而路径可能会颠倒绘制,计算可能会将东西从屏幕上移开,等等)。所以它是不可设置的,但是子类可以指定
isfliped
,因为它们应该明确知道视图是如何绘制的

子类也可以使其可设置,但它们必须期望它随时更改

至于代码,这里是Swift 5中的:

打开类FlippedView:NSView{
覆盖变量isFlipped:Bool{true}
}
因为,在Objective-C中:

标题(
.h
@接口XYZFlippedView:NSView
-(BOOL)已翻转;
@结束
实现(
.m

没有子类化你能做什么?这似乎很明显,在界面生成器中应该有一种方法可以做到这一点,而不必求助于子类化。我在IB中没有看到任何设置此项的属性。至于没有子类化的方法,它是一个只读属性,因此子分类是最好的选择。@yukas的想法是,每个单独的视图都有自己的绘制方式(例如,使用人工计算的向量),如果您突然翻转其坐标平面(光栅可能很好,而路径可能颠倒绘制),这可能会变得非常不稳定。因此,它是不可设置的,但子类可以指定
isfliped
,因为它们知道视图是如何绘制的。对于我们这些有点慢的人,您能在.h和.m文件的截断示例中详细说明这一点吗?@carlson正是这样做的
class FlippedView: NSView {
    override var flipped:Bool {
        get {
            return true
        }
    }
}
@implementation XYZFlippedView

- (BOOL) isFlipped
{
    return YES;
}

@end