我已經撰寫了pdfGenerator類來呈現整個UITableView以生成PDF。iOS:將UITableView渲染爲PDF
用法:
[pdfGenerator createPDFFromTableview:self.tableView];
類方法:
- (void)createPDFFromTableview:(UITableView *)tableview {
[tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
[self renderTableView:tableview];
int rows = [tableview numberOfRowsInSection:0];
int numberofRowsInView = 17;
for (int i = 0; i < rows/numberofRowsInView; i++) {
[tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(i+1)*numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
[self renderTableView:tableview];
}
}
- (void)renderTableView:(UITableView*)tableview {
UIGraphicsBeginImageContext(tableview.frame.size);
[tableview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *tableviewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginPDFPage();
[tableviewImage drawInRect:tableview.frame];
}
正確
此代碼滾動的tableview,但它僅適用於第一頁和其餘的網頁創建PDF來了空白!我不知道爲什麼會發生這種情況,它應該將當前的uitableview快照視爲並渲染,但它似乎只對第一頁執行此操作。有人能指出什麼可能是錯的嗎?有沒有更好的方法來做我想要達到的目標?
[編輯]
以下給出了相同的結果;
int totalRows = [tableview numberOfRowsInSection:0];
int totalVisibleRows = 17;
for (int i = 0; i < ceil((float)totalRows/totalVisibleRows); i++) {
[tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i * totalVisibleRows inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
[pdfGenerator renderTableView:tableview indexPathStart:[NSIndexPath indexPathForRow:i * totalVisibleRows inSection:0] indexPathEnd:[[tableview indexPathsForVisibleRows] lastObject]];
}
- (void)renderTableView:(UITableView*)tableview indexPathStart:(NSIndexPath *)startingIndexPath indexPathEnd:(NSIndexPath *)endIndexPath {
CGRect rectToDraw = CGRectUnion([tableview rectForRowAtIndexPath:startingIndexPath], [tableview rectForRowAtIndexPath:endIndexPath]);
NSLog(@"%@", NSStringFromCGRect(rectToDraw));
UIGraphicsBeginImageContext(rectToDraw.size);
[tableview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *tableviewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginPDFPage();
[tableviewImage drawInRect:rectToDraw];
}
輸出rectToDraw:
{{0, 0}, {768, 720}}
{{0, 680}, {768, 720}}
{{0, 1360}, {768, 720}}
{{0, 2040}, {768, 360}}
我不確定你的意思,但是在我的情況下,在滾動tableview之前和之後indexpath總是相同的,即0到16(因爲一次總共有17行)。滾動之後,它們也會像重用細胞一樣。只是內容會有所不同,這是我感興趣的內容。我錯過了一些嗎?你可以通過給出示例代碼更加精確。 – applefreak
它給出了相同的結果。請參閱編輯的問題。感謝您對此問題的關注。 – applefreak