如何拍摄整个视图的iPhone屏幕截图,包括屏幕外的部分?

时间:2010-02-24 17:47:59

标签: iphone objective-c cocoa-touch uitableview

我有一个使用UITableView布局的应用程序。界面占用的不仅仅是屏幕,因此可以滚动到某些区域。我想要整个视图的截图(包括不可见区域)用于文档和征求客户的反馈。

是否有编程方式来获取整个视图的图像?我不认为设备上会有这样的方法,但可能有。

5 个答案:

答案 0 :(得分:6)

只是粘贴我在我的应用中使用的一些代码。它绘制了一个图像的视图(可能缩放)。 也许你可以通过programmaticaly滚动表格并将图像拼接在一起或类似的东西:

+ (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;
}

希望有所帮助

答案 1 :(得分:4)

您实际上可以滚动桌面视图。以下代码在我的应用程序中完美运行。 但制作屏幕截图可能需要白色。您可以参考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();

答案 2 :(得分:1)

在iphone上有一个表视图,没有“额外”区域可以滚动到。表格视图与屏幕一样大,当新单元格滚动到视图中时,它们是按需创建的,而在屏幕上滚动的旧单元格将被取消分配。

答案 3 :(得分:1)

As Jasarien said,UITableView没有屏幕外元素。这只是一个阶段错觉,创造了单个长元素的外观。

如果你想创建一个长(即屏幕外)表的图像,你should take screenshots of the table在不同的滚动位置,然后Photoshop / GIMP / insert-graphics-app将截图分成一个长图。

答案 4 :(得分:1)

截取整个表格视图的屏幕截图,而不仅仅是可见的单元格。这种方法不需要滚动表格视图并拍摄许多屏幕截图并将它们放在一起。

适用于表格视图页脚和标题。

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);