2010-01-18 2 views
1

Hellow stackoverflow people, Я довольно новичок в Cocoa. У меня есть XCode 3.1Какао/Цель-C: Рисовать прямоугольник на кнопке Нажмите

Ситуация: У меня есть подкласс NSObject: (AppController) с действием, связанным с кнопкой. У меня есть пользовательский вид, подключенный к моему подклассу NSView (AppView), в команде drawRect я рисую прямоугольник (все это работает), У меня есть функция AppView.ma - (void) drawIt {..} который рисует прямоугольник. На данный момент я назвал его в - (void) drawRect ... с [self drawIt]. Это тоже работает.

Что я хочу сделать, это позвонить drawIt, когда нажимается кнопка. (в AppController.m, когда действие - (IBAction) ... вызвано из-за нажатия кнопки)

Я надеюсь, что вы сможете мне помочь, Я новичок в stackoverflow, поэтому я не знаю, код здесь, я могу, но, возможно, его легче читать следующим образом

ответ

6

Вы должны прочитать концептуальный материал Cocoa Drawing Guide. Ваше мнение обращается к системе -drawRect:, когда система считает это необходимым. В этом отношении ваше мнение можно попросить сделать в любое время. Поэтому вы должны думать об этом с точки зрения «рисования текущего состояния».

Возможно, что вы должны сделать (в этой базовой ситуации), возможно, дать вашему пользовательскому представлению логическое свойство drawIt и активировать действие кнопки на экземпляре представления. Таким образом, if (self.drawIt == YES), вы можете вызвать свой код рисования прямоугольника.

Вы должны всегда что-то делать, чтобы «очистить» представление, когда вызывается -drawRect: (например, заполнить все границы белым), а затем извлекать условные элементы только в том случае, если условие выполнено.

Пример:

- (void)drawRect:(NSRect)aRect 
{ 
    // Clean up background (we ignore "aRect", drawing entire view at once) 
    [[NSColor whiteColor] set]; 
    NSRectFill([self bounds]); 

    // Do we want to draw our magic rect? 
    if ([self drawMagicRect]) 
    { 
    [[NSColor redColor] set]; 
    NSRectFill([self magicRect]); 
    } 
} 
+0

Спасибо - так в - (IBAction) buttonAction ... {я говорю: drawMagicRect = TRUE; поэтому он перезагрузит представление, и появится прямоугольник, нужно ли мне позаботиться о значении по умолчанию drawMagicRects? – Samuel

+0

Вам нужно будет выполнить домашнюю работу: прочитайте документацию по объектам Objective-C 2.0. Что касается того, чтобы его обновить, лучше всего использовать вызов [self setNeedsDisplay: YES] из метода доступа к ассемблеру свойства после того, как он был изменен. Это скажет системе, что представление нужно перерисовать. –

+0

ОК, я собираюсь немного прочитать, но теперь я получил основную идею благодаря ^^ – Samuel