如何捕获 UITableView / UIScrollView 完整内容的 UIImage 并使其在 ios 设备上工作

2024-05-26

我正在使用这段非常优雅的代码获取 UIScrollView 的屏幕截图,包括屏幕外部分 https://stackoverflow.com/questions/3539717/getting-a-screenshot-of-a-uiscrollview-including-offscreen-parts捕获要导出到 UIImage 的 UITableView 的全部内容。

UIGraphicsBeginImageContextWithOptions(self.controller.tableView.contentSize, YES, 0);
{
    CGPoint savedContentOffset = self.controller.tableView.contentOffset;
    CGRect savedFrame = self.controller.tableView.frame;

    self.controller.tableView.contentOffset = CGPointZero;
    self.controller.tableView.frame = CGRectMake(0, 0, self.controller.tableView.contentSize.width, self.controller.tableView.contentSize.height);

    [self.controller.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();

    self.controller.tableView.contentOffset = savedContentOffset;
    self.controller.tableView.frame = savedFrame;
}

UIGraphicsEndImageContext();

它在模拟器中运行得非常好,但是,当我在 iOS 设备(iphone 4s)上运行此代码时,调用此方法时会出现以下错误:

[self.controller.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];

Errors:

Error: CGContextTranslateCTM: invalid context 0x2924b0
Error: CGContextDrawImage: invalid context 0x2924b0
Error: CGContextRestoreGState: invalid context 0x2924b0
Error: CGContextSaveGState: invalid context 0x2924b0
Error: CGContextScaleCTM: invalid context 0x2924b0
Error: CGContextClipToRect: invalid context 0x2924b0
etc...

当表视图内容大小在其范围内时,此代码运行良好,但一旦它大于其范围(即使是 1 像素),它就会进入上述错误的无限循环。但这仅发生在设备上。不是模拟器。

有任何想法吗?


事实证明,使用 [UIImage ..] ressizedImageWithCapInsets] 方法并将其应用于单元格背景视图并调整框架会导致在实际设备上发生各种奇怪的问题,但在模拟器上却不会。

恢复到已弃用的 [UIImage ..]stretchableImageWithLeftCapWidth:topCapHeight:] 方法解决了这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何捕获 UITableView / UIScrollView 完整内容的 UIImage 并使其在 ios 设备上工作 的相关文章

随机推荐

  • 仅选择 SQL 关系中的最大值?

    我有以下两个关系 Game id name year Devs pid gid role 其中 Game id 是主键 Devs gid 是 Game id 的外键 我想编写一个 SQL 查询来查找参与该游戏的人数最多的游戏 我写了以下查询
  • Spark on Hive SQL 查询错误 NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

    针对 Hive 2 1 0 提交 Spark 1 6 0 SQL 应用程序时出现错误 Exception in thread main java lang NoSuchFieldError HIVE STATS JDBC TIMEOUT a
  • 为每个键使用主题中的最新值

    我有一个 Kafka 生产者 它正在以高速率生成消息 消息键是用户名 值是他在游戏中的当前分数 Kafka消费者处理消费消息的速度相对较慢 在这里 我的要求是显示最新的分数并避免显示陈旧的数据 但代价是某些分数可能永远不会显示 本质上 对于
  • 使用 ABCMeta 和 EnumMeta 的抽象枚举类[重复]

    这个问题在这里已经有答案了 简单的例子 目标是通过从两者派生的元类创建一个抽象枚举类abc ABCMeta and enum EnumMeta 例如 import abc import enum class ABCEnumMeta abc
  • Flutter:列表已弃用? [复制]

    这个问题在这里已经有答案了 升级到最新版本的 flutter 后 我的所有列表都收到弃用警告 List
  • Flamingo 更新后无法在 Android Studio 中构建 Java 或 Kotlin 项目 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 火烈鸟更新后无法创建项目 它显示一些错误 未找到 com android tools build gradle 8 0 0 的匹配变体 消费
  • 更改文件名时,录制开始会延迟 3 秒。

    在图中使用两个 ASFWriter 过滤器 一个正在制作 wmv 文件 另一个用于直播 进行流式传输 更改文件名时 录制开始会延迟 3 秒 所以 一个New WMV的头部丢失了 很烦恼啊 CAMERA InfTee 过滤器 AsfWrite
  • 使用 ExtendedExecutionSession 或 ExtendedExecutionForegroundSession 暂停 UWP

    UWP 我无法禁用暂停 我需要你的知识 这是我的简单例子来了解问题 这是计数器增加 减少应用程序 实际上 我想 356 x 24 小时不间断地监控设备的温度 我希望在挂起模式下增加 value 但 UWP 在挂起期间不起作用 Why 上传的
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • 在此异步设置中,我在哪里捕获 KeyboardInterrupt 异常

    我正在开发一个使用ccxt异步库 它要求通过显式调用该类的资源来释放某个类使用的所有资源 close 协程 我想退出程序ctrl c并等待异常中的关闭协程 然而 它永远不会被等待 该应用程序由模块组成harvesters strategie
  • 使用 South 更改 Django 模型列默认值

    我在 Django 项目中使用 South 和 Postgresql DB 我想更改一个模型字段的默认值以供继续使用 我不需要以前的记录 刚刚新记录 我是否需要为此进行迁移 或者只是更改模型 旧场详细信息 background style
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • 如何限制表格中显示的行数?

    我有一个数据源 一个数据集和一个数据立方体 数据立方体有一个组和一个带有计数功能的汇总字段 在报告中 我有一个按该摘要字段排序的表格 该表有很多行 1000 但我只想显示前 5 行 如何限制显示的行数 表和交叉表都有一个 top N 运算符
  • 附加带有 div 值的输入文本字段

    我正在尝试附加一个输入文本字段及其值作为 div 的值 这是我到目前为止所想到的 this append
  • kombu.exceptions.EncodeError:用户不可 JSON 序列化

    我有 django 1 11 5 应用程序和 celery 4 1 0 我一直收到 kombu exceptions EncodeError
  • 相机校准:如何正确进行

    我正在尝试使用棋盘格通过众所周知的张氏方法进行校准 然后进行捆绑调整 该方法在 Matlab 和 OpenCV 中都可用 有很多经验指南 但从我个人的经验来看 准确性是相当随机的 它有时可能非常好 但有时也可能非常糟糕 实际上 只需将棋盘放
  • R 中的闭包类似于 Python

    首先考虑以下 Python 代码 该代码计算函数被调用的次数 def counter fn count 0 def inner args kwargs nonlocal count count 1 print Function 0 was
  • 具有多种类型属性的 HTML5 输入

    我们的表单软件输出所有带有 type text 的元素 但我宁愿利用 HTML5 中的新类型 例如 电子邮件 数字 等 我可以在最后添加这些 但最终会得到多个类型属性 例如
  • 将 R 中的 arules 生成的规则应用于新交易

    我的目标是使用 R 包生成的规则arules来预测topic每个事务 每个事务有 1 个主题 其中每个事务是文档中的一组单词 我有一个训练集trans train 用于创建规则 和测试集trans test 我想预测它的 主题 我还希望能够
  • 如何捕获 UITableView / UIScrollView 完整内容的 UIImage 并使其在 ios 设备上工作

    我正在使用这段非常优雅的代码获取 UIScrollView 的屏幕截图 包括屏幕外部分 https stackoverflow com questions 3539717 getting a screenshot of a uiscroll