我想嵌套 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];
}
這導致viewDidLoad
的CustomOpenGLController
被稱爲哪個具有以下功能:
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);
}
的問題是代表glkViewControllerUpdate
和glkView
drawInRect不叫。
如果我添加CustomOpenGLController
作爲子視圖(而不是setView調用),然後glkView
drawInRect被調用一次。如果使用CustomOpenGLController
作爲一個獨立的視圖,那麼它完全可以正常工作。
但是我需要將CustomOpenGLController
嵌入到普通視圖控制器中。
UPDATE
如果我修改viewDidLoad
爲MainViewController.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
永遠不會被調用。