根據(jù)官方文檔的描述,點(diǎn)擊 Widget 窗口喚起 APP 進(jìn)行交互指定跳轉(zhuǎn)支持兩種方式:
成都創(chuàng)新互聯(lián)公司是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。
Widget 支持三種顯示方式,分別是 systemSmall 、 systemMedium 、 systemLarge ,其中:
1、 systemSmall 只能用 widgetURL 修飾符實(shí)現(xiàn)URL傳遞接收。
2、 systemMedium 、 systemLarge 可以用 Link 或者 widgetUrl 處理
這兩種方式的本質(zhì)都是 URL Schemes
在查找資料的時(shí)候,看到網(wǎng)上有的地方說在 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)與傳值問題
上一篇我們說到組件化開發(fā)是一個(gè)App最大一層的架構(gòu),那具體到了一個(gè)一個(gè)的業(yè)務(wù)組件里,比組件化開發(fā)小一點(diǎn)的架構(gòu)就是三層架構(gòu)。所謂三層架構(gòu)就是指把項(xiàng)目中所有的類劃分到不同的層,目的是使項(xiàng)目邏輯更加清晰,提升開發(fā)和維護(hù)的效率,我們一般會把項(xiàng)目分為三層:數(shù)據(jù)層、業(yè)務(wù)層、視圖層。
注意:嚴(yán)格來講,三層架構(gòu)并不真正就比組件化開發(fā)小,它們倆只是從不同的角度去做架構(gòu)而已,往往是相互融合的,比如組件化開發(fā)里網(wǎng)絡(luò)庫就是三層架構(gòu)里數(shù)據(jù)層的內(nèi)容,UI庫就是三層架構(gòu)里視圖層里的內(nèi)容等,這里之所以說“三層架構(gòu)是比組件化開發(fā)小一點(diǎn)的架構(gòu),主要是針對業(yè)務(wù)組件來說的”,當(dāng)然甚至我們在不使用組件化開發(fā)時(shí)項(xiàng)目里依然可以使用三層架構(gòu)。
比三層架構(gòu)再小一點(diǎn)的架構(gòu)就是視圖層架構(gòu),我們常說的MVC、MVVM都是?視圖層的架構(gòu)。
MVC,即Model-View-Controller,它們的關(guān)系如下:
MVVM,即Model-View-ViewModel,它們的關(guān)系如下:
第一步:編程入門課
時(shí)間預(yù)計(jì):4個(gè)星期
推薦看公開課,Udacity也行,網(wǎng)易公開課也行,自己找一個(gè)面對對象語言(一般是JAVA, C++, Python)的課。我是在網(wǎng)易公開課看的斯坦福的CS106A,學(xué)的JAVA。
如果你純粹學(xué)iOS開發(fā),不推薦看哈佛CS50,CS50是給CS系的學(xué)生介紹整個(gè)計(jì)算機(jī)世界的框架,講的內(nèi)容比較多,進(jìn)度比較快,對iOS開發(fā)其實(shí)有點(diǎn)累贅了。(臣妾有點(diǎn)跟不上?。。。?/p>
計(jì)劃安排是一天一課,看課程要求的書(至少看完一本)及大部分作業(yè)。這一階段重點(diǎn)不是語法,而是以下3個(gè)目標(biāo)。
目標(biāo):
1. 讓自己對編程這件事感到適應(yīng)。
寫hello world。
怎么寫function, 怎么調(diào)用function。
全局變量,局部變量這類基本知識點(diǎn)。
都是基本的東西??纯磿瑢懚鄡蓚€(gè)程序就歐啦。
2. 掌握編程語言的基本要素。
編程語言4個(gè)要素:
a. 基本的數(shù)據(jù)類型:整數(shù),實(shí)數(shù),character, string, boolean
b. 基本的運(yùn)算符號:+-×/++--那啥的
c. 怎樣輸入輸出
d. 怎樣控制程序:sequence,selection,loop
3. 了解編程范式
面對過程編程。
面向?qū)ο缶幊獭?/p>
第二步:上手iOS!
時(shí)間預(yù)計(jì):2星期
強(qiáng)烈推薦CS193P,老頭子講的超級好!我的很多東西(對象思維啥的)是在這里跟著做練習(xí)的時(shí)候才真正明白的(好啦,也可能是上一堂課練習(xí)做得少的原因)。如果等到9月應(yīng)該itunes U上會開始教iOS 7了。網(wǎng)易公開課的是2010年iOS 5版的,前10堂課,也行。(iTunes U上有完整的課)
CS193P說有prerequisite,一開始被嚇到,事實(shí)證明還是可以學(xué)下去的。頭兩節(jié)課一頭霧水,沒關(guān)系,把itunes U上的課件下載下來,把所有代碼打出來,然后一個(gè)個(gè)元素對應(yīng)之前學(xué)的語言匹配,再不懂先放著,繼續(xù)學(xué)后邊的,過幾天打多點(diǎn)代碼就懂了。
感覺學(xué)5、6堂課,一個(gè)星期左右就可以開始進(jìn)入下一階段自己做東西了。之后用啥學(xué)啥,每堂課都有主題的。速度慢點(diǎn)的同學(xué)們,這階段跟我一樣準(zhǔn)備兩個(gè)星期吧!
第三步:開發(fā)app!
時(shí)間預(yù)計(jì):2星期(本人...1個(gè)半月,實(shí)在不好意思說出口)
這個(gè)時(shí)間就可長可短啦,還包括美工,交互啥的。堅(jiān)持要用啥學(xué)啥的原則,其實(shí)就是知道iOS SDK都有什么組件,每個(gè)組件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有個(gè)師傅,這個(gè)階段真的是進(jìn)步神速。
好的!不出意外,你的第一個(gè)app就這么新鮮出爐了!從今天開始,成為一個(gè)冷艷逼格高尚的iOS開發(fā)者吧!
以上都是使用 Image 加載本地圖片資源,但是 SwiftUI 中的 Image 沒有提供直接加載 URL 方式的圖片顯示,那么如何在 SwiftUI 中讓 Image 加載網(wǎng)絡(luò)圖片呢,可以采用異步加載網(wǎng)絡(luò)圖片數(shù)據(jù),由 data 轉(zhuǎn)換成 UIimage ,再給 Image 展示
但是這種異步加載圖片的方式在 Widget 中卻失效了, Image 顯示不了圖片。
在 TimelineProvider 的 getTimeline 中 completion(timeline) 執(zhí)行完之后,不再支持圖片的異步回調(diào)了,所以必須在數(shù)據(jù)請求回來的處理中采用同步方式,將圖片的 data 獲取,轉(zhuǎn)換成 UIimage ,在賦值給 Image 展示。
接下里給 iOS14 Widget小組件開發(fā)實(shí)踐2——自定義Widget 里搭建的古詩視圖增加一個(gè)網(wǎng)絡(luò)封面圖片顯示,效果如下:
因?yàn)檫@個(gè)免費(fèi)的 API 接口沒有返回圖片封面數(shù)據(jù),所以就自己網(wǎng)上找個(gè)圖片用來測試。關(guān)于圖片請求的時(shí)機(jī),這里我是將它放在了 API 接口回調(diào)后處理 json 轉(zhuǎn) model 的這一步:
最后在給 PoetryWidgetView 布局界面:
SwitUI-實(shí)現(xiàn)URL圖片顯示
相信各位讀了之前的兩篇文章,對pods的使用已經(jīng)相當(dāng)熟練了。不過在紛繁復(fù)雜的實(shí)際使用場景下,可能還是會遇到一些問題。本文就結(jié)合自己的實(shí)踐經(jīng)驗(yàn),做一些快問快答,希望大家能多多補(bǔ)充交流。話不多說,那我們就即刻開始吧!
pod系列文章
Cocoapods,讓iOS開發(fā)更簡單(一):走近Cocoapods
Cocoapods,讓iOS開發(fā)更簡單(二):創(chuàng)建私有庫
Cocoapods,讓iOS開發(fā)更簡單(三):實(shí)踐經(jīng)驗(yàn)匯總
一文帶你快速分清靜態(tài)庫-動態(tài)庫-Framework
一般推薦使用指定版本或范圍版本號,以確保依賴的穩(wěn)定性。
總結(jié) :能用pod install解決問題的,就不要用pod update。因?yàn)閜od update會把依賴庫全部檢查一遍,不僅慢有時(shí)候還會出現(xiàn)坑。
忽略Pods警告,有些第三方Pod集成進(jìn)來會有一大堆警告信息,在Podfile中對應(yīng)的target或分組下加上關(guān)鍵字inhibit_all_warnings!就可以把警告忽略。
作用:
在pods中用frameworks替代.a靜態(tài)庫。
場景:
swift項(xiàng)目pods默認(rèn)開啟(use_frameworks!),OC項(xiàng)目pods默認(rèn)關(guān)閉(#use_frameworks!),同時(shí)需滿足以下兩點(diǎn),
解析:
swift工程依賴了OC工程的話,需要use_modular_headers!
示例:
為某個(gè) Pods 使用模塊化標(biāo)頭,可以使用以下語法:
pod 'TestPodLib', :modular_headers = true
另外,當(dāng)全局使用 use_modular_headers! 屬性時(shí),同時(shí)還可以使用以下方法從模塊化標(biāo)頭中排除特定的Pod:
pod 'TestPodLib', :modular_headers = false
版本格式:主版本號.次版本號.修訂號,版本號遞增規(guī)則如下:
常用的方式調(diào)用pod中的素材是不生效的,因?yàn)槟J(rèn)是從mainBundle中讀取的,如
打在pod中的素材已經(jīng)不在mainBundle中而在對應(yīng)組件下的bundle 里面,所以應(yīng)該這么調(diào)用:
在用CocoaPods集成第三方庫之后,默認(rèn)情況下,使用類似#import XXX/YYY.h的方式引入第三方庫的頭文件。
pod search只會搜索本地緩存的庫,如果想搜索到最新的第三方框架或者某個(gè)框架的最新版本,必須先使用pod repo update。