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