iOS14 Meet WidgetKit

简介

Widgets显示相关的、可浏览的内容,允许用户快速访问您的应用程序以获取更多详细信息。

  • Widget使用SwiftUI视图显示其内容
  • 一个App 可以提供多种样式的 Widget
  • 可以添加同一Widget 的多个副本 ,可以根据其独特的需求和布局定制每个 Widget
  • Widget 支持大中小3种尺寸(systemLarge、systemMedium、systemSmall),你可以根据实际情况选择适合自己的尺寸(WidgetFamily控制)

添加Widget到工程

  1. 打开你的 Xcode 工程, 并且选择 File > New > Target.
  2. 在 Application Extension group 中选择 Widget Extension
  3. 输入 Widget 的名字
  4. 如果 Widget 提供了用户可配置的属性,请选中“ Include Configuration Intent ”复选框。
  5. 点击完成

详细配置信息

@main
struct IMYWidgetDemoTest: Widget {
    private let kind: String = "IMYWidgetDemoTest"

    public var body: some WidgetConfiguration {
        IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider(), placeholder: PlaceholderView()) {
            entry in IMYWidgetDemoTestEntryView(entry: entry)
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
        .supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
    }
}
  • Kind:标识 Widget 的字符串。这是您选择的标识符,并且应描述 Widget 所代表的内容。
  • Custom Intent:定义用户可配置属性。
  • Provider:符合 TimelineProvider 的对象,该对象生成一个时间线,告诉 WidgetKit 何时渲染。时间线包含自定义的 TimelineEntry 类型。TimelineEntry 标识您希望 WidgetKit 更新 Widget 内容的日期,包括 Widget 视图需要渲染自定义类型的属性。
  • Placeholder View:WidgetKit 使用一个 SwiftUI 视图来首次渲染。占位符是 Widget 的通用表示形式,没有特定的配置或数据。
  • Content Closure:包含 SwiftUI 视图的关闭。 WidgetKit 调用此方法来渲染 Widget 内容,并从 provider 传递 TimelineEntry 参数。

TimelineProvider

struct Provider: IntentTimelineProvider {
    //提供预览快照
    public func snapshot(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (SimpleEntry) -> ()) {
        let entry = SimpleEntry(date: Date(), configuration: configuration)
        completion(entry)
    }
    
    //刷新数据和控制下一步刷新时间
    public func timeline(for configuration: ConfigurationIntent, with context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
        var entries: [SimpleEntry] = []

        // Generate a timeline consisting of five entries an hour apart, starting from the current date.
        let currentDate = Date()
        for hourOffset in 0 ..< 5 {
            let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
            let entry = SimpleEntry(date: entryDate, configuration: configuration)
            entries.append(entry)
        }

        let timeline = Timeline(entries: entries, policy: .atEnd)
        completion(timeline)
    }
}

刷新策略(policy):

  • .atEnd:默认使用该策略,在时间轴中的条目指定的最后日期之后请求新的时间轴
  • .never:永不更新,可以使用WidgetCenter函数reloadTimelines(ofKind :)来进行更新
  • .after: 指定多久之后更新

Custom Intent

当我们在Intent的Parameters中添加content,在小组件上是可以看到,我们可以通过更改这个值并让它展示

struct IMYWidgetDemoTestEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        Text(entry.configuration.content ?? "Placeholder");
    }
}

多个 WIDGETS

@main
struct Widgets: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        IMYWidgetDemoTest()
        IMYWidgetDemoTest1()
    }
}

参考链接

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS 14官方UIKit是苹果公司针对iOS操作系统推出的一套官方用户界面工具包。它提供了许多用于构建iOS应用程序的组件和工具,使开发者可以快速方便地创建和设计用户界面。 iOS 14官方UIKit具有许多重要的功能和特性。首先,它提供了一套丰富的用户界面元素,例如按钮、标签、文本框等,开发者可以根据自己的需求进行定制和布局。这些元素经过精心设计,符合iOS最新的外观和交互规范,可以帮助开发者构建出现代和美观的应用程序界面。 其次,iOS 14官方UIKit还提供了许多动画和过渡效果,使得应用程序界面更加生动和流畅。开发者可以使用这些特效来增加用户体验,提高应用程序的交互性和吸引力。 第三,iOS 14官方UIKit还包括了一套强大的布局系统,使开发者能够轻松地管理界面元素的位置和大小。开发者可以使用自动布局和约束来确保应用程序在不同设备和屏幕尺寸上的适配性,从而保证用户在不同设备上都能够享受一致的用户体验。 此外,iOS 14官方UIKit还提供了许多其他功能,例如表格视图、集合视图、滚动视图等,使开发者能够更加便捷地展示和处理数据。还提供了多种手势识别功能,开发者可以通过手势来实现用户与应用程序的交互。 总而言之,iOS 14官方UIKit是一套强大而灵活的界面工具包,提供了丰富的用户界面组件和功能,帮助开发者快速构建出现代化和吸引人的iOS应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值