3

その上に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 を別のコントローラーでフレーム化できなかった理由はわかりませんが、それは問題ではないと思います。

4

1 に答える 1

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];


}
于 2013-03-14T02:42:55.290 に答える