Вы не можете использовать 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.