Я имею в виду довольно простую настройку, имеющую 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
в viewDidLoad
я просто вызываю 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
. Если вы раскомментируете его, мое приложение выйдет из строя без каких-либо сообщений об ошибках (оно прерывается с помощью EXC_BAD_ACCESS
в ассемблерном коде objc_msgSend
[строка 8, чтобы быть конкретным]).
Что я делаю не так, что при установке контекста приложение вылетает? Из всех руководств я заметил, что они имеют одинаковую настройку, за исключением того, что контроллер не устанавливается на другой контроллер. Хотя я не понимаю, почему GLKViewController не может быть создан на другом контроллере, поэтому я не думаю, что это проблема.