Рисовать изображения в CGContext без initWithFrame

В настоящее время у меня есть объект UIImage, который инициализируется с помощью initWithFrame, а затем у меня есть несколько 2D-рисунков в -(void)drawRect:(CGRect)rect{} с `CGContext. Очень простой. Все, что я хочу знать, это то, как я могу рисовать через толчок, например. кнопка или любое событие (не только при инициализации)?

Я попытался скопировать код внутри drawRect в новый метод с именем redraw, но это приводит к очевидной ошибке:

CGContextMoveToPoint: неверный контекст 0x0

Я только хочу знать, как иметь возможность рисовать через CGContext, пока UIView создан. Нет, например. как прослушивать событие UIButton

Спасибо.


person LouwHopley    schedule 22.06.2011    source источник


Ответы (1)


Вы можете рисовать только внутри метода drawRect: UIView или путем создания собственного контекста image. Вы не можете рисовать на экране каким-либо другим способом, кроме drawRect: или реализации рисования для CALayer. Вам нужно соответствующим образом установить переменные в вашем представлении, а затем вызвать setNeedsDisplay, чтобы перерисовать его. Например, добавьте в представление свойство @property(retain) UIImage *image;, установите для него новое изображение, а затем вызовите setNeedsDisplay (или, что еще лучше, реализуйте метод setImage: и вызовите здесь [self setNeedsDisplay];).

person DarkDust    schedule 22.06.2011
comment
Если мне часто (100 Гц) нужно нарисовать новый прямоугольник (только один цветной прямоугольник), будет ли это по-прежнему вариантом или какую альтернативу мне лучше использовать? (CGContext делает то, что мне нужно, кроме перерисовки) - person LouwHopley; 22.06.2011
comment
Насколько я знаю, экран iPhone имеет частоту обновления только 60 Гц. В любом случае, если вам нужно часто рисовать это, вам нужно ознакомиться с CoreAnimation и использовать CADisplayLink. - person DarkDust; 22.06.2011