О рисовании с использованием кварца 2D на iPhone - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть представление, у которого есть метод drawRect, я знаю, что этот метод является единственным способом, которым я управляю видом, чтобы что-то нарисовать на нем. Итак, я стараюсь рисовать логику следующим образом:

- (void)drawRect:(CGRect)rect {

  //my drawing code...
}

На мой взгляд, я использую IB для связи этого класса.

[myView setNeedsDisplay];

Это работает, поэтому я разработал объект Command внутри метода drawRect, чтобы я мог рисовать динамически на основе моего Cmd. Вот код в представлении после того, как я изменил:

- (void)drawRect:(CGRect)rect {
    self.cmdToBeExecuted = [[DrawingSomethingCmd alloc] init];
    [self.cmdToBeExecuted execute];
}

My DrawingsomthingCmd:

@implementation DrawingSomethingCmd
-(void)execute{
//my drawing code;
}

Это тоже работает. Но вопрос в том, как я могу назначить self.cmdToBeExecuted динамически. Также я изменил свой drawRect следующим образом:

  - (void)drawRect:(CGRect)rect {
    [self.cmdToBeExecuted execute];
  }

Поскольку у меня есть это, чтобы связать с IB,

IBOutlet myDrawingView *myView;

но после ввода [myView ... ...] он не позволяет мне получить переменную cmdToBeExecuted. Я готов сделать мою переменную доступной в .h:

@property (nonatomic, retain) Command *cmdToBeExecuted;

и .m также:

@synthesize cmdToBeExecuted;

1 Ответ

1 голос
/ 06 апреля 2010

Не инициализируйте команду внутри прямоугольника рисования. Инициализируйте значение по умолчанию (может быть, в viewDidLoad - это зависит от того, что вы делаете) где-то, когда создается представление, и затем обновляйте их динамически, в зависимости от того, что вы делаете, всякий раз, когда возникает необходимость. Итак:

- (void)drawRect:(CGRect)rect
{
  [[self commandToBeExecuted] execute];
}

и в других местах:

// dynamically update the drawing
[myView setCommandToBeExected:[[[DrawingSomethingCommand alloc] init] autorelease]];
...