【问题标题】:Displaying CAEAGLLayer in a UIView or CALayer在 UIView 或 CALayer 中显示 CAEAGLLayer
【发布时间】:2010-09-16 12:46:03
【问题描述】:

尝试让 OpenGL ES 在 iPhone 上运行相当新,但我已经从 OpenGL 模板创建了一个工作演示,并希望将其添加到另一个应用程序,它是一个标准的 UIViewController 应用程序。在四处搜索之后,我似乎无法将 CAEAGLLayer 添加到 CALayer aka UIView 中。我该怎么做呢?还是我在做的事情完全错了。

为任何帮助干杯

【问题讨论】:

    标签: iphone uiviewcontroller opengl-es calayer


    【解决方案1】:

    只需使用 UIView 并添加:

    + (Class)layerClass {
        return [CAEAGLLayer class];
    }
    

    那个 UIView 现在是一个 CAEAGLLayer,所以你可以像往常一样将该视图添加为另一个 UIView 的子视图。

    【讨论】:

    • 这应该是公认的答案。迅速它是:覆盖类 var layerClass: AnyClass { get { return CAEAGLLayer.self } }
    【解决方案2】:

    我实际上要做的是将 EAGLView -initWithCoder 更改为 -initWithFrame 并对处理帧的方法进行适当的更改。一旦我这样做并使用 initWithFrame 初始化视图,它就可以工作了。

    【讨论】:

    • 我也面临同样的问题。已经尝试修复它几个小时了。您能否详细说明您最终是如何解决此问题的?谢谢
    • 这是很久以前的事了,所以我真的在推动它,但我最初是让 EAGLView 自定义类实现 -initWithCoder 方法。相反,我实现了 -initWithFrame,完成了该方法中所需的所有初始化,并在初始化时调用了它。简而言之,实现 -initWithFrame 而不是 -initWithCoder 方法。
    • 好吧,我将代码从 initWithCoder 移动到我的 viewDidLoad,删除了 initwithcoder(),并且 ofcoz 将 self.layer 之类的内容更改为 self.view.layer。但我现在面临的问题是 NSStringFromClass([[self.view.layer] class]) 正在返回一个 CALayer。 + (Class)layerClass 没有被调用,因为我使用的是 UIViewController 而不是 UIView。因此,我收到错误:[CALayer setDrawableProperties:]: unrecognized selector。我相信我只需要通过这个并且我完成了吗?谢谢
    • 嗯,不要在 viewDidLoad 中执行,在 initwithframe 中执行,我从未研究过原因,但我猜这里有一些不同的初始化。抱歉,很久以前记起来了。
    • 现在一切正常,工作正常。我创建了一个 UIView 子类,并在它的 initWithFrame 中放置了来自 initWithCoder 的代码。我还添加了支持方法。然后我添加了方法 + (Class)layerClass 以返回 [CAEAGLLayer 类]。在我的 viewController 我分配初始化我的自定义 UIView 类和所有的动画和东西现在工作。仍然会尝试你的方法,看看效果如何。干杯
    【解决方案3】:

    相信你在找CALayer的insertSublayer方法或者addSublayer方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2021-08-03
      • 2011-01-25
      • 1970-01-01
      • 2013-11-21
      相关资源
      最近更新 更多