在 GLKView 类型的对象上找不到属性“层”

Posted

技术标签:

【中文标题】在 GLKView 类型的对象上找不到属性“层”【英文标题】:Property 'layer' not found on object of type GLKView 【发布时间】:2014-10-16 06:12:21 【问题描述】:

在“ViewController *”类型的对象上找不到属性“层”,其中 ViewController 的类型为 GLKView,而且我正在我的 opengl 项目中导入以下文件

QuartzCore/QuartzCore.h

OpenGLES/ES2/gl.h

OpenGLES/ES2/gext.h

ViewController.h 的代码

@interface ViewController : GLKViewController



    CAEAGLLayer* eaglLayer;


@结束

ViewController.m

@interface ViewController ()

@property (nonatomic, strong) EAGLContext *context;
@property (nonatomic, strong) GLKBaseEffect *baseEffect;

@end 

@implementation ViewController

- (void)viewDidLoad

 [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
 self.context = [[EAGLContext alloc] initWithAPI: kEAGLRenderingAPIOpenGLES2];
 GLKView *view = (GLKView *) self.view;
 view.context = self.context;
[EAGLContext setCurrentContext:self.context];


+ (Class)layerClass

   return [CAEAGLLayer class];


- (void)createLayer

 eaglLayer = (CAEAGLLayer *) self.layer;
 eaglLayer.opaque = YES;

请告诉我我做错了什么?

【问题讨论】:

我认为您将视图与视图控制器混为一谈。你怎么知道 ViewController 是 GLKView? 因为我已经将它设置为 GLKView。请参阅编辑我正在附加与之相关的图像 我必须查看更多代码才能确定,但​​我认为您目前正在@implementation 内部为一个不是视图的 GLKViewController 工作。如果这是真的,那么您应该能够通过执行 self.view.layer 来访问该层 在编辑中添加文件代码 谢谢!我很困惑,因为您在那里有 +layerClass 方法,但您提到了“ViewController”。这是您访问图层的方式:GLKViewController->GLKView->CALayer。在您的代码中,“self”实际上是一个 GLKViewController。所以再次访问代码中的图层将是:self.view.layer 【参考方案1】:

您需要引用视图,而不是控制器。

_eaglLayer = (CAEAGLLayer*) self.view.layer;

应该可以。

【讨论】:

以上是关于在 GLKView 类型的对象上找不到属性“层”的主要内容,如果未能解决你的问题,请参考以下文章

在“CBPeripheral *”类型的对象上找不到属性“uuid”

在“UITableViewCell”类型的对象上找不到属性

在“ViewController”类型的对象上找不到属性引用?

在“UIDatePicker”类型的对象上找不到属性“preferredDatePickerStyle”

在 UIImage 类型的对象上找不到属性“中心”*

lldb 错误:在类型的对象上找不到属性