【问题标题】:How to convert NSView to CALayer?如何将 NSView 转换为 CALayer?
【发布时间】:2013-04-02 07:52:09
【问题描述】:

我做了一个视频播放器,图像在 NSView 中绘制。有什么方法可以将 NSView 转换为 CALayer?我尝试使用 layer-hosting view,但开发人员文档说 无法将任何子视图添加到图层托管视图。任何人都可以给我一些建议吗?此代码可以在 OSX 10.6.8 中运行,但在 OSX 10.7 和 10.8 中运行。

mDisplayView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, width, height)];
mDisplayLayer = [[CALayer layer] retain];

[mDisplayView setLayer:mDisplayAudioLayer];
[mDisplayView setWantsLayer:YES];
[mDisplayView addSubview:mContentView];
[mRootLayer addSublayer:mDisplayAudioLayer];

视频的图像已经绘制在mContentView上,我只需要想办法把mContentView变成CALayer,可以吗?

【问题讨论】:

    标签: objective-c cocoa core-animation calayer nsview


    【解决方案1】:

    您不会视图转换为图层 - 您可以通过覆盖 drawRect: 传统方式绘制到视图中,或者将其切换为支持图层的视图并使用 CoreAnimation。

    最好从这里开始了解所涉及的基本概念:

    Core Animation Programming Guide

    【讨论】:

    • 另一方面,如果提问者正在使用 AVPlayerLayer,他或她可能不应该将其添加为 layer-backed view 的 layer 的 sublayer,因为[y]ou should rarely, if ever, directly modify the layer that is attached to [a] layer-backed NSView”。在这种情况下,分层托管是正确的方法。 (但关于将视图“转换”为图层,您仍然是正确的。)
    • 是的。但我的印象是,OP 对如何使用视图和图层的基本概念并不完全清楚。在 OS X 上将 CA 固定在 AppKit 之上的方式可能并不奇怪。
    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多