GLKViewController, определенный в раскадровке, добавленной с помощью addChildViewController, обновляться не будет - PullRequest
2 голосов
/ 05 февраля 2012

Я определил GLKViewController в раскадровке с идентификатором.Я добавляю его в другой контроллер представления в коде с

sceneController = (SceneController*)[[self storyboard] instantiateViewControllerWithIdentifier:@"openglcontroller"];
sceneController.view.frame = CGRectMake(0, 120, 320, 360);
[self addChildViewController:sceneController];

Я определил в viewDidLoad GLKViewController

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
GLKView *v = (GLKView *)self.view;
v.delegate = self;
v.context = context;
[EAGLContext setCurrentContext:context];

Я проверил, что этот viewDidLoad был вызван, и все существует так, как должно,Однако - (void) glkView: (GLKView *) view drawInRect: (CGRect) rect не вызывается, и - (void) update

GLKViewController не приостанавливается и его fps устанавливается на 30. Почему быэто не вызывать методы делегата?Я сделал это в предыдущем приложении в качестве контроллера корневого представления, который, конечно, работал.Контроллеры дочерних представлений - это новая функция в iOS 5, и ничто в документации не говорит, что это не должно работать.Чего мне не хватает?

Ответ:

Чего не хватало (в случае, если у кого-то еще есть эта проблема).

[self addChildViewController:sceneController];
[[self view] addSubview:[sceneController view]]; <<<<<<<<<<<<<<<<
[sceneController didMoveToParentViewController:self];

Поскольку GLKViewController имеет встроенное представлениеВам нужно добавить его как подпредставление, иначе оно нигде не появится.D'ой!

...