【发布时间】:2013-02-07 11:47:19
【问题描述】:
z-ordering 如何与 Cocoa 中的兄弟 NSView 一起工作?我很困惑,因为我在 Apple 的文档和 API 中发现了相互矛盾的信息来源。 (注意:子视图显然是在其父视图之上呈现的,我在这里明确谈论的是兄弟视图)。
假设A:“是的,你可以定义兄弟NSViews的z-order”
- 在
IB中,您可以将视图置于彼此之上,它们将始终以您期望的方式组合。 - 在 Xcode 中的
Editor菜单下有名为“Send to Back”、“Send Forward”等的按钮。 -
NSView也有一个名为- (void)addSubview:(NSView *)aView positioned:(NSWindowOrderingMode)place relativeTo:(NSView *)otherView;的方法,这似乎暗示有一个明确定义的排序。
假设 B:“不可能,兄弟 NSViews 的 z 顺序在运行时未定义。有时有效,有时无效。不要相信它!”
- Apple 的文档 (View Programming guide) 状态:
For performance reasons, Cocoa does not enforce clipping among sibling views or guarantee correct invalidation and drawing behavior when sibling views overlap. If you want a view to be drawn in front of another view, you should make the front view a subview (or descendant) of the rear view.
那是哪一个?
【问题讨论】:
标签: macos cocoa core-graphics quartz-graphics