无法在UIView

时间:2016-03-08 16:58:53

标签: ios objective-c uiview opengl-es

我正在学习iOS的OpenGL ES,并在线学习Ray Wenderlich的教程。他所做的第一件事是使用OpenGL ES 2.0将视图控制器中的视图设置为不同的颜色。所以我创建了一个名为OpenGLView的自定义类,它负责更改屏幕的颜色。然后在主要故事板中我删除了视图控制器中的原始视图,并将其替换为GLKView并将其类设置为OpenGLView。当我运行项目时,一切正常。但是现在我试图做同样的事情,除了GLKView在UIView中。如下所示

enter image description here

当我将GL视图的类设置为主故事板中的自定义类OpenGlView时,除了类之外,它不会。当我运行项目时,我看到的只是一个白色的屏幕。

如何将GL视图设置为OpenGLView类?

编辑:

我相信它与app delegate中的代码有关。

@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;
}

1 个答案:

答案 0 :(得分:2)

您的代码在app delegate中创建一个glView,并将其添加为根窗口的子视图;之后,通过故事板实例化视图控制器,并将其视图添加到堆栈中。最后一个视图是您看到的白色视图,它涵盖了glView。 为了更好地理解这种层次结构,您可以使用Xcode Debug View Hierarchy功能。 要解决您的问题,您可以删除视图控制器或将glView作为视图控制器的子视图移动。

修改 如果您通过故事板创建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;
}