2013-11-03 44 views
0

我想嵌套 XIB內的GLKView。基本上此處的步驟: Nested GLKView and GLKViewController嵌套的GLKViewController

CustomOpenGLController.xib只是一個GLKView

我的MainViewController.xib有一個GLKView子視圖。

在我MainViewController.xib我有一個GLKView有出口:

@property (weak, nonatomic) IBOutlet GLKView *theSubView; 

然後在MainViewController.m我做到以下幾點:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSLog(@"viewDidLoad"); 
    subviewController = [[CustomOpenGLController alloc] initWithNibName:@"CustomOpenGLController" bundle:nil]; 
    subviewController.view.frame = _theSubView.frame; 
    [subviewController setView:self.theSubView]; 
    [self.theSubView setNeedsDisplay]; 
    [subviewController didMoveToParentViewController:self]; 
} 

這導致viewDidLoadCustomOpenGLController被稱爲哪個具有以下功能:

CustomOpenGLController.h

@interface CustomOpenGLController : GLKViewController <GLKViewControllerDelegate, GLKViewDelegate> 
{ 
@private 
    GLKBaseEffect *effect; 
} 

#pragma mark GLKViewControllerDelegate 
- (void)glkViewControllerUpdate:(GLKViewController *)controller; 

#pragma mark GLKViewDelegate 
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect; 

@end 

CustomOpenGLController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSLog(@"viewDidLoad"); 

    EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

    GLKView *glkView = (GLKView *)self.view; 
    glkView.delegate = self; 
    glkView.context = aContext; 

    glkView.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888; 
    glkView.drawableDepthFormat = GLKViewDrawableDepthFormat16; 
    glkView.drawableMultisample = GLKViewDrawableMultisample4X; 

    self.delegate = self; 
    self.preferredFramesPerSecond = 30; 

    effect = [[GLKBaseEffect alloc] init]; 

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
} 

的問題是代表glkViewControllerUpdateglkView drawInRect不叫。

如果我添加CustomOpenGLController作爲子視圖(而不是setView調用),然後glkView drawInRect被調用一次。如果使用CustomOpenGLController作爲一個獨立的視圖,那麼它完全可以正常工作。

但是我需要將CustomOpenGLController嵌入到普通視圖控制器中。

UPDATE

如果我修改viewDidLoadMainViewController.m以下,然後它的工作原理,但它只能渲染一幀後停止呼叫glkView drawInRect:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSLog(@"viewDidLoad ControllerView"); 
    subviewController = [[ControllerOpenGLViewController alloc] initWithNibName:@"ControllerOpenGLViewController" bundle:nil]; 
    subviewController.view.frame = _theSubView.frame; 

    subviewController.view.opaque = NO; 
    subviewController.view.backgroundColor = [UIColor clearColor]; 

    [self.view addSubview:subviewController.view]; 
    [subviewController.view setNeedsDisplay]; 

    NSLog(@"Done viewDidLoad ControllerView"); 
} 

這奇怪的渲染一幀然後停止。另外glkViewControllerUpdate永遠不會被調用。

回答

1

您正在設置CustomOpenGLController作爲子ViewController,但您從未在您的MainViewController viewDidLoad中調用addChildViewController。你的問題可能來自這個