【问题标题】:glkview drawinrect delegate method called only onceglkview drawinrect 委托方法只调用一次
【发布时间】:2013-06-07 14:31:38
【问题描述】:

我正在尝试将 GLKViewController 添加到我的 UserInterfaceViewController。我正在使用来自 raywenderlich 教程的示例项目 (http://www.raywenderlich.com/5235/beginning-opengl-es-2-0-with-glkit-part-2)

这是我的代码 sn-p

#import <UIKit/UIKit.h>
@interface UserInterfaceViewController : UIViewController

@end

@implementation UserInterfaceViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view.

    UIViewController *userInterfaceController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"HelloGLKitViewController"];

    userInterfaceController.view.frame = CGRectMake(50.0, 100.0, 200.0, 200.0);

    [self.view addSubview:userInterfaceController.view];
}

上面的代码在我期待的提到的框架中的 UserInterfaceViewController 视图中绘制上下文。HelloGLKitViewController 有代码在 GLKViewControllerDelegate 方法“更新”中旋转立方体,如下所示。但是当 HelloGLKitViewController 视图到时,GLKViewControllerDelegate 没有被调用我的 UserInterfaceViewController 视图。

#import <GLKit/GLKit.h>
@interface HelloGLKitViewController : GLKViewController

@end

@implementation HelloGLKitViewController 

#pragma mark - GLKViewDelegate

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {

    //glClearColor(_curRed, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);


    [self.effect prepareToDraw];

    glBindVertexArrayOES(_vertexArray);   
    glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);

}

#pragma mark - GLKViewControllerDelegate

- (void)update {
    if (_increasing) {
        _curRed += 1.0 * self.timeSinceLastUpdate;
    } else {
        _curRed -= 1.0 * self.timeSinceLastUpdate;
    }
    if (_curRed >= 1.0) {
        _curRed = 1.0;
        _increasing = NO;
    }
    if (_curRed <= 0.0) {
        _curRed = 0.0;
        _increasing = YES;
    }

    float aspect = fabsf(self.view.bounds.size.width / self.view.bounds.size.height);
    GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 4.0f, 10.0f);    
    self.effect.transform.projectionMatrix = projectionMatrix;

    GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -6.0f);
    _rotation += -90 * self.timeSinceLastUpdate;//90 clockwise -90 anticlickwise
    modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, GLKMathDegreesToRadians(0), 1, 0, 0);//GLKMathDegreesToRadians(25) for bending Cube
    modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, GLKMathDegreesToRadians(_rotation), 0, 1, 0);

//    modelViewMatrix = GLKMatrix4Translate(modelViewMatrix, self.view.frame.origin.x, self.view.frame.origin.y,0);
 //   modelViewMatrix = GLKMatrix4Translate(modelViewMatrix, -self.view.bounds.size.width/2, -self.view.bounds.size.height/2,0);

    self.effect.transform.modelviewMatrix = modelViewMatrix;

}

@end

调用GLKViewControllerDelegate更新方法应该怎么做。

【问题讨论】:

    标签: iphone opengl-es-2.0 glkview


    【解决方案1】:

    问题已解决:这是我的代码

    @class HelloGLKitViewController;
    
    @interface UserInterfaceViewController : UIViewController
    {
        HelloGLKitViewController *myHLKViewController;
    }
    
    @end
    
    @implementation UserInterfaceViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    // Do any additional setup after loading the view.
        NSLog(@"viewDidLoad of userinterfaceUiViewController");
    
        myHLKViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"HelloGLKitViewController"];
    
        [self.view addSubview:myHLKViewController.view];
        [self addChildViewController:myHLKViewController];
        [myHLKViewController didMoveToParentViewController:self];
    }
    
    @end
    

    感谢参考链接Using GLKView with a UIViewController

    【讨论】:

    • 谢谢先生!这个 sn-p 解决了我一个星期以来的一个问题!
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 2016-05-30
    • 1970-01-01
    • 2013-11-22
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多