iOS14 Widget小组件开发实践1——了解Widget

iOS14带来了新的UI组件:WidgetKit,人称小组件(用过安卓的都能理解),这货的前身其实就是iOS10时候引入的Today Extension

Widget为应用程序提供了这样一种功能:其可以让用户在主屏幕上展示App中用户所关心的信息。例如一款天气软件,其可以附带一个Widget让用户在主屏幕就可查看今日的天气情况,例如股票相关的软件,用户将自己感兴趣的股票收藏,无需打开App,在主屏幕即可查到对应的股价信息。

刚好iOS14正式版更新的节奏,抽点时间来试试整一个Widget小组件玩玩。

Widget只支持SwiftUI实现,OC项目同样可以创建,但是必须用SwiftuUI实现。

创建

通过Xcode -> File -> New -> Target菜单路径找到 Widget Extension,双击创建


这里随便输入你自己的命名,Include Configuration Intent这选项暂时不勾选,这选项主要是用来支持你自定义一些属性配置(例如天气组件,用户可以选择城市,股票组件,用户可以选择代码),不支持的话则不用勾选。

之后在Xcode的左侧项目目录可以看到,这里自动新增了一些东西,其中TestWidget.swift文件就是我们即将编写代码实现的地方。

先点进去看下Xcode为我们生产的默认代码,然后运行跑一下,看看模拟器效果。

 

 


解读

接下来看下Xcode生成的默认Widget实现代码

Provider

Provider:为小组件展示提供一切必要信息的结构体,实现TimelineProvider协议
placeholder:提供一个默认的视图,当网络数据请求失败或者其他一些异常的时候,用于展示
getSnapshot:为了在小部件库中显示小部件,WidgetKit要求提供者提供预览快照,在组件的添加页面可以看到效果
getTimeline:在这个方法内可以进行网络请求,拿到的数据保存在对应的entry中,调用completion之后会到刷新小组件

struct Provider: TimelineProvider {func placeholder(in context: Context) -> SimpleEntry {SimpleEntry(date: Date())}func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {let entry = SimpleEntry(date: Date())completion(entry)}func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {var entries: [SimpleEntry] = []let currentDate = Date()for hourOffset in 0 ..< 5 {let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!let entry = SimpleEntry(date: entryDate)entries.append(entry)}let timeline = Timeline(entries: entries, policy: .atEnd)completion(timeline)}
}

SimpleEntry

实现TimelineEntry协议,就是用来保存所需要的数据

struct SimpleEntry: TimelineEntry {let date: Date
}

TestWidgetEntryView

这个结构体就是我们需要用来展示的视图View,这里可以进行各种界面搭建

struct TestWidgetEntryView : View {var entry: Provider.Entryvar body: some View {Text(entry.date, style: .time)}
}

@main struct TestWidget: Widget

@main:代表着Widget的主入口,系统从这里加载
kind:是Widget的唯一标识
StaticConfiguration:初始化配置代码
configurationDisplayName:添加编辑界面展示的标题
description:添加编辑界面展示的描述内容
supportedFamilies这里可以限制要提供三个样式中的哪几个

@main
struct TestWidget: Widget {let kind: String = "TestWidget"var body: some WidgetConfiguration {StaticConfiguration(kind: kind, provider: Provider()) { entry inTestWidgetEntryView(entry: entry)}.configurationDisplayName("My Widget").description("This is an example widget.")//supportedFamilies不设置的话默认三个样式都实现.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])}
}

展示多个Widget

一个Widget只提供了三个样式的选择,比如我有个需求,我不需要这两个样式,但是我需要多个小的样式,那么就需要创建多个Widget了。
这时候就要用到WidgetBundle,把主入口@main转移到YourWidgets,实现WidgetBundle协议,这里返回多个Widget

@main
struct YourWidgets: WidgetBundle {@WidgetBundleBuildervar body: some Widget {OneWidget()TwoWidget()ThreeWidget()......  }
}

未完待续,下一篇我们开始实现自己的小组件

参考资料

creating-a-widget-extension
https://swiftrocks.com



作者:2狗子你变了
链接:https://www.jianshu.com/p/55dce7a524f5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47057.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用iOS14 Widget小组件自定义玩法

一.了解Widget iOS14带来了新的UI组件:WidgetKit,人称小组件(用过安卓的都能理解),这货的前身其实就是iOS10时候引入的Today Extension。 Widget为应用程序提供了这样一种功能:其可以让用户在主屏幕上展示App中用户所关心的信息。例如一款天气软件,其可以附带一个Widg…

iOS14 Widget开发踩坑(二)修正版-多个小组件

iOS14 Widget开发踩坑&#xff08;二&#xff09;修正版-多个小组件 前言添加多个小组件情况1.对于已经写好的一个小组件情况2.对于新建好还没写的小组件 Widgets的限制突破小组件个数限制的方法参考文献 前言 2020年12月3日 经过进一步的学习 发现了文章中还有很多错误&#…

IOS小组件(1):概述

IOS小组件(1):概述 引言小组件是什么?小组件概述小组件开发备注小组件实现原理结语引言 本系列文章作者是安卓开发,以安卓开发的视角学习IOS小组件,记录一下踩坑记录,如有讲得不对的地方,路过大佬多包涵。如果你是想深入学习小组件,建议您顺着笔者的编号顺序阅读本系列…

ios中在app应用内刷新小组件数据

需求&#xff1a; 我们需要在app应用内刷新时间线&#xff0c;让桌面小组件加载最新的内容。即app内修改了共享数据后&#xff0c;需要通知桌面小组件强制刷新&#xff0c;显示改变后的内容。 当某种情况影响到小组件的当前时间线时&#xff0c;您的 App 可以指示 WidgetKit …

android 仿苹果 小组件,仿ios14桌面小部件

仿ios14桌面小部件&#xff0c;这是一款面向广大安卓手机用户推出的高仿iOS14桌面插件软件&#xff0c;大家可以使用这款软件快速完成自己想要的桌面显示&#xff0c;多种插件一键点击轻松完成设置过程&#xff0c;让大家体验到同款iOS14桌面强大的功能&#xff0c;非常有意思的…

iOS14 小组件 开发1

前言:小组件的开发和我们正常情况开发App的逻辑是一样的,正常情况分为:网络请求,数据模型,view,渲染.只不过是小组件的开发使用了 swiftUI 语言来编写,所以要对SwiftUI的空间有所了解. 好!那我们接下来开始我们的小组件开发吧. 首先,创建Widget Extension 然后选择证书,起个名…

Android-为应用添加widget小组件

最近在实现为应用程序添加小组件的功能&#xff0c;记录一下开发过程。 1.添加一个小组件模板 设置组件类名称&#xff0c;其他属性按需求设置&#xff0c;这些属性在生成的文件中也可修改 ​​​​​​ 工程main目录下会生成类文件&#xff0c;res目录下生成资源文件&#x…

iOS 15 新增多个实用小组件

iOS 14 上线加入的桌面小组件功能非常受欢迎&#xff0c;因此苹果iOS 15新系统对小组件功能进行深度优化&#xff0c;并加入了多个实用又有趣的小组件。用户可以简单通过上下滑动来选择、重新排列、智能堆栈小组件&#xff0c;也可以对它们进行删除、智能旋转&#xff0c;还可以…

Widget小组件

目录 技能点 Widget背调 a. 设计定位 b. Widget小组件限制 c. Widget小组件 开发须知 d. 什么是 SwiftUI App Group 数据共享 a. 配置 App Groups 1、开发者账号配置&#xff0c;并更新pp证书 2、Xcode配置 b. 缓存数据共享-代码实现 1、文件存储 2. 沙盒存储&…

iOS_小组件widget基本功能

创建 在当前工程里新建target 选择Today Extension 独立应用 widget虽做为应用的扩展, 但却是两个完全独立的应用 widget上线需要单独申请 AppID 和 Bundle Identifier , 需要配置 证书 和 Provisioning Profiles(配置文件) 第三方pod导入, 也的重新导入一份 target MMWidg…

iOS 14-Widget小组件2—实现

Widget 实现 认识与配置实现效果图支持显示方式交互数据共享刷新策略网络加载屏幕适配支持多个小部件布局例子源码其他问题参考认识与配置 上一篇文章已经做了比较详细的介绍与创建配置iOS 14-Widget小组件1—初识 实现效果图 支持显示方式 @main 入口添加.supportedFamilie…

自定义开发苹果手机显示汽车小组件

实时获取汽车数据信息实时获取汽车定位信息&#xff08;点击地址进入高德&#xff09;显示当前位置的天气情况可定制显示当前城市是否限行可定制当前城市油价信息实时刷新最新数据 感兴趣的可以私聊加群

iOS 小组件 widget

苹果官网文档&#xff08;apple developer&#xff09;widgetkit 文章目录 1.创建小组件2.编辑小组件3.数据共享4.拖动排序5.参考链接 1.创建小组件 File -> New -> Target 搜索widget,点击next 勾上Include Configuration Intent, 表示需要编辑小组件&#xff0c;点击f…

iOS 小组件 widget 编辑小组件

返回小组件专栏&#xff1a;iOS 小组件 widget 文章目录 1.编辑小组件2.intentHandler 1.编辑小组件 如下图&#xff0c;编辑小组件&#xff0c;需要在GirlWidget.intentdefinition中配置 点击右下角的加号&#xff0c;新建一个枚举类型 枚举类型改名MyEnum,并添加三个值 …

iOS 小组件开发

iOS14之后Apple引入了新的WidgetKit&#xff0c;舍弃了原有额TodayExtension。 开发准备&#xff1a; 新的WidgetExtension只能通过SwiftUI进行开发&#xff1b; Widget有三种尺寸&#xff1a;systemSmall、 systemMedium、systemLarge&#xff0c;三种尺寸对应固定的UI类型布…

iOS 小组件 widget group id, app group, 数据共享

返回小组件专栏&#xff1a;iOS 小组件 widget 主APP, 小组件&#xff0c; 小组件的intent是三个独立的target, 需要有三个bundle id和对应的配置文件。而且他们的bundle identifier是从属关系。小组件的bundle id必须以主app的bundle id作为前缀。比如主app的为“com.test”&a…

演讲实录:指标平台+AI 的技术落地和未来展望

7月14日&#xff0c;以“释放数智生产力”为主题的 Kyligence 用户大会在上海成功举行。大会现场发布了 Kyligence 最新产品家族&#xff1a;AI 数智助理——Kyligence Copilot 的预览版、一站式指标平台 Kyligence Zen 的 Cloud 和 Enterprise 版本&#xff0c;以及企业级 OLA…

程序员坐行李箱迎寒风编码 2 小时,目击者:激励我写了一篇论文!

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 对于很多程序员而言&#xff0c;工作三连无疑就是——“查 bug、改 bug 、写 bug ”。 程序员加班的话题&#xff0c;也早已经不足为奇&#xff0c;实际上除了办公室&#xff0c;地铁站…

解决Windows update medic service服务禁用不了拒绝访问

很多小伙伴发现禁用Windows update服务后没几天又自动开启&#xff0c;无法禁用自动更新就是因为Windows update medic service服务导致&#xff0c;但是在禁用Windows update medic service服务的时候又出现拒绝访问&#xff0c;如下 解决方法&#xff1a; 方法一&#xff1…

Windows10禁止更新中关于Windows Update Medic Service拒绝访问的问题

1.首先以管理员身份运行cmd输入 REG add "HKLM\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" /v "Start" /t REG_DWORD /d "4" /f 这一步已经将Windows Update Medic Service禁用了&#xff0c;但是还能恢复 2.运行“regedit”&#xff0…