你如何翻转NSView的坐标系?

时间:2009-04-18 18:04:08

标签: objective-c cocoa

我在界面构建器中创建了一个NSScrollView,它具有可变数量的半唯一NSView,可以通过编程方式添加和删除它。当我将subViews添加到documentView时,它们出现在左下角而不是左上角。我看到你可以检查isFlipped bool来判断视图的坐标系是否被翻转,但我找不到将其设置为翻转的方法。

任何人都知道我缺少什么?

4 个答案:

答案 0 :(得分:46)

NSView子类中,覆盖isFlipped

  

isFlipped

     

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

     

声明

var isFlipped: Bool { get }
     

讨论

     

此属性的默认值为false,这会导致非翻转坐标系。

     

[...]

     

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

来源:isFlipped - NSView | Apple Developer Documentation

答案 1 :(得分:24)

对于任何希望在Swift中执行此操作的人,您可以在自定义类中覆盖:

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

答案 2 :(得分:4)

这个想法是每个单独的视图都有自己的绘制方式(例如,使用人工计算的路径)如果你突然翻转它的坐标平面可能会变得非常不稳定(光栅可能很好,而路径可能会上升 - 下来,计算可能会把东西放在屏幕外等等。所以它不可设置,但是子类可以指定isFlipped因为它们应该知道如何绘制视图。

子类也可以使其可设置,但是他们必须随时改变它。

至于代码, Swift 3 中的Jay's answer

class FlippedView: NSView {
    override var isFlipped: Bool { return true }
}

答案 3 :(得分:0)

Carl Carlson asked起,这是Objective-C中的Jay's answer

标题(Sass

.h

实施(@interface XYZFlippedView: NSView - (BOOL) isFlipped; @end

.m