以上都是使用 Image 加载本地图片资源,但是 SwiftUI 中的 Image 没有提供直接加载 URL 方式的图片显示,那么如何在 SwiftUI 中让 Image 加载网络图片呢,可以采用异步加载网络图片数据,由 data 转换成 UIimage ,再给 Image 展示
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了庆城免费建站欢迎大家使用!
但是这种异步加载图片的方式在 Widget 中却失效了, Image 显示不了图片。
在 TimelineProvider 的 getTimeline 中 completion(timeline) 执行完之后,不再支持图片的异步回调了,所以必须在数据请求回来的处理中采用同步方式,将图片的 data 获取,转换成 UIimage ,在赋值给 Image 展示。
接下里给 iOS14 Widget小组件开发实践2——自定义Widget 里搭建的古诗视图增加一个网络封面图片显示,效果如下:
因为这个免费的 API 接口没有返回图片封面数据,所以就自己网上找个图片用来测试。关于图片请求的时机,这里我是将它放在了 API 接口回调后处理 json 转 model 的这一步:
最后在给 PoetryWidgetView 布局界面:
SwitUI-实现URL图片显示
在ios 10升级前,记得系统提示说,这可能是一次划时代意义的升级(大意),虽然这样的语气实在不像苹果的一贯作风。
然而升级若干天之后,带来最多惊喜的,不是被传说已久的iMessage 新功能,而是Today Widget ,就是那个手机解锁或不解锁,将主页面向右滑动都会出现的界面。
是的,不需要解锁,就可以直接确认这些app的界面,同时还可以直接进行操作
你无需再依次打开这些时间管理app,就可以得到提示,你当下时间你应该做什么,还有多久下班,你已经工作了多久,接下来本日的重要事项是什么。
可以自行定义的Today Widget,就像一台可以打开多个窗口同时管理数个软件的电脑桌面一样,你可以同时看到多个app界面并列,并以此来管理你的时间与待办事项。
虽然它被很多人抱怨说充满安卓风,然而对于一个从未使用过安卓手机的人来说,实在是惊喜连连。
在可编辑的Widget中,我很快删掉了天气和股市,Widget可以很方便时时确认,既然不是天气爱好者及股市爱好者,将这样黄金的位置,用来不停地看天气和股市,实在是太浪费了。
每一个接受时间管理概念的人,总希望拥有一件趁手的兵器——它可以 时时携带、时时提醒、时时追踪、还可以时时变更,并且反复修改之后它也依然整洁如新、井然有序、一目了然 ——这个以前没怎么听说过的Widget,正是这样一件趁手的兵器。
苹果默认的Widget排在第一位的是ical,ical一直是苹果自带的日历,但却也是我最少使用的日历。
虽然各种鸡肋,但它至少提供了色彩区分的时间轴。
大部分时候,你不但需要知道现在几点几分,你还需要知道你在一天的时间地图中所处的位置,并且你接下来将要去往哪里。
你需要了解此刻的你手中拥有多少时间资源,有多少属于工作,有多少属于家人,有多少属于你自己。
ical 正是提供了这样一张地图,当然需要你自己预先规划好,它可以将你的时间明确划分为不同段落(可参照 《最简单的时间规划原则》 ),尤其是对于需要分担职人、炊事员、写作者等多个不同角色的人们来说,它可以明确地提示情景,让你专念于当下,不至为另外的角色所扰。
没有使用倒计时方法来计算的时间,总会显得很充裕。时间是取之不尽用之不竭的资源。未来总在无穷遥远处,我们的时间似乎多到任意多。
而倒计时app,则提示你的时间正如沙漏中的沙在不断减少,一天到了17:39分,和一天已经经过了73%,给人们带来心理体验显然不同。
每次看到手机的widget画面时,AT的进度条又向前挪动了一截,这一天的渲染又完成了一部分,你所拥有的时间资源每分每秒都在减少。
因为了解了正在失去,你才会努力挽留。
如果说你在ical上做出的时间规划像是你的日程的效果图;那么你在aTimeLogger 2上记录下的则是你日程的实景图。
假若不是aTimeLogger 2为你的每一天绘出一张圆饼图,你不会知道你是怎样失去这些时间。
把它放到widget上的好处是,你不需要进入app的界面,就可以迅速变更aTimeLogger 2中的时间类别计时。
你可以在OmniFocus 的设置中,自定义在widget上显示的内容,我选择了两项:
1,“今天截止”的内容:它们代表今天必须完成的事件。
2,已标注的任务:没有具体的截止日期,但是非常重要,使用橙色旗标。这样,一旦必需完成的任务已经完成,你就可以优先完成这些标注的任务。
提醒事项又是一个充满鸡肋感的原生app,作为一个“提醒事项”,它实在是太不好用了。
但是好在,它可以被放入到Widget之中,并且会显示计划为今天实施的内容。
本来,我使用HibitBull来管理新习惯,可惜它现在还不能放到Widget上,所以姑且使用这个原生版的提醒事项。
iOS 10 正式推出之后,几乎每天都有新的app加入这个可编辑队列之中。
你完全可以使用其中的应用,创建你个人用途的Widget,不唯时间管理,或许还可以是语言学习、阅读写作等等诸多领域,让你的想象力来做决定吧。
●苹果手机iOS10版本添加widget:向右滑动屏幕至通知中心--拉到底部点击“编辑”--按需要添加的应用插件左侧的“添加”按钮--按右上角“完成”
●苹果手机iOS10版本关闭widget:向右滑动屏幕至通知中心--拉到底部点击“编辑”--按需要删除的应用插件左侧的“删除”按钮--移除--按右上角“完成”
●苹果手机iOS10版本调整widget位置:向右滑动屏幕至通知中心--拉到底部点击“编辑”--按住应用插件右侧的滑块可以移动插件位置--按右上角“完成”
Widget不是一个小型的App,它是一种新的桌面内容展现形式,展示在Home Screen上,能快速提供用户关心的内容是重点,主要用于弥补主App无法及时展示用户所关心的数据。
优秀的Widget有三个特点:
具体图片尺寸
苹果提供Widget的可配置能力
Widget的UI是无状态的
唯一支持的只有用户点击和DeepLink唤起主app
Widget的核心是Timeline,即一条时间线,在对应的时间点展示对应的UI
时间线由一个或多个时间线入口TimelineEntry以及一个重载策略ReloadPolicy组成,该重载策略会通知WidgetKit何时请求后续时间线。
重载策略(接下来这段时间Timeline的刷新策略)有以下几种策略:
Widget的刷新完全由WidgetCenter控制。需要通过生成一个新的时间线来替换旧的时间线,Reload Timeline并不是直接刷新Widget,而是WidgetCenter重新请求下一个时间线的数据。
系统提供两种方式来刷新Timeline:
示例:每5分钟刷新一下时间线
根据官方文档的描述,点击 Widget 窗口唤起 APP 进行交互指定跳转支持两种方式:
Widget 支持三种显示方式,分别是 systemSmall 、 systemMedium 、 systemLarge ,其中:
1、 systemSmall 只能用 widgetURL 修饰符实现URL传递接收。
2、 systemMedium 、 systemLarge 可以用 Link 或者 widgetUrl 处理
这两种方式的本质都是 URL Schemes
在查找资料的时候,看到网上有的地方说在 AppDelegate 实现 OpenUrl 进行跳转处理:
然而试了之后发现根本没有响应,其实是需要在 SceneDelegate 里面实现跳转处理,因为 iOS13 后, APP 的 UI 生命周期交由 SceneDelegate 管理,这里拿到需要的 URL ,就能处理产品需求实现了。
creating-a-widget-extension
iOS13 URL Schemes 跳转与传值问题