Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 嵌套GLKViewController_Ios_Opengl Es_Glkit - Fatal编程技术网

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
。你的问题可能来自于此