GLPaint示例:如何以编程方式创建视图?

时间:2011-05-16 15:39:32

标签: iphone opengl-es

我需要在图像上绘制一些东西,比如来自Apple的GLPaint样本,但我需要创建EAGL表面,以编程方式渲染OpenGL。

样本在MainWindow.xib中实例化

如果我尝试以编程方式创建视图,例如:

self.drawingView = [[PaintingView alloc] initWithCoder:nil];
drawingView.frame = CGRectMake(0, 0, 320, 380);
[self.view addSubview:drawingView];

我收到了这个错误:

failed to make complete framebuffer object 8cd6

也许与init相关的东西?任何提示?感谢。

1 个答案:

答案 0 :(得分:3)

从源代码中快速浏览一下,Apple已将所有重要的初始化内容放在initWithCoder:内,从第77行到第168行。这是NSCoding协议的一部分,用于归档和取消归档对象来自文件。如果你调用initWithCoder:nil,很可能initWithCoder的UIView实现无法获得它需要的某些相关值。在猜测时,它可能开始为零大小,这对于帧缓冲对象来说不是有效大小。

我建议你用initWithCoder:(NSCoder *)coder替换initWithFrame:(CGRect)frame,在第86行用super调用相同的内容。为了更好的实现,实现initWithFrame:和initWithCoder:,让两个调用一个共同的包含在if((self = [super initWithXXX:argument]))块中的所有内容的部分。