その上にGLKViewControllerを持つmainViewControllerを持つ、非常に単純なセットアップを念頭に置いています。アイデアは、mainViewController で、画面の 1/3 を占めるボックスに GLKViewController を配置することです。これは以下で見ることができます:
その白いボックスは、次のコードを持つ私自身のカスタム 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
の [具体的には 8 行目] で壊れます)。objc_msgSend
コンテキストを設定するとアプリケーションがクラッシュするという、間違っていることは何ですか? すべてのチュートリアルから、コントローラーを別のコントローラーに設定しないことを除いて、同じ設定になっていることに気付きました。GLKViewController を別のコントローラーでフレーム化できなかった理由はわかりませんが、それは問題ではないと思います。