Использование GLKView с UIViewController

Я хотел использовать OpenGL для простой обработки изображений, поэтому я начал с GLKView, Поскольку мне не нужно обновлять вид каждые несколько секунд, я не использовал GLKViewController и вместо этого использовал нормальный UIViewController подкласс.

Мой вопрос заключается в том, чтобы я просто сделал представление viewController как GLKView или я добавляю GLKView как подпредставление представления контроллера представления. Так как я добавляю UISlider с точки зрения, я думаю, что последний кажется лучше, но я не уверен. Мне тоже нужно позвонить setNeedsDisplay на GLKView в некоторых случаях.

1 ответ

Решение

Для вашего рендеринга вы действительно должны использовать GLKView внутри GLKViewController. если вы беспокоитесь о том, что вам не нужно постоянно обновляться, используйте self.paused = YES внутри вашего GLKViewController, это остановит цикл рендеринга, а когда вам понадобится снова выполнить рендеринг, просто выполните self.paused = NO.

если у вас есть glkview внутри другого представления, вы должны настроить его на сдерживание. в вашем случае у вас должен быть обычный UIView с обычным UIViewController, затем добавьте к нему UISlider и ваш GLKViewController (с GLKView).

После того, как это будет сделано, вы можете делать ваши обычные представления в родительском контроллере, а ваши opengl - это ваш контроллер glk.

Простой пример сделать это, настроив своего родителя, который содержит UISlider:

внутри пользовательского UIViewController для родителя

@interface ParentViewController () {
    ...
    UISlider *_slider; // this is your slider
    CustomGLKViewController *_myGlkViewController;
}

тогда внутри viewDidLoad:

// assuming you're using a storyboard
UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                      bundle:[NSBundle mainBundle]];


// setup the opengl controller
// first get an instance from storyboard
_myGlkViewController = [myStoryboard instantiateViewControllerWithIdentifier:@"idForGlkViewController"];
// then add the glkview as the subview of the parent view
[self.view addSubview:_myGlkViewController.view];
// add the glkViewController as the child of self
[self addChildViewController:_myGlkViewController];
[_myGlkViewController didMoveToParentViewController:self];

// if you want to set the glkView to the same size as the parent view, 
// or you can do stuff like this inside myGlkViewController
_myGlkViewController.view.frame = self.view.bounds;

но это всего лишь простой пример, чтобы помочь вам начать работу, вам действительно следует прочитать документы Apple по содержанию UIViewController для ios5 и документы для GLKit

Другие вопросы по тегам