我的最終目標是使用Quartz將看起來像MS Word的報表繪製到UIView中,然後在UIScrollView中擁有該UIView。在iOS中設計繪圖類層次結構
我現在已經是一個頂級的報告對象,那麼它的孩子們報告的部分畫像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的ReportObjects,並在特定點繪製該對象。所以,我的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書中看到這種模式,在這本書中,班級知道如何繪製自己。這對我來說確實有意義。然而,我遇到的問題最終,我想要一個可在UIScrollView中滾動的ReportView類型的UIView。我不確定是否每個ReportObject應該繼承UIView的子類,然後將這些對象中的每一個作爲子視圖添加到scrollView的UIView中,然後讓它以這種方式繪製它自己。這是更好的方式嗎?我不太確定。如果不是,我的選擇是什麼?我會讓所有的類都有一個繪製方法,但是它只是發佈一個通知,然後在我的ReportView類中,我可以讓它監聽這些通知,然後調用相應的繪製方法?謝謝。