Я определил 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'ой!