ios14 SwiftUI widget 实现

2020-11-24  本文已影响0人  jfzhang
IMG_5803.PNG.JPG

创建过程不在细说
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 具体布局样式,写两行代码试试便知,就不在赘述。

详细代码请下载demo

上一篇下一篇

猜你喜欢

热点阅读