我正在尝试将tableView图层保存为图像,一切都按预期工作。
但是,它只会保存在视图中实际可见的tableView部分;如果tableView比显示长(并且你必须向下滚动才能看到它),那部分不会保存在创建的图像中
我确信我在这里忽略了一些东西,它不允许它保存当前视图之外的任何部分。我很感激有人指着我正确的方向。谢谢!
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *imageView = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(imageView, self, @selector(image:finishedSavingWithError:contextInfo:),nil);
答案 0 :(得分:1)
你有两种方法,一些比其他方法更好,各有利弊。
如果表视图的大小不是很大,您可以将其大小调整为内容大小,渲染然后将其恢复为原始大小。这很容易,但随着越来越多的单元格被添加到表视图中,在调整表视图大小时内存压力和CPU使用量也会增加,因为所有单元都需要加载并准备显示。
另一种选择是将内容切片为多个切片,并在最后加入切片,但将表视图的内容偏移设置为第一页,第二页等。这样可以节省内存,但不能保留CPU,因为需要配置单元格。此外,考虑到内容偏移,你有一个更难的任务就是将各个部分拼接在一起。
答案 1 :(得分:0)
我建议您只需在上下文中自定义绘制所有必要内容,而不是制作屏幕截图。这可能很复杂,但至少你不依赖于UI黑客攻击。此外,通过这种方法,您可以在不同的线程上执行绘图 - 因此您的应用程序不会冻结一段时间 - 当表视图很大时,这可能非常明显。
无论如何,我建议您不要修改当前的表格视图参数以制作屏幕截图 - 更好地为此创建额外的表格视图。
答案 2 :(得分:0)
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
此方法返回位图,其中包含您传递的选项。
第一个参数 size ,像素中的最终位图大小是 size 值,乘以 scale factor(在你的情况下 0.0f ,在你的情况下它意味着 1.0f )。 因此,使用此位图大小准备上下文时,您将永远无法获得整个 tableView位图。
尝试修改传递它的 size 参数self.tableView.bounds.size
要获取位图的大小(以像素为单位),必须将width和height值乘以scale参数中的值。