「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 としてそれへのポインターを作成する必要がありました。私がそれをしたら、それはうまくいきました!