2012-04-04 12 views
1

У меня есть следующий код, где после того, как bool истинно, я хочу добавить чертеж в свой прямоугольник. вот код, который у меня есть, но по какой-то причине он либо не устанавливает bool, либо вызывает setNeedsDisplay. Я правильно ссылаюсь на другой класс? благодаряНастройка Bool в разных классах

// в 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]; 
} 

ответ

2

ОК, вы знаете, как не каждый 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];' он все еще не перерисовывает прямоугольник. Является ли мое утверждение bool правильным? –

Смежные вопросы