NSView的CALayer可以成为其他视图的子层吗?

时间:2013-07-06 01:57:03

标签: cocoa calayer

以下代码似乎不起作用。

WebView *wView = [[WebView alloc] init];
[[wView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]] ];
[wView setWantsLayer:YES];
NSView *v = [[NSView alloc] init];
v.frame = CGRectMake(0, 0, 100, 100);
[v setLayer:wView.layer];
[v setWantsLayer:YES];

我想要的是使用其他视图的图层,例如NSTextField的图层或Webview的图层,作为其他视图的子图层

这可以吗?

1 个答案:

答案 0 :(得分:1)

在您的示例中,WebView 图层支持NSView 图层托管。这意味着从Web视图的角度来看,它拥有该层,并且不希望任何东西直接与它交互。从视图的角度来看,相同图层可以直接操作。

Apple关于此的文档非常清楚,

<强>层支持的

  

使用图层支持的视图时,不应直接与图层进行交互。相反,您必须使用标准视图编程实践。

<强>层托管

  

使用图层托管视图时,不应依赖视图进行绘制,也不应将子视图添加到图层托管视图。

通过采用这种混合方案,您可能会因为与指南冲突而陷入困境!我会尝试另一种解决问题的方法。