创建过程不在细说
1.widget 主要有三种风格
.supportedFamilies([.systemMedium,.systemSmall,.systemLarge])
2.需要注意的点
systemSmall类型点击事件,只能用
.widgetURL(URL(string: "www.baidu.com”))
//不能用下面这种方式
Link(destination: URL(string: "www.baidu.com")!)
{
}
3.点击后接收点击链接,
最新xcode创建的工程,可以在SceneDelegate.m文件。
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts;
{
//遍历urlcontenxts 取出url
for (UIOpenURLContext *conten in URLContexts)
{
NSLog(@"%@",conten.URL.absoluteString);
}
}
//老的工程在UWAppDelegate.m文件接收点击结果
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
4.代码实现(如果只需要一个widget,只需要设置好widget类型,然后编写ui代码即可,如果需要多个widget,需要创建一个widget入口)。详细代码见[demo]https://github.com/dust-zhang/swiftUI-widget.git
@main
struct Widgets: WidgetBundle
{
@WidgetBundleBuilder
var body: some Widget
{
FourToolWidgetWidget()
SmallProductWidget()
MediumProductWidget()
}
}
然后创建不同的widget、widgetUI
struct SmallProductWidgetEntryView : View {
//这里是Widget的类型判断
@Environment(\.widgetFamily) var family: WidgetFamily
var entry: SmallProductWidgetProvider.Entry
@ViewBuilder
var body: some View
{
//加载四个快捷方式
switch family
{
case .systemSmall:
SmallProductView() //widget类型,只需要编写需要的类型
default:
Text("")
}
}
}
5.创建UI
用惯了oc 或者swift布局的ui,对swiftui 会有点不适应。
因为swiftui 是以中心点为坐标点,二oc、swift则是左上角(0,0)计算坐标
swiftui 实现一个“hello word”
Text(“hello work”)
在窗口上默认居中显示,如果实现一个图片,也是默认居中显示
Image("imagename”)
在swiftui布局中,最常用到
VStack和HStack两个函数还有ZStack 具体布局样式,写两行代码试试便知,就不在赘述。