设置图像属性时,UIImageView 图像不会明显更新

2023-11-29

我有一个 UIImageView,其用户交互是真实的,并且我为其提供了点击手势识别器,其操作处理程序如下:

@IBAction func tap(_ sender:UITapGestureRecognizer) {
    let iv = sender.view as! UIImageView
    let im = iv.image!
    let im2 = UIGraphicsImageRenderer(size:im.size).image { _ in
        UIColor.red.setFill()
        UIBezierPath(rect: CGRect(origin:.zero, size:im.size)).fill()
    }
    iv.image = im2
}

我希望当我点击图像视图时显示的图像会被纯红色图像替换。这在我运行 Xcode 9.4 的 High Sierra 机器上运行良好。但在我运行 Xcode 9.2 的 Sierra MacBook 上,没有任何明显的变化。

有点奇怪。通过在调试器中暂停,我可以看到新图像正在正确构建:

enter image description here

图片is被替换,但图像视图没有被重绘。添加像这样的调用setNeedsDisplay什么也没做。

此外,如果我随后继续将图像视图的图像替换为不同的图像,我看到red image!

    iv.image = im2
    delay(0.5) {
        iv.image = im // causes im2 to appear!
    }

某种幕后缓存显然导致图像视图在显示时落后于一张图像。

谁能阐明这一点?这可能是 iOS 本身的一个错误,也许是 9.2 中的一个错误;如何解决这个问题? (显然,可以批量替换另一种图像视图,但这并不能告诉我们缓存发生了什么。)


这似乎是一个解决方法:

iv.image = im2
delay(0.05) {
    iv.image = nil
    iv.image = im2
}

但这真是太可怕了……省略任何这些作业,或者减少delay为零(例如通过调用DispatchQueue.main.async相反),导致解决方法失败。

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

设置图像属性时,UIImageView 图像不会明显更新 的相关文章

随机推荐

  • ffmpeg 中的 mp3 音频 + 背景.jpg = 结果.mp4

    将视频转换为 mp4 以上传到 YouTube 时遇到问题 我已使用以下命令转换为 avi 格式 ffmpeg y i background jpg i deepmix mp3 c a copy result avi 但是当我将其上传到 y
  • 如何使用 JDBC 调用 PostgreSQL 存储过程

    我正在使用 postgresql 并且创建了一些存储过程 现在我想通过jdbc访问存储过程并处理结果 存储过程的结果是整数或表 我发现了以下内容 CallableStatement upperProc conn prepareCall ca
  • 如何将两个打包的 64 位四字加载到 128 位 xmm 寄存器中

    我有两个 UInt64 即 64 位四字 整数 它们与 8 字节对齐 sizeof UInt64 边界 如果这对任何事情有用的话 我也可以将它们对齐到 16 字节 它们被挤在一起 所以它们在内存中是并排的 我如何将它们加载到 xmm 寄存器
  • substr() 未按预期工作

    我只是想提取日期year month and day分开 以便我可以按照我的意愿使用它 我将当前日期存储在 today并使用substr 从中提取字符串 但我从我所做的事情中得到了一些奇怪的行为 我当前的代码 today date Y m
  • iOS 自定义导航栏后退按钮标题在点击时消失

    你好 StackOverflow 社区 我有一个相当奇怪的情况 导航控制器的导航栏上的自定义后退按钮在交互时消失 一些附加信息是我的代码没有使用 Storyboard 而是使用 UIKit 包括 UI 在内的所有内容都是以编程方式构建的 这
  • 如何在另一种方法中使用一种方法的“返回”值

    我目前正在开发这个玩高低骰子游戏的项目 我被困在如何使用返回的char from getHighLow和返回的int from getBet and getRoll in determineWinnings 这是我目前学习 Java 的第一
  • 如何在软件中模拟浮点运算? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 当CPU没有 或有问题 浮点单元时 软件如何执行浮点运算 例如 PIC AVR 和 8051 微控制器架构 效仿 在 PIC AVR 和 8051 上下文中 浮点 是错误的术语
  • 确保字符串文字联合属于对象的键

    export type A a b c const obj a 4 b 5 c 6 d 7 我如何确保所有元素A是对象的键obj 根据您的需要 您可以自动构造您的类型 所有键作为一个类型 您可以使用keyof将所有密钥作为一个联合体 自从k
  • 如何根据 Javascript 中的多个键对对象数组进行分组?

    我的数组如下 WarehouseId 1 ShippingCarrierId 1 PostalCodeType ShipToCustomer TimeStart 1970 01 01T06 00 00 000Z TimeEnd 1970 0
  • 使用 jQuery AJAX 发送带有二进制数据的 FormData

    我想发送一个FormData通过使用 jQuery AJAX 例如 var uploadFormData new FormData uploadFormData append name value ajax url URL target t
  • 当我返回时,控制到达非空函数的末尾[重复]

    这个问题在这里已经有答案了 我有一个函数 它递归地调用自身 直到连接到服务器 然后函数返回0 为什么我有这样的错误行为 控制到达非空函数的末尾 指向函数结束的行 我做错了什么 我有 if else 语句 仅在 else 中返回 但即使在 i
  • 为什么 Rust 允许在一个作用域中两次声明相同的变量名? [复制]

    这个问题在这里已经有答案了 我第一次遇到允许在同一范围内声明变量名称两次的类型化语言 难道不会有机会错误地覆盖现有变量吗 它带来什么优势 有书中有一章介绍了这一点 隐藏与将变量标记为 mut 不同 因为如果我们不小心尝试在不使用 let 关
  • 从公共方法调用私有方法?

    我定义了一个这样的类 function Class1 this Func1 function Methods and vars function Func2 Methods and vars 我想找到一种从私有方法 Func2 调用公共方法
  • 在 vbscript 中使用 HTA

    在使用 VBscript 的 HTA 用户窗体时 我发现 HTA 不支持 WScript 及其对象 方法 是否有其他创建用户表单的方法 或者有什么方法可以使 HTA 支持 WScript 替代方案WScript Echo就是简单地将内容添加
  • 如何在 Openmodelica 中指定介质?

    我正在 Modelica 中模拟热泵热水系统 我附上了我的模特的照片 但是 当我运行模型时 出现错误 Medium 是部分的 部分类中不允许进行名称查找 您能告诉我吗 我该如何指定水箱 热泵冷凝器和管道中的水 我应该如何指定热泵蒸发器中的空
  • 使用包含通配符条件的数组时出现问题

    我一直在尝试运行 powershell 代码将文件分成 2 个 我有几个常规数组 效果很好 第三个数组包含每个条件的通配符 但这根本不起作用 我尝试过 in notin like notlike contains notcontains m
  • 如何最大程度地划分集合?

    我正在尝试解决欧拉计划问题之一 因此 我需要一种算法来帮助我以任意顺序找到集合中所有可能的分区 例如 给定集合2 3 3 5 2 3 3 5 2 3 3 5 2 3 3 5 2 3 3 5 2 5 3 3 等等 几乎该组成员的所有可能组合
  • MPMoviePlayer 控制风格

    我想使用以下代码隐藏 MPMoviePlayer 中的控件 IBAction video id sender NSBundle bundle NSBundle mainBundle NSString moviePath bundle pat
  • 如何在宏中获取当前命名空间的字符串

    我需要在宏中添加名称空间前缀 IE define MYMACRO x x namespace A namespace B MYMACRO C 并且 MYMACRO 必须返回 A B C 无法工作 命名空间由编译器识别 编译器仅在预处理器之后
  • 设置图像属性时,UIImageView 图像不会明显更新

    我有一个 UIImageView 其用户交互是真实的 并且我为其提供了点击手势识别器 其操作处理程序如下 IBAction func tap sender UITapGestureRecognizer let iv sender view