Какао / Objective-C: нарисовать прямоугольник при нажатии кнопки - PullRequest
1 голос
/ 18 января 2010

Hellow stackoverflow люди, Я довольно новичок в Какао. У меня XCode 3.1

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

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

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

1 Ответ

6 голосов
/ 18 января 2010

Вы должны прочитать концептуальный материал Руководство по рисованию какао . Ваш взгляд запрашивается системой -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]);
  }
}
...