1

我对此一无所知,但如果这是可能的(例如 Flash),那将非常酷。

我有一个基于视图的应用程序,我可能需要一些 OpenGL ES 功能,但不想拥有全屏 OpenGL ES。我只是在某些小区域需要它来绘制小图表和其他可能很难用核心图形完成的东西。

4

3 回答 3

2

是的,这是可能的,但我强烈建议不要这样做

Apple 技术说明 TN2230:针对 iPhone OS 优化 OpenGL ES涵盖了所有注意事项。

这份涵盖最佳实践的 Apple 文档有助于了解更多的注意事项。

于 2009-05-31T18:11:11.920 回答
1

是的,

您应该能够通过 Quartz Core 使用层来实现这一点(请参阅 CALayer 类文档)。实际上,您可以拥有层级结构。基本上,您将每个 UIView 关联到不同的层,然后将这些层一起渲染,提供一个单一的复合层。此外,您还可以将变换和动画应用于图层。

您需要导入 QuartzCore 标头并执行类似的操作

#import <QuartzCore/QuartzCore.h>
UIView *myView = [[UIView alloc] initWithFrame...
UIView *openGLView = [UIView alloc] initWithFrame...

CaLayer *myViewLayer = myView.layer;
[myViewLayer addSubLayer: openGLView.layer];

然后,当 myView 出现在屏幕上时,所有子图层合并在一起并呈现在屏幕上。发生的情况是每个视图都呈现其层,而 myViewLayer 被呈现合并两个层。

您可以拥有任意数量的图层。您可以使用 CALayer 方法创建任意层次结构

– addSublayer: – removeFromSuperlayer
– insertSublayer:atIndex:
– insertSublayer:below:
– insertSublayer:above:
– replaceSublayer:with:

于 2009-05-31T08:15:36.097 回答
0

这种“技术”工作得很好而且很常见,因为 UIKit 就是为这种事情而设计的,它也可以以其他方式工作(OpenGL 在后台或前台或任何组合中)。只记得关闭不透明标志。

但是,我不确定是否将 GL 渲染到正在激活动画的 CALayer;它可能只是在动画期间不会更新。=) 玩得开心!

于 2010-06-28T14:43:11.400 回答