【问题标题】:layer-backed NSViews overlapping / orderlayer-backed NSViews 重叠/顺序
【发布时间】:2015-02-17 16:25:38
【问题描述】:

我在界面构建器/自动布局的帮助下设置了两个 NSView(一个与 view1 重叠的工具栏),然后在 -(void)awakeFromNib 中调用

[self.view1 setWantsLayer:YES];
[self.toolbar setWantsLayer:YES]; 

使视图具有图层支持,以便稍后为它们设置动画。我发现如果我在 view1 上调用它之后在工具栏上调用 setWantsLayer,它会显示在 view1 上,而不关心界面构建器中的顺序。到目前为止,一切顺利。

我的问题是:我以后如何在代码中更改视图的顺序。调用

self.toolbar.zPosition = 0;
self.view1.zPosition = 1;

什么都不做。因为我对 CALayers 没那么自信: 有什么我想念的吗? 有没有一个很好的 CALayers 教程 - 我阅读了文档,但并不了解所有内容(层托管视图、子层的概念......)

编辑

为了更好地理解图像(我想为绿色视图的透明度设置动画,以便黑色工具栏在红色视图上方,绿色视图消失。然后返回绿色视图):

【问题讨论】:

    标签: macos cocoa calayer nsview


    【解决方案1】:

    您需要使用addSubview:positioned:relativeTo: 添加相对于第一个视图的第二个视图。层索引仅与父层中的层相关,与视图层次本身无关。

    例如,

    [hostingView addSubview:topView
            positioned:NSWindowAbove
            relativeTo:bottomView];
    

    【讨论】:

    • 感谢您的回复。我试图 addSubview:self.toolbar ...但我看不出有什么区别。不是说CALayer总是在NSViews前面可见吗?
    • 说真的,虽然这应该可以工作...如果您需要帮助,仍然可以添加一些细节、代码和图像。
    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2017-09-29
    • 2015-03-11
    相关资源
    最近更新 更多