2012-04-04 6 views
1

私は次のコードを書いています。ブールが真の後、私はrectに図面を追加します。ここに私が持っているコードですが、何らかの理由でboolを設定していないか、setNeedsDisplayを呼び出していません。私は他のクラスを正しく参照していますか? cutoutView.mブールを別のクラスに設定する

で感謝

// AppController.m

-(IBAction)colorToggle:(id)sender 
{ 
    if ([colorFilter state] == NSOnState) 
    { 
     CutoutView *theView = [[CutoutView alloc] init]; 
     [theView setFilterEnabled:YES]; 

    } 

}

//

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [[[NSColor blackColor]colorWithAlphaComponent:0.9]set]; 
    NSRectFill(dirtyRect); 

    //this is what i want to be drawn when my bool is true and update the drawRect   
    if (filterEnabled == YES) { 
     NSRectFillUsingOperation(NSMakeRect(100, 100, 300, 300), NSCompositeClear); 
     [self update]; 
    } 
} 

-(void)update 
{ 
    [self setNeedsDisplay:YES]; 
} 

答えて

2

すべてのUILabelが同じであるとは限りません。同様に、他のUILabelもすべて消えることなく、UILabelをビューから削除できますか?さて、あなたのCutoutViewは同じ方法です。 CutoutView *theView = [[CutoutView alloc] init];と書くと、どこにも表示されない新しい CutoutViewが作成されます。 CutoutViewと話す必要があります(おそらくコンセントを接続することで、この目標を達成する完全な有効なデザインがいくつでもあります)。

+0

ありがとう!完璧な意味合いを持つ –

0

あなたはdrawRect:メソッドを呼び出すために忘れている、それはこのようになります必要があります:

CutoutView *theView = [[CutoutView alloc] init]; 
[theView setFilterEnabled:YES]; 
[theView setNeedsDisplay]; 
docsから

ビューの変更の実際の内容は、あなたのビューが 再描画する必要がありますシステムに通知するために、あなたの 責任です。ビューのsetNeedsDisplayまたは setNeedsDisplayInRect:メソッドを呼び出すことで、これを行います。

+0

ありがとう、私はあなたが意味するものを得るが、私が '[theView setNeedsDisplay:YES];を使用しても、それはまだrectを再描画していない。私のブールの声明は正しいですか? –

関連する問題