Ios 为什么GLKView没有上下文?

Ios 为什么GLKView没有上下文?,ios,opengl-es,Ios,Opengl Es,如果我NSLog我的GLKView的类,我会得到GLKView,但是为什么它没有可以分配给EagleContext的上下文属性呢?为什么我必须将其强制转换为另一个变量,然后分配EAGLContext?如果在UIViewController子类中执行此操作,self.view被声明为返回UIView类型的对象,因此您必须强制转换它。您可以使用: ((GLKView*) self.view).context = ... 注意,这假设self.view实际上是一个GLKView 由于GLKViewC

如果我NSLog我的GLKView的类,我会得到GLKView,但是为什么它没有可以分配给EagleContext的上下文属性呢?为什么我必须将其强制转换为另一个变量,然后分配EAGLContext?

如果在
UIViewController
子类中执行此操作,
self.view
被声明为返回
UIView
类型的对象,因此您必须强制转换它。您可以使用:

((GLKView*) self.view).context = ...
注意,这假设
self.view
实际上是一个
GLKView


由于
GLKViewController
没有定义
glkView
属性,因此可以按如下方式执行:

@property (nonatomic, readonly) GLKView* glkView;
-(GLKView*)glkView {
    return (GLKView*) self.view;
}

你可以直接这样做。是什么阻止了你?是不是给你一个编译器警告?编译时出错?或者运行时出现异常?是的,如果我特别键入self.view.context=。。。;我得到了一个编译错误:在UIView类型的对象上找不到属性“context”(当然,autocomplete首先不会将context显示为选项)。因此,您可以在分配时强制转换它。我不知道您可以这样做。我尝试了一下,但仍然觉得需要强制转换它很奇怪。GLKView带有GLKView控制器,但我猜您所说的在技术上是正确的,因为我查看了GLKView控制器的层次结构分解,它在UIView在其中,它被子类化为GLKView。
GLKViewController
UIViewController
继承
视图
属性,因此它在那里进行键入。在一些类似的情况下,它们定义了一个具有适当类型的单独属性(
UITableViewController
有一个
tableView
属性),但看起来他们没有使用
GLKViewController