ios – 重新绘制时,“扩展”视图会闪烁

根据Apple文档,“为了帮助您的小部件看起来更新,系统会偶尔捕获您的小部件视图的快照.当小部件再次可见时,将显示最新的快照,直到系统使用视频的实时版本替换它“.

但是,我看到的是,在实时视图准备之前,快照已从屏幕上删除.这会导致闪存效果,其中旧快照被取消屏幕,视图为空白的分秒,然后出现新视图.

开发人员是否负责将快照和实时视图之间的转换无缝连接?如果是这样,那么背后的策略是什么呢?我没有任何方式直接控制这种转变.

我能够通过移动数据加载来大大减轻效果
widgetPerformUpdateWithCompletionHandler:并且在viewWillAppear中保留绘图,但是我每隔15(或更多)打开通知中心仍然看到一次闪光.

解决方法

我有这个同样的问题,最后弄清了我的小部件所带来的问题.事实证明,这与我对我的小部件生命周期的误解有关.

从文档中,我认为今天的视图会保持我的窗口小部件状态的“快照”,直到widgetPerformUpdateWithCompletionHandler方法完成处理程序成功调用为止.

这似乎并非如此.从我可以看到,“快照”仅在“今日视图”动画(用户拉下通知中心时)时使用.一旦今天的视图被加载和固定,您的小部件将从头开始加载(如果使用,则从xib充电)并调用viewDidLoad.此时,您应该使用缓存的数据(而不是Web请求)填充您的小部件.如果你不这样做,你会看到你的笔尖的临时数据.这是导致闪烁的原因.

当viewDidLoad完成时,widgetPerformUpdateWithCompletionHandler被调用,它允许您获取新数据.当获取新数据时,您应该调用完成处理程序并缓存数据,以便稍后从头开始(在viewDidLoad中)加载窗口小部件时可以使用该数据.

缓存数据的一种简单方法用户认值.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...