Моя конечная цель - нарисовать отчет, который выглядит как MS Word, с использованием Quartz в UIView, имея и затем иметь этот UIView в UIScrollView.
Теперь у меня есть объект отчета верхнего уровня, изатем его дочерние элементы - это части отчета, которые нужно нарисовать, например ReportTitle, ReportTable, ReportSplitColumn и т. д. Объект отчета верхнего уровня выглядит следующим образом:
@property (nonatomic, retain) UIFont *font;
@property (nonatomic, assign) CGFloat margins;
@property (nonatomic, assign) TextObjectStyle style;
@property (nonatomic, assign) CGColorRef color;
- (CGSize)size;
В доказательстве своей концепции я создал объект ReportView, который знаетрисовать объекты ReportObject, которые берут конкретный объект ReportObject и рисуют его в определенной точке.Так что мой drawRect хотел бы что-то вроде:
//pseudocode
drawRect: {
//get the current context
CGFloat startHeight = 0;
CGPoint point = CGPointMake(0, startHeight);
startHeight += [self drawReportTitle:currentContext atPoint:CGPointMake(0, point.y)].height;
point.y = startHeight;
startHeight += [self drawParagraph:currentContext withText:paragraphs atPoint:CGPointMake(0, point.y)].height;
point.y = startHeight;
}
Я начал пытаться сделать так, чтобы мой ReportView имел свойство NSArray *ReportObjectsArray
, а затем мой класс вызывающих программ установил это значение, а затем нарисовал мой ReportViewЭто.Я надеялся, что смогу сделать что-то вроде:
for (ReportView *r in self.ReportObjectsArray) {
startHeight += [self drawReportObject].height atPoint:CGPointMake(0, point.y;
point.y = startHeight
}
За исключением проблемы, которую я осознаю, мои собственные классы не знают, как рисовать себя.Я думаю, что помню этот образец в книге по Java, где класс знает, как рисовать себя.И это имеет смысл для меня.Однако проблема, с которой я столкнулся, была в конце, я хочу один UIView типа ReportView, который можно прокручивать в UIScrollView.Я не был уверен, должен ли каждый ReportObject иметь подкласс UIView вместо этого, а затем добавить каждый из этих объектов в UIView в scrollView как subView, а затем заставить его рисовать себя таким образом.Это лучший путь?Я не совсем уверен.Если это не так, какова моя альтернатива?Будет ли у всех моих классов метод рисования, но в нем он просто отправляет уведомление, а затем в своем классе ReportView я могу прослушивать эти уведомления и затем вызывать соответствующие методы рисования?Спасибо.