Я делаю приложение для рисования для iOS, и у меня есть следующие классы:
CanvasViewController
содержит CanvasView
и позволяет выбрать Brush
для использования на чертеже
CanvasView
- это UIView
, который содержит цвет фона и массив Stroke
, которые отображаются путем связывания touches
событий и drawRect
Stroke
- это NSObject
, который содержит UIBezierPath *path
и Brush
Brush
содержит int brushType
, который определяется typedef
и может быть чем-то вроде BrushTypeSolid, BrushTypeSpray, BrushTypePattern
Изначально я думал о том, как я буду обрабатывать рисунок brushType
в моем drawRect
, и это будет примерно так:
в затяжке
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsBeginImageContext(self.frame.size);
if ([squigglesArray count] > 0) {
for (WDSquiggle *squiggle in squigglesArray) {
[self drawSquiggle:squiggle inContext:context];
}
}
[self drawSquiggle:currentSquiggle inContext:context];
UIGraphicsEndImageContext();
в розыгрыше
switch (squiggle.brushType): {
case BrushTypeSolid:
//solid brush stuff
break;
case BrushTypeX:
//x stuff
break;
}
Однако теперь логика рисования обрабатывается таким образом, что сильно связывает CanvasView
и BrushType
вместе.
Есть ли элегантный способ инкапсулировать логику рисования в BrushType
или Squiggle
, чтобы я мог сделать что-то вроде:
[squiggle drawInRect:myRect]
или
[squiggle drawInView:myView]
Или это глупая цель иметь / я не понимаю инкапсуляцию?