macos - Cocoa 中的同级 NSView z 排序

标签 macos cocoa core-graphics quartz-graphics

z 排序如何与 Cocoa 中的兄弟 NSView 一起工作?我很困惑,因为我在 Apple 的文档和 API 中发现了相互冲突的信息来源。 (注意: subview 显然是在其父 View 之上呈现的,我在这里明确谈论同级 View )。

假设 A:“是的,您可以定义同级 NSViews 的 z 顺序”

  • IB 中,您可以将 View 放置在彼此之上,它们将始终按照您期望的方式组合。
  • Xcode 中的 Editor 菜单下有一些名为“Send to Back”、“Send Forward”等的按钮。
  • NSView 还有一个名为 - (void)addSubview:(NSView *)aView located:(NSWindowOrderingMode)placerelativeTo:(NSView *)otherView; 的方法似乎暗示有一个明确定义的顺序。

假设 B:“不可能,同级 NSViews 的 z 顺序在运行时未定义。有时有效,有时无效。Don'不要相信它!”

  • Apple 文档 ( View Programming guide ) 声明: 出于性能原因,Cocoa 不会强制在同级 View 之间进行裁剪,也不会在同级 View 重叠时保证正确的失效和绘制行为。如果您希望一个 View 绘制在另一个 View 的前面,则应该使前 View 成为后 View 的 subview (或后代)。

那么它是哪一个呢?

最佳答案

是的,NSView 兄弟可以重叠,Apple 文档已过时:Are layer-backed NSView siblings allowed to overlap?

此外,z 顺序取决于父 View 的 subviews 数组中 subview 的顺序。

关于macos - Cocoa 中的同级 NSView z 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14750393/

相关文章:

c++ - 用于 Mac 的 Eclipse C++ GDB 调试器

macos - 带有 ICU 补丁的 Mac OS X 上的 Postgresql

ios - 在模拟器上运行 Xcode 代码 201 错误

objective-c - 打开一个新窗口并等待它关闭

cocoa-touch - Cocoa Touch - 使用叠加 View 添加纹理

cocoa - 如何判断Mac Cocoa应用程序是否已正常启动或作为登录项启动?

xcode - Mac os x/usr/bin/gcc 文件

cocoa - 应用沙箱 : renaming a file doesn't work

iphone - CoreGraphics 线似乎改变了大小?

cocoa - Mac OS X Window Server 与 X11 : the insane task