頭條資訊 - 為您提供最新最全的新聞資訊,每日實時更新

聊聊 iOS14的Widget 和背後的 SwiftUI

科技數碼 少數派

Matrix 首頁推薦

文章代表作者個人觀點,少數派僅對標題和排版略作修改。

雖然一直以來看了不少的新聞和網上的體驗,但我個人實際上手 iOS14 還是在幾天前正式版推送之後。由於之前有使用 Beta 版時發生不愉快的體驗,所以現在使用新系統會非常謹慎。

升級後最顯著的感知莫過於全新的 widget 和 App 資源庫。升級之前看過一些討論,有部分開發者認為蘋果對小部件的限制導致了實用性的缺乏,對比之前是一種倒退。不過在我個人使用和開發之後卻有些相反的體驗,全新的桌面系統具有完全不同的使用邏輯,隨之改變自己的使用習慣,會比之前的更加簡潔和實用。這需要稍稍適應一下,改變從來如此。

新 Widget 的使用限制

總結來說限制集中體現在兩點:

弱交互。與之前僅可放置在負一屏的小部件相比,新版 widget 只能藉由點擊固定的區域,打開主 app 內的特定頁面或跳轉鏈接。無法在不開啟 app 的情況下,完成各種交互。

展示框架限定。新的 widget 僅允許使用蘋果在去年(2019 年)才推出的 SwiftUI 進行佈局,而不是開發者更熟悉的 UIView 框架。SwiftUI 作為一種申明式的頁面佈局方式,會默認的符合蘋果標準的留白和間隙,從某種角度而言自由度沒有 UIView 那麼高。好處是視覺統一性會更好,蘋果味兒更足,壞處是會有些雷同。關於這些底層的內容,在文章下半部分會繼續深入。

這些限制顯然是蘋果刻意為之,目的是為了對用戶體驗的每個環節都有深層的控制。其實在原來的小部件剛推出時,蘋果就表達過類似的願景。但由於原有框架的一些技術原因,開發者們總有辦法用一些黑科技繞過蘋果的限制,在自由度更高的同時也造成了體驗上的割裂,同時還有用戶學習成本的提升。

在今年 WWDC 上對新版 widget 的介紹中,好幾次我都有種錯覺,以為是在看對 Apple Watch 上覆雜部件和 app 的介紹。

聊聊 iOS14的Widget 和背後的 SwiftUI

新 widget 的設計目標 - WWDC2020

聊聊 iOS14的Widget 和背後的 SwiftUI

手錶 app 的設計目標 - WWDC2016

這其實有點類似 Windows 10 中的磁貼設計,使用更大的區域展現更多的動態內容,以代替原本一成不變的應用圖標。那麼當我們瞭解了使用限制後,其實更應該將目光放在全新的使用場景和體驗上面。在給予更多限制後才被允許登錄主屏的新 widget,和舊的又有哪些不同呢?

與眾不同的使用體驗

iOS 13 的桌面邏輯,說實話確實讓人有些審美疲勞,即使蘋果允許 app 動態改變 icon 也是治標不治本。我本人在手機裡有超過 100 款應用,而且都放在首頁的一個個文件夾中。其中的大部分事實上僅需要在偶爾使用,或者看一下最新的內容就會退出。

升級了 iOS14 後,我將大部分的應用都移到了資源庫,有些原本覺得可能使用頻率會比較高而不捨得扔進去的,在兩天後也大部分從桌面移除了。事實上 App 資源庫尋找應用的效率比想象中要高不少,而桌面的空間我更願意留給 widget。雖然分類方式是一個槽點,但習慣了 Alfred 之後,我一般都是直接搜索。

與前幾次系統升級後,大批 app 會迅速支持新特性並集中升級不同,這次率先支持新版 widget 的應用明顯數量非常有限。大多集中在了花式展示時間、日期、待辦事項,以及部分從服務器拉下來的新內容上。原因在於這些功能是在開發時可以很方便接入的,蘋果主動開放的組件。大量的其他應用還在觀望,應該以什麼形式,展示哪一部分內容。

適合展示的內容

天氣是基本每人都會放置的 widget,因為幾乎所有人都有了解天氣信息的需求,但卻沒有必要與這個信息有更深入的交互。類似的還有日程、待辦事項、設備電量等,這些信息共同點就是關鍵信息量少、變動的頻率高、輕量卻重要。

聊聊 iOS14的Widget 和背後的 SwiftUI

類似的還有一些特定領域的需求,例如金融人士關心的證券、期貨、貨幣價格實時變動,球迷關心的主隊賽況和下一場球賽的時間,遊戲愛好者某款遊戲掛機的進度,運維需要的遠程服務器或者智能汽車、家電等聯網設備的當前狀態,釣魚或水上運動愛好者對特定水域水文情況等的及時掌握等。寬泛一些或許可以算上網購達人的快遞進程,尤其是外賣的送貨進度等。

相對的當然就是一些涉及深度信息和複雜交互等需要更多注意力的內容,蘋果認為這些內容最好的呈現方式就是一個精美的完整應用。比如說一個查匯率的插件,可能選項+輸入+展示需要很大一個區域,但日常使用頻率卻非常低,平時也沒有什麼有價值的數據呈現。像這樣的功能就可以收到應用或小程序中,而不適合做成主頁 widget 始終展示。

我對 Widget 的使用

由於 widge t對桌面位置的佔用範圍太廣,這次 iOS14 提供了讓 widget堆疊的功能。這個功能雖然節省了屏幕空間,但卻對下拉進入搜索,或是在負一頁上下滾動會造成大概率誤操作。這讓我無法大量使用堆疊功能,所以選擇會更加謹慎,但最終還是維持了僅保留一頁主界面的習慣。

聊聊 iOS14的Widget 和背後的 SwiftUI

天氣和屏幕時間堆疊在一起;中間是我練手做的 NBA 計分板,可以顯示當前正在進行的比賽和未來的賽程等,後面堆疊了待辦事項;最下面是播客和音樂的堆疊,只可惜沒有圖書的 widget,我的有聲書都放在裡面;邊上是唯二有原生動態圖標的時間和日期,以及一些最常用的應用等。

負一層是日曆事件、活動目標、電量顯示、快捷指令,其中最讓人無語的是快捷指令,小模塊(2 × 2)的 widget 只有一個指令,看來還得自己做一個掃碼和導航的 URL Scheme 集合。(後續補充:剛剛自己做了一個,發現 2 × 2 的就是隻能整個按,能放按鍵的起碼得 4 × 2,希望能在系統升級後支持吧)

在適應了 iOS14 新桌面的使用邏輯後,無論是從設計還是功能層面上而言,這一次的更新讓系統在日常使用上的智能和效率都比之前高了不少。尤其是當發現作為開發者,使用新的 SwiftUI 框架做一個 widget 是如此便捷之後。

SwiftUI —— 全平臺統一的軟基石

聊聊 iOS14的Widget 和背後的 SwiftUI

蘋果生態的統一在近年來逐漸有了加速的趨勢,不僅桌面端的系統開始向手機端靠攏,連手錶端和其他平臺的相似之處也越來越多,現成的例子就是新 widget 不論是設計目標、內容選擇,還是數據更新邏輯等都與手錶端的複雜部件如出一轍。

平臺統一事實上指的是在硬件和軟件兩個層面。

在硬件上,每一條產品線都逐漸區分出了極致的 Pro、走量的數字型號、入門的 SE 款三類產品,逐漸拋棄了用舊型號進行劃分的市場策略。硬件技術例如線性馬達的通用和壓感屏的棄用,也基本做到了隔代同步。何況現在又拋出了蘋果芯片這個殺招,從底層保證了全平臺的代碼通用和升級節奏的把握。

在軟件上,則是我們普通用戶感知更強的系統升級趨同、AirDrop、隨航、接力、iCloud 同步、賬戶統一、隱私保護,以及海量水準以上應用的選擇和建立了利益共同體的開發者社區。

一些針對開發者的舉措可能不為普通用戶所知。在用戶感知層以外,蘋果接連公佈了全新的編程語言 Swift 和佈局方式 SwiftUI,正在統一從手錶到電視上軟件的開發平臺。之所以這麼說,是因為在此之前,每個平臺都有獨有的頁面佈局方式和接口,很多公司內部 iOS 開發者和 macOS 開發者還得分別招聘。

聊聊 iOS14的Widget 和背後的 SwiftUI

我的開發體驗

NBA 正在打季後賽,戰況激烈,為了不錯過比賽,我就打算製作一個相關的 app。同時用來熟悉最近看的 Swift 和 SwiftUI 的相關資料。視頻有版權放不了我理解,但一直沒有一個簡單看比分,設置賽前提醒的清爽應用卻讓我很不理解。

於是簡單規劃了一下,就打開 Xcode 開始寫代碼。

聊聊 iOS14的Widget 和背後的 SwiftUI

三個平臺的開發界面

頁面佈局非常順利,因為如圖所示可以看到,基本上做完了一套,將頁面拆成不同的組件,可以在簡單調整的前提下直接用在另一個平臺。這讓人有種第一次使用 AirDrop 和接力時的感覺,特別暢快。開發主要的時間花在了數據獲取和傳輸的邏輯上,畢竟這對我來說也是一個學習和掌握的過程。期間不斷的要試錯、反覆查資料、驗證新的想法等。

蘋果有很多細節在用戶層面可能感知不強,我看論壇上有人覺得新 widget 花花綠綠的醜(主要指捷徑),但是基於審美恰恰是蘋果細節最豐富的地方。例如在我們開發頁面確定後,不需要再做相應的佔位圖,系統就會自動生成。在 WWDC 中就強調了決不能出現空白一片或是載入錯誤等界面在主頁。其他陰影、圓角、黑白轉換等也都是系統自動調節。為了省電,所有 widget 的刷新頻率也是由系統統一調度,會根據用戶的使用頻率來調節。

聊聊 iOS14的Widget 和背後的 SwiftUI

Widget 黑白和自動生成的佔位圖

雖然在代碼上頁面的佈局可能類似,不過系統會根據平臺區別最終呈現不同的顯示效果。好處是開發者可以不用關心這背後的細節,壞處是這方面的自由度少了很多。

聊聊 iOS14的Widget 和背後的 SwiftUI

聊聊 iOS14的Widget 和背後的 SwiftUI

所幸熟悉了系統之後,最終呈現的效果還不錯。工作之餘沒事看看賽況,感覺完美契合了新桌面的使用場景。

watchOS 7.0 支持了類似新 widget 的自定義佈局組件,不過也是僅支持 SwiftUI,不用再使用原先規定的幾個模板佈局,所以這次才能將比分和球隊 logo 做成組件,方便查看賽況。

聊聊 iOS14的Widget 和背後的 SwiftUI

一些主觀想法

在使用 SwiftUI 進行開發和學習的過程中,讓我印象最深刻的一個反覆提到的設計理念就是「開發者不用知道背後的細節,系統會接管處理」。不論是 UI 的佈局、渲染,數據的儲存、回調、呈現,甚至連異步處理框架 Combine 和數據庫框架 Core Data 都是一樣,SwiftUI 試圖將不優雅的部分藏在背後,讓開發者像搭樂高積木一樣進行拼接即可。

當然在最初蘋果就清晰表達了設計新語言的初心,那就是希望讓開發者能更快的實現想法,更少的需要關注實現細節。然而這必然是一個駁論,雖然蘋果甚至給了一個「傻瓜式」的 SwiftUI 教程,學習者可以根據圖文一步步進行操作,實現教學效果,併產生一種非常容易的錯覺。(感興趣的可以體驗)

但回到自己開發的項目,你會發現完全不知道怎麼實現想要的功能,或是運行時與設想並不一致,甚至是遭遇莫名其妙的 bug 讓人找不到根源。樂高畢竟不是精密車床,以上這些問題的解決也都需要先搞清楚底層的原理,才可能舉一反三的進行實踐。不然就成了背題庫考數學,換個參數就懵逼,無法真正的提升解題能力。

所以這套新的框架雖然有可能降低初學者的門檻,或是做一個 Demo 的時間,但真正實用卻還是需要掌握語言發展的過程和底層的抽象。與所有事物的發展一樣,那些並不優雅的東西,才是真正重要的水面下的冰山。

總結

在蘋果從 iPhone 上去掉 Home 鍵之後,交互邏輯一直在改變,這讓一些用戶會感到無所適從。但拋開這一點不論,花一些時間去熟悉一下新的系統,無疑會帶來更大的收穫。在消費電子領域,蘋果的體量是非常驚人的,然而不論是臺前幕後,它還是那個對電路設計和機箱內部美學一絲不苟的細節控。

大家說安卓開放,但是國內廠商卻在這套開放的基礎上搞自己的封閉。大家說馬斯克像喬布斯,但一個是科技狂人一直試圖踏足無人之地,另一個卻是在用科技去平衡美學和人文。大家說系統越改越差,但我在易中天出第一本中華史時曾經說過,沒有一個包容的環境,永遠不會有世界級的作品。

最後希望米家和特斯拉儘快適配,就等你們兩了。

轉載請超鏈接註明:頭條資訊 » 聊聊 iOS14的Widget 和背後的 SwiftUI
免責聲明
    :非本網註明原創的信息,皆為程序自動獲取互聯網,目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,並提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件24小時內刪除。
加載中...