Использование CGRect и setNeedsDisplay - PullRequest
0 голосов
/ 22 января 2012

Как я могу переопределить метод drawRect UIView так, чтобы каждый раз, когда я вызываю [myView setNeedsDisplay], он рисовал новый случайный круг на экране со случайным цветом.Это не должно заменить старые круги.Таким образом, это должно выглядеть просто как круг кругов, складывающихся по всему экрану, один за другим.

1 Ответ

1 голос
/ 22 января 2012

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

Первоначально я хотел создать представление для каждого отдельного шара со случайным размером и положением.Но пример кода SonOfSillyBalls (который делает именно то, что вы пытаетесь сделать) использует другой подход.

Это подкласс NSView устанавливает повторяющийся таймер для запуска метода drawAnother:, который выполняет [self lockFocus], затем рисует случайный шар, а затем [self unlockFocus], чтобы закончить рисование.Наконец, он вызывает [self.window flushWindow], чтобы вывести новый шар на экран.

Поскольку он делает точно , что вы пытаетесь сделать, возможно, вам не следует читать его (гдевызов в этом!), но пример кода для SonOfSillyBalls находится здесь: http://developer.apple.com/library/mac/#samplecode/SonOfSillyBalls/

Возможно, вы захотите проверить прочитанное мной для объяснения общей проблемы и почему она не идеально подходит для современного рисованияAPI (примечание: он старый, поэтому местами он относится к Mac OS X как «Open Step» и «Rhapsody» (название «X» еще не было придумано), а Classic Mac OS так же, как «Mac OS»)

Silly Balls - один из старейших образцов кода Apple, родом из 1980-х, но это третья (я думаю?) Версия, обновленная только шесть месяцев назад для использования Objective-C 2.0.

...