0

作成したNSOpenGlViewのサブクラス化されたバージョンで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が実際に機能するようにするためです。おそらく、これはInterface Builderで設定できますが、私にはオプションが表示されません。これは、スクロールビュー内にあるが、まだわからないことが原因である可能性があります。

4

1 に答える 1

3

Interface Builderでビューを作成した場合、ビューは呼び出されませんが- (id)initWithFrame:(NSRect)frame、代わりに- (id)initFromCoder:(NSCoder *)coder

于 2013-02-23T15:29:58.810 に答える