今天重绘时,扩展视图会闪烁

chr*_*rum 12 ios ios8-today-widget

根据Apple文档,"为了帮助您的窗口小部件查看最新版本,系统偶尔会捕获窗口小部件视图的快照.当窗口小部件再次可见时,将显示最新的快照,直到系统将其替换为视图的实时版本".

然而,我所看到的是,在准备实时视图之前,快照将从屏幕上删除.这会产生闪光效果,其中旧快照从屏幕上取下,视图在一瞬间为空白,然后出现新视图.

开发人员是否负责在快照和实时视图之间无缝转换?如果是这样,那背后的策略是什么?我认为没有办法直接控制这种转变.

通过将数据加载移动到widgetPerformUpdateWithCompletionHandler并在viewWillAppear:中保持绘图,我能够大大减轻这种影响,但我仍然会在通知中心每隔15(左右)打开一次闪存.

ben*_*lis 27

我有同样的问题,最后想出了我的小部件问题.事实证明这与我代表Widget生命周期的误解有关.

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

似乎并非如此.从我所看到的情况来看,"今日视图"动画时(当用户拉下通知中心时)就会使用"快照".一旦今天的视图被加载并且静止,你的小部件就从头开始加载(如果使用则从xib中膨胀)并被viewDidLoad调用.此时,您应该使用缓存数据(而不是Web请求)填充窗口小部件.如果不这样,您将看到笔尖的临时数据.这是导致闪烁的原因.

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

缓存数据的简单方法是用户默认值.