我有一个非常简单的设置,有一个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
在我mainViewController
的{{1}}中,我只需像这样调用boxViewController:
viewDidLoad
完美无缺。
请注意,在我的boxViewController.m中,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];
已注释掉了。如果您取消注释,我的应用程序崩溃时没有任何错误消息(它在view.context = self.context
汇编代码[第8行特定]中的EXC_BAD_ACCESS
中断)。
当我设置上下文时应用程序崩溃,我做错了什么?从所有教程中我注意到它们具有相同的设置,除了不在另一个控制器上设置控制器。虽然我不明白为什么GLKViewController无法在另一个控制器上构图,所以我认为这不是问题所在。
答案 0 :(得分:4)
经过几个小时的搞乱后,我发现将viewController作为一个孩子加入了作品:
#import "mainViewController.h"
@implementation mainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.layer.backgroundColor = [UIColor colorWithRed:242.0f/255.0f green:242.0f/255.0f blue:242.0f/255.0f alpha:1.0].CGColor;
boxViewController* chart = [[boxViewController alloc] init];
chart.view.layer.frame = CGRectMake(10, 50, self.view.frame.size.width-20, self.view.frame.size.height/3);
chart.view.layer.borderColor = [UIColor blackColor].CGColor;
chart.view.layer.borderWidth = 2.0f;
[self addChildViewController:chart];
[self.view addSubview:chart.view];
}