【问题标题】:Nested GLKViewController嵌套的 GLKViewController
【发布时间】:2013-11-03 18:35:31
【问题描述】:

我正在尝试将 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];
}

这会导致CustomOpenGLController 中的viewDidLoad 被调用,执行以下操作:

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 嵌入到普通视图控制器中。

更新

如果我将 MainViewController.mviewDidLoad 修改为以下内容,则它可以工作,但它只渲染 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

【问题讨论】:

    标签: ios opengl-es glkit


    【解决方案1】:

    您将CustomOpenGLController 设置为子ViewController,但您从未在MainViewController viewDidLoad 中调用addChildViewController。你的问题可能来自这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多