0

「testClass」という名前のカスタム NSView クラスがあります。このクラスのインスタンスをメイン アプリケーション コントローラー クラスに作成します。testClass には、NSView の背景の色を保持するインスタンス変数として、4 要素の float 配列が含まれています。これらの値をメイン コントローラー クラスから設定し、drawRect: を使用して背景を描画する必要があります。ただし、値を設定すると、drawRect は値を表示することを拒否します。それらは常に 0.0 です。

Interface Builder で、カスタム ビューをアプリの MainMenu.xib のメイン ウィンドウに配置します。次に、それを testClass に割り当てます。

これが私のコードです:

@interface testClass : NSView
{
    @public
    float colors[4];
}
@end

@implementation testClass
-(void)drawRect:(NSRect)dirtyRect
{
    //The colors are ALWAYS 0.0, 0.0, 0.0:
    fprintf(stderr,"colors: %.2f %.2f %.2f\n",colors[0],colors[1],colors[2]);

    NSColor *c = [NSColor colorWithCalibratedRed:colors[0] green:colors[1] blue:colors[2] alpha:1.0];
    [c setFill];

    NSRectFill(dirtyRect);
}
@end

//Now, in the main app controller:
testClass *test = [[testClass alloc] init];
test->colors[0] = 1.00; //r
test->colors[1] = 0.75; //g
test->colors[2] = 0.25; //b
test->colors[3] = 1.00; //a

[test setNeedsDisplay:YES];

//This prints the colors as they should be:
fprintf(stderr,"colors: %.2f %.2f %.2f\n",
    test->colors[0],
    test->colors[1],
    test->colors[2]);

カスタム クラスを作成したクラスから setNeedsDisplay:YES を呼び出しても、カスタム ビューが独自の変数を認識しないのはなぜですか? 私がやろうとしていることがうまくいかない場合、正しいアプローチは何ですか?

アップデート:

user1118321 が指摘したように、[[testClass alloc] init] 行で作成した testClass のインスタンスは、私がすべきことではありませんでした。Interface Builder (「testClass」を割り当てた) のカスタム ビューの形式で testClass のインスタンスを既に持っていたので、メイン コントローラー クラスで IBOutlet としてそれへのポインターを作成する必要がありました。私がそれをしたら、それはうまくいきました!

4

0 に答える 0