2013-02-23 32 views
0

我试图让init函数在我创建的NSOpenGlView的子类版本中运行。如何让OpenGlView的init函数运行?

例如下面的代码。

- (id)initWithFrame:(NSRect)frameRect{ 
    NSLog(@"Init function ran"); 
    return self; 
} 

它应该发送到控制台,init函数运行但它不!我已经尝试创建一个init函数和initWithFrame:PixelFormat:函数,以查看它们是否触发了任何控制台消息,但没有发生任何事情。

我创建了NSOpenGlView,将其拖到我的窗口界面生成器中,并将其设置为我的子类版本。我的drawrect函数工作正常,绘制了一个opengl三角形,所以我知道它在这个级别上工作。

这里是我的情况下,全班同学你是好奇

#import <Cocoa/Cocoa.h> 
@interface openGLView : NSOpenGLView 
- (void) drawRect:(NSRect) bounds; 
@end 

#import "openGLView.h" 
#include <OpenGL/gl.h> 

@implementation openGLView 
- (id)initWithFrame:(NSRect)frameRect{ 
    NSLog(@"Init function ran"); 
    return self; 
} 
- (void) drawRect:(NSRect) bounds{ 
    glClearColor(0, 0, 0, 0); 
    glClear(GL_COLOR_BUFFER_BIT); 
    drawAnObject(); 
    glFlush(); 
    NSLog(@"drawRect"); 
} 

static void drawAnObject() 
{ 
    glColor3f(1.0f, 0.85f, 0.35f); 
    glBegin(GL_TRIANGLES); 
    { 
     glVertex3f( 0.0, 0.6, 0.0); 
     glVertex3f(-0.2, -0.3, 0.0); 
     glVertex3f( 0.2, -0.3 ,0.0); 
    } 
    glEnd(); 
} 

@end 

的原因我需要做的是这样的话,我可以在初始化时返回回到一个新的像素格式与32位,这样DEPTH_TEST将实际工作。据说你可以在界面生成器中设置它,但对于我来说我没有看到任何选项。这可能是因为它在滚动视图内,但还不确定。

回答

3

如果创建在Interface Builder的观点则不会调用- (id)initWithFrame:(NSRect)frame,而是调用- (id)initFromCoder:(NSCoder *)coder

+0

有趣,我会马上尝试了这一点。 – 2013-02-26 02:19:58

+0

它的工作原理,谢谢! – 2013-02-26 02:24:22

相关问题