2013-02-23 30 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

相關問題