2016-03-08 2 views
1

Я изучаю OpenGL ES для iOS и следую учебнику Ray Wenderlich онлайн. Первое, что он делает, - установить представление в контроллере вида на другой цвет с использованием OpenGL ES 2.0. Поэтому я создал пользовательский класс OpenGLView, который отвечает за изменение цвета экрана. Затем в основной панели рассказов я удалил исходное представление в контроллере представления и заменил его GLKView и установил его класс в OpenGLView. Когда я запускаю проект, все работает нормально. Но теперь я пытался сделать то же самое, кроме GLKView внутри UIView. Как следующийНевозможно установить пользовательский класс в GLKView внутри UIView

enter image description here

Когда я установить класс GL View на мой пользовательский класс OpenGlView в главном видеоредактора не за исключением класса. И когда я запускаю проект, все, что я вижу, это белый экран.

Как установить GL View в класс OpenGLView?

Edit:

Я считаю, что есть что-то делать с кодом в приложение делегата.

@interface AppDelegate : UIResponder <UIApplicationDelegate>{ 

OpenGLView* _glView; 
} 
@property (strong, nonatomic) UIWindow *window; 
@property (nonatomic, retain) IBOutlet OpenGLView *glView; 

@end 

//In the implementation 
@synthesize glView=_glView; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
    self.glView = [[OpenGLView alloc] initWithFrame:screenBounds]; 
    [self.window addSubview:_glView]; 
    return YES; 
} 
+0

Находит ли OpenGlView из GLKView? – DAN

+0

Нет в учебнике, которое он наследует от UIView –

+0

Если вы поместите GLKView в свою раскадровку, вы не можете назначить свой собственный класс другому типу. Пусть OpenGlView наследует от GLKView, и вы должны быть в порядке, в противном случае давайте посмотрим на упомянутый учебник. – DAN

ответ

2

Ваш код создает glView в делегате приложения, добавляя его в качестве подвид окна корневого окна; после этого контроллер представления создается через раскадровку, и ее представление добавляется в стек. Этот последний вид представляет собой белый вид, который вы видите, и он охватывает glView. Чтобы лучше понять такую ​​иерархию, вы можете использовать функциональность Xcode Debug View Hierarchy. Чтобы решить проблему, вы можете либо удалить контроллер вида, либо переместить glView в качестве подзадача контроллера вида.

EDIT: Если вы создаете OpenGLView через раскадровки, initWithCoder используется и не initWithFrame. Добавьте следующий метод в OpenGLView.m:

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super initWithCoder:decoder]; 
    if (self) { 
     [self setupLayer]; 
     [self setupContext]; 
     [self setupRenderBuffer]; 
     [self setupFrameBuffer]; 
     [self render]; 
    } 
    return self; 
} 
+0

Я проверил иерархию представлений, и glview находится спереди. –

+0

Итак, вы должны это увидеть :) – DAN

+0

Я точно вижу это. Я подтвердил это, добавив кнопку в GLView, и я вижу кнопку. Но проблема в том, что изменения, которые я делаю для представления, не применяются. –

Смежные вопросы