UIKit與SwiftUI的集成
SwiftUI是iOS13中推出的一個(gè)全新的框架,它采用聲明式的UI布局判帮,并且有數(shù)據(jù)與視圖同步更新晦墙,一套視圖多平臺(tái)使用等很多優(yōu)點(diǎn)。但是晌畅,目前大部分項(xiàng)目仍然使用的是UIKit來(lái)進(jìn)行布局寡痰,大規(guī)模使用SwiftUI并不現(xiàn)實(shí),但是我們?nèi)匀豢梢栽谀承┑胤搅铮植康纳倭渴褂肧wiftUI,或者另外一個(gè)場(chǎng)景是在SwiftUI中使用UIKit中編寫的一些控件入热,這就需要我們學(xué)會(huì)UIKit和SwiftUI之間的集成了晓铆。
當(dāng)我們討論SwiftUI的集成的時(shí)候,你將會(huì)聽(tīng)到托管這個(gè)詞郑气。UIKit App可以托管SwiftUI的視圖腰池,SwiftUI App同樣也可以托管UIKit的視圖
本篇將討論下面幾個(gè)內(nèi)容
在一個(gè)UIKit的項(xiàng)目中托管一個(gè)SwiftUI的view
在一個(gè)SwiftUI的項(xiàng)目中托管一個(gè)vc
在一個(gè)SwiftUI的項(xiàng)目中托管一個(gè)帶有數(shù)據(jù)依賴關(guān)系的UIKit視圖
UIKit中使用SwiftUI視圖
項(xiàng)目中添加要集成的SwiftUI view文件
設(shè)置Hosting Controller,為其設(shè)置rootView讳侨,rootView就是SwiftUI view
SwiftUI項(xiàng)目中使用view controller
將view controller文件加入項(xiàng)目中
為加入的vc創(chuàng)建一個(gè)representation strut奏属,實(shí)現(xiàn)makeUIViewController和updateUIViewController兩個(gè)方法
在SwiftUI中使用NavigationLink控件,設(shè)置desitination為第二步創(chuàng)建的Representation實(shí)例
將SwiftUI包裹在NavigationView中
預(yù)覽UIKit視圖
在VC中忱嘹,添加一個(gè)如下strut即可
#if DEBUG
struct ViewControllerPreviews: PreviewProvider {
static var previews: some View {
ViewControllerRepresentation()
}
}
#endif
SwiftUI中使用帶有數(shù)據(jù)依賴關(guān)系的UIView視圖
創(chuàng)建一個(gè)繼承了UIViewRepresentable協(xié)議的SwiftUI view
實(shí)現(xiàn)make方法耕渴,初始化uiview
實(shí)現(xiàn)update方法,通過(guò)SwiftUI view來(lái)更新UIKit view
創(chuàng)建一個(gè)Coordinate础米,實(shí)現(xiàn)valueChanged方法添诉,通過(guò)UIKit view來(lái)更新SwiftUI view