IMG_5803.PNG.JPG
創(chuàng)建過程不在細(xì)說
1.widget 主要有三種風(fēng)格
.supportedFamilies([.systemMedium,.systemSmall,.systemLarge])
2.需要注意的點(diǎn)
systemSmall類型點(diǎn)擊事件,只能用
.widgetURL(URL(string: "www.baidu.com”))
//不能用下面這種方式
Link(destination: URL(string: "www.baidu.com")!)
{
}
3.點(diǎn)擊后接收點(diǎn)擊鏈接,
最新xcode創(chuàng)建的工程,可以在SceneDelegate.m文件。
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts;
{
//遍歷urlcontenxts 取出url
for (UIOpenURLContext *conten in URLContexts)
{
NSLog(@"%@",conten.URL.absoluteString);
}
}
//老的工程在UWAppDelegate.m文件接收點(diǎn)擊結(jié)果
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
4.代碼實(shí)現(xiàn)(如果只需要一個(gè)widget,只需要設(shè)置好widget類型,然后編寫ui代碼即可,如果需要多個(gè)widget,需要?jiǎng)?chuàng)建一個(gè)widget入口)。詳細(xì)代碼見[demo]https://github.com/dust-zhang/swiftUI-widget.git
@main
struct Widgets: WidgetBundle
{
@WidgetBundleBuilder
var body: some Widget
{
FourToolWidgetWidget()
SmallProductWidget()
MediumProductWidget()
}
}
然后創(chuàng)建不同的widget、widgetUI
struct SmallProductWidgetEntryView : View {
//這里是Widget的類型判斷
@Environment(\.widgetFamily) var family: WidgetFamily
var entry: SmallProductWidgetProvider.Entry
@ViewBuilder
var body: some View
{
//加載四個(gè)快捷方式
switch family
{
case .systemSmall:
SmallProductView() //widget類型,只需要編寫需要的類型
default:
Text("")
}
}
}
5.創(chuàng)建UI
用慣了oc 或者swift布局的ui,對swiftui 會有點(diǎn)不適應(yīng)。
因?yàn)閟wiftui 是以中心點(diǎn)為坐標(biāo)點(diǎn),二oc、swift則是左上角(0,0)計(jì)算坐標(biāo)
swiftui 實(shí)現(xiàn)一個(gè)“hello word”
Text(“hello work”)
在窗口上默認(rèn)居中顯示,如果實(shí)現(xiàn)一個(gè)圖片,也是默認(rèn)居中顯示
Image("imagename”)
在swiftui布局中,最常用到
VStack和HStack兩個(gè)函數(shù)還有ZStack 具體布局樣式,寫兩行代碼試試便知,就不在贅述。