1

次のコードがあります。ブール値がtrueになった後、四角形に図面を追加します。これが私が持っているコードですが、何らかの理由でブール値を設定していないか、setNeedsDisplayを呼び出しています。他のクラスを正しく参照していますか?ありがとう

//AppController.m内

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

    }

}

//cutoutView.m内

- (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];
}
4

2 に答える 2

2

OK、すべてのUILabelが同じではないことをご存知ですか?同様に、他のすべてが消えることなく、ビューから1つのUILabelを削除できますか?さて、あなたのCutoutViewは同じ方法です。そこに書き込むと、どこにも表示されない新しいCutoutViewがCutoutView *theView = [[CutoutView alloc] init];作成されます。既存のCutoutViewと通信する必要があります(おそらくアウトレットを接続することによってですが、この目標を達成する完全に有効なデザインはいくつもあります)。

于 2012-04-04T04:02:32.923 に答える
0

メソッドを呼び出すのを忘れていますdrawRect:。次のようになります。

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

ドキュメントから:

ビューの実際のコンテンツが変更された場合、ビューを再描画する必要があることをシステムに通知するのはユーザーの責任です。これを行うには、ビューのsetNeedsDisplayまたはsetNeedsDisplayInRect:メソッドを呼び出します。

于 2012-04-04T03:44:16.103 に答える