为三层支持的NSView兄弟姐妹允许重叠?(Are layer-backed NSView sibl

2019-06-24 17:20发布

我有点困惑。 在苹果文档的状态如下:

注:由于性能原因,可可并不强制裁剪同级视图之间或保证正确的失效和图纸的行为,当兄弟的意见重叠。 如果你想以另一种意见认为前绘制,您应该正视图后视图的一个子视图(或后代)。

所以根据这个,兄弟的观点不应重叠,否则行为是不确定的。

在可可幻灯片演示应用程序 ,但是,层支持的NSView兄弟姐妹确实重叠 ,它似乎只是很好地工作:

所以是可可幻灯片示例代码错误的,这只是一个巧合,它的工作原理,或者是文档已经过时? 掉,因为10.5日期的,那是什么?

Answer 1:

重叠观点做工精细,支持层与否,在Leopard及更高版本。



Answer 2:

经过一番研究,看来苹果的文档的确是过时的。

层支持的NSView兄弟姐妹被允许,因为10.5重叠。

这从2009年的讨论 ,涉及到苹果的工程师大卫·邓肯和科尔宾邓恩终于提供了一些明确的答案:

重叠的意见豹工作,但在此之前不工作。 该文档是过时的。

我有一组视图,每一个与内部许多较小的视图,这就需要以重叠的方式在窗口上的相同的矩形被呈现,以使它们能够相互看到。 在我的初步测试,我做了各大查看单个后台视图的兄弟姐妹。 正打算把每个人的面前,必要时通过重新排列Z顺序。 是否有任何未来的(或存在)在此appoach?

这将在Leopard工作。

来源: http://www.cocoabuilder.com/archive/cocoa/228191-nsview-behaves-different-on-10-4-vs-10-5.html#228983

更新 詹姆斯·登普西也说在Twitter上 :

我的理解是重叠的兄弟意见为10.5,层支持或不正常。



Answer 3:

层支持的观点是由OpenGL的层次(当然,Quartz的合成,但它有助于觉得每一层与上一个OpenGL纹理多边形),所以他们一直支持正确的重叠。

在CocoaBuilder /可可开发线程完全不提层。 这意味着它谈论定期NSViews没有后盾的CALayer(或者更确切地说,只有一个CALayer的整个窗口)。

提到的一个例外是OpenGLView(再次,无层),它总是合成其的OpenGL矩形窗口的顶部,擦掉任何子视图。 我不认为做一个NSOpenGLView层支持的作品,而是一个OpenGL层可以用来代替,这将正确其他层之间进行合成。

另一个例外是对非层背视图顶部,这是有意义的层,因为所有的非层支持的观点有效地居住的单层,这当然是下面任何其子层(该层支持的观点托管在非层支持的父视图将必须是)。

因此,在短期,它自10.5非分层作品,并因为永远的层支持的意见,当你混合和匹配或使用OpenGL警告。

PS - 我不是100%确定重叠非层支持的观点的声明应被视为经典,虽然。 这是由Apple工程师作了非正式发言。 事情可能已经改变和错误可能已经发现,使事情不工作。 我一般使用层时,我想正确的重叠。



Answer 4:

这可能是有用的人:我有一个问题与闪烁重叠在Mac OS 10.7+非分层子视图。 在我的应用程序,使用的意见,使有关所选图形对象(选择框,缩放控制点等)的一些信息,让他们有一些动画 -这是他们在我的案件的关键。

这似乎是重叠的兄弟姐妹真的能正常工作,即使没有层,但在简单的情况。 我有一大堆的动画视图,每个都有它自己的定时器 - 它弹。 我已经发现两种解决方案:无论是在转动或同步动画 ,切换到单个共享计时器和更新在同一时刻所有视图。

至少这招帮我的应用程序,因为我不想使用的图层。



Answer 5:

的NSView兄弟姐妹通常允许重叠。 可能你打不过的一件事是NSScrollView如何工作的默认。 当你有兄弟姐妹通过意见的东西打破重叠的香草NSScrollView。

这是因为NSClipView的,只有吸取了在和复印件并没有改变的东西滚动视图的一部分。 当你有兄弟姐妹重叠滚动视图意见这种优化无法正常工作和观点似乎滚动,即使他们只是兄妹。

为了让重叠的兄弟的意见,甚至上班的时候都不会层支持的,因此,你必须禁用此优化:

[scrollView.contentView setCopiesOnScroll:NO];


文章来源: Are layer-backed NSView siblings allowed to overlap?