根据Apple文档,“为了帮助您的小部件看起来更新,系统会偶尔捕获您的小部件视图的快照.当小部件再次可见时,将显示最新的快照,直到系统使用视频的实时版本替换它“.
但是,我看到的是,在实时视图准备之前,快照已从屏幕上删除.这会导致闪存效果,其中旧快照被取消屏幕,视图为空白的分秒,然后出现新视图.
开发人员是否负责将快照和实时视图之间的转换无缝连接?如果是这样,那么背后的策略是什么呢?我没有任何方式直接控制这种转变.
我能够通过移动数据加载来大大减轻效果
widgetPerformUpdateWithCompletionHandler:并且在viewWillAppear中保留绘图,但是我每隔15(或更多)打开通知中心仍然看到一次闪光.
解决方法
我有这个同样的问题,最后弄清了我的小部件所带来的问题.事实证明,这与我对我的小部件生命周期的误解有关.
从文档中,我认为今天的视图会保持我的窗口小部件状态的“快照”,直到widgetPerformUpdateWithCompletionHandler方法完成处理程序成功调用为止.
这似乎并非如此.从我可以看到,“快照”仅在“今日视图”动画(用户拉下通知中心时)时使用.一旦今天的视图被加载和固定,您的小部件将从头开始加载(如果使用,则从xib充电)并调用viewDidLoad.此时,您应该使用缓存的数据(而不是Web请求)填充您的小部件.如果你不这样做,你会看到你的笔尖的临时数据.这是导致闪烁的原因.
当viewDidLoad完成时,widgetPerformUpdateWithCompletionHandler被调用,它允许您获取新数据.当获取新数据时,您应该调用完成处理程序并缓存数据,以便稍后从头开始(在viewDidLoad中)加载窗口小部件时可以使用该数据.