【发布时间】:2011-01-20 15:43:53
【问题描述】:
我有一个使用 UITableView 布局的应用程序。界面占用的不仅仅是屏幕,所以有一些区域可以滚动到。我想要整个视图(包括不可见区域)的一些屏幕截图,用于记录和征求客户的反馈。
是否有编程方式来获取整个视图的图像?我认为设备上没有办法做到这一点,但也许有。
【问题讨论】:
标签: iphone objective-c cocoa-touch uitableview
我有一个使用 UITableView 布局的应用程序。界面占用的不仅仅是屏幕,所以有一些区域可以滚动到。我想要整个视图(包括不可见区域)的一些屏幕截图,用于记录和征求客户的反馈。
是否有编程方式来获取整个视图的图像?我认为设备上没有办法做到这一点,但也许有。
【问题讨论】:
标签: iphone objective-c cocoa-touch uitableview
使用 iphone 上的表格视图,没有“额外”区域可以滚动到。表格视图与屏幕一样大,当新单元格滚动到视图中时,它们是按需创建的,而滚动到屏幕外的旧单元格则被释放。
【讨论】:
As Jasarien said,UITableView 没有离屏元素。这只是一个舞台幻觉,创造了单个长元素的外观。
如果你想创建一个长(即离屏)表格的图像,你 should take screenshots of the table 在不同的滚动位置,然后 Photoshop/GIMP/insert-graphics-app 将屏幕截图应用到一个长图形中。
【讨论】:
只是粘贴一些我在我的应用程序中使用的代码。它绘制图像的视图(可能缩放)。 也许您可以以编程方式滚动表格并将图像最后拼接在一起或类似的东西:
+ (UIImage *)captureView: (UIView *)view inSize: (CGSize)size
{
UIGraphicsBeginImageContext(size);
CGSize viewSize = view.frame.size;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM( context, size.width/viewSize.width, size.height/viewSize.height);
[view.layer renderInContext: UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
希望对你有帮助
【讨论】:
您实际上可以滚动表格视图。以下代码在我的应用程序中完美运行。 但是制作屏幕截图可能需要白色。你可以参考this看看有没有人改进。
//viewController is your UITableViewController
UIGraphicsBeginImageContext(viewController.tableView.contentSize);
[viewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
[viewController.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];
int rows = [viewController.tableView numberOfRowsInSection:0];
int numberofRowsInView = 7;
for (int i =0; i < rows/numberofRowsInView; i++) {
[viewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(i+1)*numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
[viewController.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
【讨论】:
截取整个表格视图,而不仅仅是可见单元格。这种方法不需要滚动表格视图并截取许多屏幕截图并将它们放在一起。
适用于表格视图的页脚和页眉。
CGRect frame = _tableView.frame;
frame.size.height = _tableView.contentSize.height;//the most important line
_tableView.frame = frame;
UIGraphicsBeginImageContext(_tableView.bounds.size);
[_tableView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * data = UIImagePNGRepresentation(image);
【讨论】: