Wie man einen snapshot von UITableView im PDF-format
Ich habe eine UITableView
ist gefüllt mit einigen Daten, aber da es Daten enthält, die mehr Zellen als der sichtbare Bereich auf dem Bildschirm, habe ich nur geschafft, nur die Momentaufnahme, ich möchte wissen, ob es irgendeine andere Art und Weise kann ich das ganze tableview snapshot in pdf..dies ist, was ich versucht habe Dank
- (IBAction)clickMe:(id)sender
{
UIView *viewToRender = self.myTableView;
CGPoint contentOffset = self.myTableView.contentOffset;
UIGraphicsBeginImageContext(viewToRender.bounds.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
// KEY: need to translate the context down to the current visible portion of the tablview
CGContextTranslateCTM(ctx, 0, -contentOffset.y);
[viewToRender.layer renderInContext:ctx];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIImageView *myImage=[[UIImageView alloc]initWithImage:image];
UIGraphicsEndImageContext();
[self createPDFfromUIViews:myImage saveToDocumentsWithFileName:@"PDF Name"];
}
- (void)createPDFfromUIViews:(UIView *)myImage saveToDocumentsWithFileName:(NSString *)string
{
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, myImage.bounds, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
//draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData
[myImage.layer renderInContext:pdfContext];
//remove PDF rendering context
UIGraphicsEndPDFContext();
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:string];
NSLog(@"%@",documentDirectoryFilename);
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich weiß nicht, aber dieser code funktioniert wie ein Charme für mich..
Hier ist, wie Sie es tun können, ohne scrollen der tableview. Erhöhen Sie einfach die Höhe der scrollview die contentSize. Die Qualität der PDF ist auch besser, wenn Sie nicht über eine
UIImage
. Dies ist aus meinerUITableView
Erweiterung in Swift. Der code ist von hier geklaut und dort so die Kommentare sind nicht immer meins.Gibt es keine offscreen-Zellen, da Sie recycelt werden, sobald Sie scrollen aus dem sichtbaren Bildschirm. Stattdessen screenshoting der UITableView, sollten Sie erwägen, eine PDF-version mit Core Text. Vielleicht können Sie sich diese Beispiel.
Basierend auf Vin ' s Antwort (kann auch verwendet werden, für Snapshots UIScrollViews):
Ich denke, dass jeder vergisst, dass
UITableView
ist einUIScrollView
nachdem alle. Es gibt keine Notwendigkeit, zu berechnen, Zellen, Höhe usw. Sie können einfach erstellen Sie Ihre Zusammenhang mit dercontentSize
legentableView.frame.size = tableView.contentSize
- und render-context.Bitte sehen Sie sich dieses Beispiel