我正在尝试将GLKView
嵌套在UIView
XIB中。基本上按照这里的步骤:
Nested GLKView and 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
嵌入到普通视图控制器中。
更新
如果我将 MainViewController.m 的viewDidLoad
修改为以下内容,那么它可以正常工作但只会渲染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
。
答案 0 :(得分:1)
您将CustomOpenGLController
设置为子ViewController,但您从未在addChildViewController
viewDidLoad中调用MainViewController
。您的问题可能来自此