【发布时间】:2013-03-13 16:27:21
【问题描述】:
我有一个非常简单的设置,有一个 mainViewController,上面有一个 GLKViewController。这个想法是将我的 GLKViewController 放在一个盒子里,占据屏幕的 1/3,在 mainViewController 上。这可以在下面看到:
那个白框是我自己自定义的 GLKViewController,代码如下:
boxViewController.h
//boxViewController.h
#import <UIKit/UIKit.h>
#import <GLKit/GLKit.h>
@interface boxViewController : GLKViewController
@end
boxViewController.m
//boxViewController.m
#import "boxViewController.m"
@interface boxViewController () { }
@property (strong, nonatomic) EAGLContext *context;
@end
@implementation boxViewController
-(void)viewDidLoad {
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView *view = (GLKView *)self.view;
// view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
}
@end
在viewDidLoad 中的mainViewController 上,我只需像这样调用boxViewController:
boxViewController* box = [[boxChartViewController alloc] init];
box.view.layer.frame = CGRectMake(10, 50, self.view.frame.size.width-20, self.view.frame.size.height/3);
[self.view addSubview:box.view];
效果很好。
请注意,在我的 boxViewController.m 中,view.context = self.context 被注释掉了。如果您取消注释,我的应用程序将崩溃而没有任何错误消息(它在 objc_msgSend 汇编代码中以 EXC_BAD_ACCESS 中断 [具体为第 8 行])。
当我设置上下文应用程序崩溃时,我做错了什么?从所有教程中,我注意到它们具有相同的设置,除了没有将控制器设置在另一个控制器上。虽然我不明白为什么 GLKViewController 不能被框架在另一个控制器上,所以我认为这不是问题。
【问题讨论】:
标签: objective-c opengl-es-2.0 glkit glkview