2013-08-20 5 views
0

голубчик какао программистами,NSView не Проведем через bezierpath

То, что я хотел бы выполнить:

У меня есть флажок, а PopUpButton (который скрыт) и NSView на мой холст. Если myCheckbox установлен -> показать popUpButton и нарисовать строку через bezierPath в NSView. если myCheckbox разнуздана -> Скрыть PopUpButton снова и "раздвигать" путь

Код:

- (IBAction)isChecked:(id)sender { 
    //if myChekcbox is checked, show the pop up button 
    if ([sender state]==NSOnState) { 
    NSLog(@"Checked"); 
    [myPopUp setHidden:NO]; 
    } 
    else 
    { 
    //if the checkbox is unchecked, hide the popupbutton 
    [myPopUp setHidden:YES]; 
    NSLog(@"Unchecked"); 

    } 
    //reload my drawrect method (reload the view) 
    [self setNeedsDisplay:YES]; 
} 

- (void)drawRect:(NSRect)dirtyRect 
{ 
    //if the checkedbutton is checked, draw the line 
    if ([myCheckbox state]==NSOnState) 
    { 
    NSBezierPath *myPath = [NSBezierPath bezierPath]; 
    [myPath moveToPoint:NSMakePoint(10, 20)]; 
    [myPath lineToPoint:NSMakePoint(50, 20)]; 
    [myPath setLineWidth:2]; 
    [myPath stroke]; 
    } 

} 

Проблема:

если проверяется состояние = NSOnState PopUpButton является видимо, но линия просто не будет рисовать, и мне интересно, почему ... Я лично считаю, что это проблема связи.

Я загрузил файл проекта (это довольно мало-35Kb) здесь: Drawing.zip

Глобально: Я прочитал документацию NSView и говорит есть только один способ привлечь к виду, и это через метод drawRect. Это правда? Кроме того, это способ спуска на вид? (Если функция в представлении и setNeedsDisplay: YES в методе)

спасибо заранее, Бен

+0

Обнаруженные проблемы: это проблема соединения и самостоятельно setNeedsDisplay: ДА должно быть: MyView setNeedsDisplay: ДА Довольно глупо! спасибо за помощь tho –

ответ

0

Вам нужно будет получить NSColor экземпляр, а затем вызвать setStroke на него, чтобы установить текущий цвет обводки. Он не знает, какой цвет использовать, чтобы погладить путь в начале drawRect:, поэтому вы должны это сказать.

+0

Jesper, код работает, но он не будет делать «трюк» héhé. Я просто изменил Drawing.zip на правильную ссылку, извините меня за это. –

+0

Пропустил что-то. Обновление ответа ... – Jesper

+0

Что странно, так как строка рисует без IF-оператора. –