以上都是使用 Image 加載本地圖片資源,但是 SwiftUI 中的 Image 沒有提供直接加載 URL 方式的圖片顯示,那么如何在 SwiftUI 中讓 Image 加載網(wǎng)絡(luò)圖片呢,可以采用異步加載網(wǎng)絡(luò)圖片數(shù)據(jù),由 data 轉(zhuǎn)換成 UIimage ,再給 Image 展示
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了慶城免費(fèi)建站歡迎大家使用!
但是這種異步加載圖片的方式在 Widget 中卻失效了, Image 顯示不了圖片。
在 TimelineProvider 的 getTimeline 中 completion(timeline) 執(zhí)行完之后,不再支持圖片的異步回調(diào)了,所以必須在數(shù)據(jù)請(qǐng)求回來(lái)的處理中采用同步方式,將圖片的 data 獲取,轉(zhuǎn)換成 UIimage ,在賦值給 Image 展示。
接下里給 iOS14 Widget小組件開發(fā)實(shí)踐2——自定義Widget 里搭建的古詩(shī)視圖增加一個(gè)網(wǎng)絡(luò)封面圖片顯示,效果如下:
因?yàn)檫@個(gè)免費(fèi)的 API 接口沒有返回圖片封面數(shù)據(jù),所以就自己網(wǎng)上找個(gè)圖片用來(lái)測(cè)試。關(guān)于圖片請(qǐng)求的時(shí)機(jī),這里我是將它放在了 API 接口回調(diào)后處理 json 轉(zhuǎn) model 的這一步:
最后在給 PoetryWidgetView 布局界面:
SwitUI-實(shí)現(xiàn)URL圖片顯示
在ios 10升級(jí)前,記得系統(tǒng)提示說(shuō),這可能是一次劃時(shí)代意義的升級(jí)(大意),雖然這樣的語(yǔ)氣實(shí)在不像蘋果的一貫作風(fēng)。
然而升級(jí)若干天之后,帶來(lái)最多驚喜的,不是被傳說(shuō)已久的iMessage 新功能,而是Today Widget ,就是那個(gè)手機(jī)解鎖或不解鎖,將主頁(yè)面向右滑動(dòng)都會(huì)出現(xiàn)的界面。
是的,不需要解鎖,就可以直接確認(rèn)這些app的界面,同時(shí)還可以直接進(jìn)行操作
你無(wú)需再依次打開這些時(shí)間管理app,就可以得到提示,你當(dāng)下時(shí)間你應(yīng)該做什么,還有多久下班,你已經(jīng)工作了多久,接下來(lái)本日的重要事項(xiàng)是什么。
可以自行定義的Today Widget,就像一臺(tái)可以打開多個(gè)窗口同時(shí)管理數(shù)個(gè)軟件的電腦桌面一樣,你可以同時(shí)看到多個(gè)app界面并列,并以此來(lái)管理你的時(shí)間與待辦事項(xiàng)。
雖然它被很多人抱怨說(shuō)充滿安卓風(fēng),然而對(duì)于一個(gè)從未使用過(guò)安卓手機(jī)的人來(lái)說(shuō),實(shí)在是驚喜連連。
在可編輯的Widget中,我很快刪掉了天氣和股市,Widget可以很方便時(shí)時(shí)確認(rèn),既然不是天氣愛好者及股市愛好者,將這樣黃金的位置,用來(lái)不停地看天氣和股市,實(shí)在是太浪費(fèi)了。
每一個(gè)接受時(shí)間管理概念的人,總希望擁有一件趁手的兵器——它可以 時(shí)時(shí)攜帶、時(shí)時(shí)提醒、時(shí)時(shí)追蹤、還可以時(shí)時(shí)變更,并且反復(fù)修改之后它也依然整潔如新、井然有序、一目了然 ——這個(gè)以前沒怎么聽說(shuō)過(guò)的Widget,正是這樣一件趁手的兵器。
蘋果默認(rèn)的Widget排在第一位的是ical,ical一直是蘋果自帶的日歷,但卻也是我最少使用的日歷。
雖然各種雞肋,但它至少提供了色彩區(qū)分的時(shí)間軸。
大部分時(shí)候,你不但需要知道現(xiàn)在幾點(diǎn)幾分,你還需要知道你在一天的時(shí)間地圖中所處的位置,并且你接下來(lái)將要去往哪里。
你需要了解此刻的你手中擁有多少時(shí)間資源,有多少屬于工作,有多少屬于家人,有多少屬于你自己。
ical 正是提供了這樣一張地圖,當(dāng)然需要你自己預(yù)先規(guī)劃好,它可以將你的時(shí)間明確劃分為不同段落(可參照 《最簡(jiǎn)單的時(shí)間規(guī)劃原則》 ),尤其是對(duì)于需要分擔(dān)職人、炊事員、寫作者等多個(gè)不同角色的人們來(lái)說(shuō),它可以明確地提示情景,讓你專念于當(dāng)下,不至為另外的角色所擾。
沒有使用倒計(jì)時(shí)方法來(lái)計(jì)算的時(shí)間,總會(huì)顯得很充裕。時(shí)間是取之不盡用之不竭的資源。未來(lái)總在無(wú)窮遙遠(yuǎn)處,我們的時(shí)間似乎多到任意多。
而倒計(jì)時(shí)app,則提示你的時(shí)間正如沙漏中的沙在不斷減少,一天到了17:39分,和一天已經(jīng)經(jīng)過(guò)了73%,給人們帶來(lái)心理體驗(yàn)顯然不同。
每次看到手機(jī)的widget畫面時(shí),AT的進(jìn)度條又向前挪動(dòng)了一截,這一天的渲染又完成了一部分,你所擁有的時(shí)間資源每分每秒都在減少。
因?yàn)榱私饬苏谑ィ悴艜?huì)努力挽留。
如果說(shuō)你在ical上做出的時(shí)間規(guī)劃像是你的日程的效果圖;那么你在aTimeLogger 2上記錄下的則是你日程的實(shí)景圖。
假若不是aTimeLogger 2為你的每一天繪出一張圓餅圖,你不會(huì)知道你是怎樣失去這些時(shí)間。
把它放到widget上的好處是,你不需要進(jìn)入app的界面,就可以迅速變更aTimeLogger 2中的時(shí)間類別計(jì)時(shí)。
你可以在OmniFocus 的設(shè)置中,自定義在widget上顯示的內(nèi)容,我選擇了兩項(xiàng):
1,“今天截止”的內(nèi)容:它們代表今天必須完成的事件。
2,已標(biāo)注的任務(wù):沒有具體的截止日期,但是非常重要,使用橙色旗標(biāo)。這樣,一旦必需完成的任務(wù)已經(jīng)完成,你就可以優(yōu)先完成這些標(biāo)注的任務(wù)。
提醒事項(xiàng)又是一個(gè)充滿雞肋感的原生app,作為一個(gè)“提醒事項(xiàng)”,它實(shí)在是太不好用了。
但是好在,它可以被放入到Widget之中,并且會(huì)顯示計(jì)劃為今天實(shí)施的內(nèi)容。
本來(lái),我使用HibitBull來(lái)管理新習(xí)慣,可惜它現(xiàn)在還不能放到Widget上,所以姑且使用這個(gè)原生版的提醒事項(xiàng)。
iOS 10 正式推出之后,幾乎每天都有新的app加入這個(gè)可編輯隊(duì)列之中。
你完全可以使用其中的應(yīng)用,創(chuàng)建你個(gè)人用途的Widget,不唯時(shí)間管理,或許還可以是語(yǔ)言學(xué)習(xí)、閱讀寫作等等諸多領(lǐng)域,讓你的想象力來(lái)做決定吧。
●蘋果手機(jī)iOS10版本添加widget:向右滑動(dòng)屏幕至通知中心--拉到底部點(diǎn)擊“編輯”--按需要添加的應(yīng)用插件左側(cè)的“添加”按鈕--按右上角“完成”
●蘋果手機(jī)iOS10版本關(guān)閉widget:向右滑動(dòng)屏幕至通知中心--拉到底部點(diǎn)擊“編輯”--按需要?jiǎng)h除的應(yīng)用插件左側(cè)的“刪除”按鈕--移除--按右上角“完成”
●蘋果手機(jī)iOS10版本調(diào)整widget位置:向右滑動(dòng)屏幕至通知中心--拉到底部點(diǎn)擊“編輯”--按住應(yīng)用插件右側(cè)的滑塊可以移動(dòng)插件位置--按右上角“完成”
Widget不是一個(gè)小型的App,它是一種新的桌面內(nèi)容展現(xiàn)形式,展示在Home Screen上,能快速提供用戶關(guān)心的內(nèi)容是重點(diǎn),主要用于彌補(bǔ)主App無(wú)法及時(shí)展示用戶所關(guān)心的數(shù)據(jù)。
優(yōu)秀的Widget有三個(gè)特點(diǎn):
具體圖片尺寸
蘋果提供Widget的可配置能力
Widget的UI是無(wú)狀態(tài)的
唯一支持的只有用戶點(diǎn)擊和DeepLink喚起主app
Widget的核心是Timeline,即一條時(shí)間線,在對(duì)應(yīng)的時(shí)間點(diǎn)展示對(duì)應(yīng)的UI
時(shí)間線由一個(gè)或多個(gè)時(shí)間線入口TimelineEntry以及一個(gè)重載策略ReloadPolicy組成,該重載策略會(huì)通知WidgetKit何時(shí)請(qǐng)求后續(xù)時(shí)間線。
重載策略(接下來(lái)這段時(shí)間Timeline的刷新策略)有以下幾種策略:
Widget的刷新完全由WidgetCenter控制。需要通過(guò)生成一個(gè)新的時(shí)間線來(lái)替換舊的時(shí)間線,Reload Timeline并不是直接刷新Widget,而是WidgetCenter重新請(qǐng)求下一個(gè)時(shí)間線的數(shù)據(jù)。
系統(tǒng)提供兩種方式來(lái)刷新Timeline:
示例:每5分鐘刷新一下時(shí)間線
根據(jù)官方文檔的描述,點(diǎn)擊 Widget 窗口喚起 APP 進(jìn)行交互指定跳轉(zhuǎn)支持兩種方式:
Widget 支持三種顯示方式,分別是 systemSmall 、 systemMedium 、 systemLarge ,其中:
1、 systemSmall 只能用 widgetURL 修飾符實(shí)現(xiàn)URL傳遞接收。
2、 systemMedium 、 systemLarge 可以用 Link 或者 widgetUrl 處理
這兩種方式的本質(zhì)都是 URL Schemes
在查找資料的時(shí)候,看到網(wǎng)上有的地方說(shuō)在 AppDelegate 實(shí)現(xiàn) OpenUrl 進(jìn)行跳轉(zhuǎn)處理:
然而試了之后發(fā)現(xiàn)根本沒有響應(yīng),其實(shí)是需要在 SceneDelegate 里面實(shí)現(xiàn)跳轉(zhuǎn)處理,因?yàn)?iOS13 后, APP 的 UI 生命周期交由 SceneDelegate 管理,這里拿到需要的 URL ,就能處理產(chǎn)品需求實(shí)現(xiàn)了。
creating-a-widget-extension
iOS13 URL Schemes 跳轉(zhuǎn)與傳值問(wèn)題