Ios 嵌套GLKViewController
我正在尝试将Ios 嵌套GLKViewController,ios,opengl-es,glkit,Ios,Opengl Es,Glkit,我正在尝试将GLKView嵌套在UIViewXIB中。基本上遵循以下步骤: 我的CustomOpenGLController.xib只是一个GLKView MyMainViewController.xib有一个GLKView子视图 在myMainViewController.xib中,我有一个带有插座的GLKView: @property (weak, nonatomic) IBOutlet GLKView *theSubView; 然后在MainViewController.m中执行以下
GLKView
嵌套在UIView
XIB中。基本上遵循以下步骤:
我的CustomOpenGLController.xib只是一个GLKView
MyMainViewController.xib有一个GLKView
子视图
在myMainViewController.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];
}
这会导致调用CustomOpenGLController
的viewDidLoad
,执行以下操作:
- (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];
}
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
问题在于未调用委托glkViewControllerUpdate
和glkView
drawInRect
如果我将CustomOpenGLController
添加为子视图(而不是setView调用),则glkView
drawInRect会被调用一次。如果使用CustomOpenGLController
作为一个独立的视图,那么它就可以完美地工作
但是,我需要将此CustomOpenGLController
嵌入到普通视图控制器中
更新
如果我将MainViewController.m的viewdiload
修改为以下值,则它可以工作,但只渲染1帧,然后停止调用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");
}
这会奇怪地渲染1帧,然后停止。另外,
glkViewControllerUpdate
从未调用。您正在将CustomOpenGLController
设置为子视图控制器,但您从未在MainViewController
视图加载中调用addChildViewController
。你的问题可能来自于此