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

SwiftUI 小组件 Widget(二) 紧接上一篇小组件的创建SwiftUI 小组件 Widget(一)这篇来讲一下小组件的尺寸小组件最开始支持小、中、大三个尺寸,分别是到iOS 15新增了超大号,用于iPad端的再到iOS 16新增了锁屏小组件分别是机型se1141 * 141292 * 141292 * 311148 * 148321 * 148321 * 324155 * 155329 * 155329 * 345158 * 158338 * 158338 * 354159 * 159。 阅读详情

一.了解Widget

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

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

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

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

创建

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

image

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

image

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

image

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

image

image


解读

接下来看下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 
创建自定义SWidget/UWidget,<14-8>用户界面 UI和UMG 到目前为止,所有例子已经展示了如何使用现有的基本小部件创建 UI。 有时候,开发者可以使用组合来收集一些 UI 元素来定义一个按钮类,这个按钮类自动将一个 TextBlock 作为标签,而不是每次声明它们时手动指定层次结构。 此外,如果我们在C++中手动指定层次结构,而不是声明一个由子窗口小部件组成的复合对象,那么我们将不能使用 UMG 将这些窗口小部件实例化为一个组。 本例讲述了如何创建一个包含一组小部件并公开新属性以控制这些子小部件的元素的复合 SWidget。 还有如何创建一个 UWidget 阅读详情

相关推荐

iOS14 Widget-附动画实现方案

首先来学习一下网易云大佬对小组件的理解,实战手册看完后,想必你已经迫不及待地想动手实现一下吧!小组件动画、时钟实现方案

lyh1083908486的博客 1689

iOS14 小组件 开发1

前言:小组件的开发和我们正常情况开发App的逻辑是一样的,正常情况分为:网络请求,数据模型,view,渲染.只不过是小组件的开发使用了 swiftUI 语言来编写,所以要对SwiftUI的空间有所了解. 好!那我们接下来开始我们的小组件开发吧. 首先,创建Widget Extension 然后选择证书,起个名字.然后左侧的文件列表底部会出现一个文件夹 这个就是我们的小组件啦!现在可以直接运行了.系统默认显示的一个时间View 然后我们接下来逐一认识小组件的内部结构.首先找到程序执行的入口 @main:

henry_lei的博客 1786

iPhone小组件神器Scriptable入门指南:从安装到打造个性化桌面(附18个实用脚本推荐)

本文是iPhone小组件神器Scriptable的完整入门指南,详细介绍了从App Store安装到核心概念理解的全过程。通过实战演练,指导用户如何添加首个个性化桌面小组件,并精选推荐了涵盖效率管理、资讯聚合、生活健康等场景的18个实用脚本,帮助用户彻底释放iOS桌面的自定义潜力。

weixin_29237635的博客 321

编译错误类型: 必须定义入口点

LINK : fatal error LNK1561: 必须定义入口点 #   经常有同学写完程序编译时会发现有这样的错误: LINK : fatal error LNK1561: 必须定义入口点; #   我发现有这样两种情况下会发生这样的错误(都是自己犯过的); @  主函数  int  main() 写成了  int mian();    都是粗心惹的祸;这

John的博客 5万+

Visual Studio——LNK1561: 必须定义入口点 的BUG解决方法

写在前面 很简单的一个错误,也是自己没有注意到,记录一下。问题的背景是尝试使用Visual Stdio 2015来编写静态与动态链接库,在写静态链接库的时候,Debug版本没有问题,但是想尝试Release版本但是出现问题了。所以,记录一下。 参考文献: 关于 LINK : fatal error LNK1561: 必须定义入口点 的解决方法 上面这篇博客说的很详细了,我只是把我的具体情...

zy2317878的博客 4万+

fatal error lnk1561: 必须定义入口点_如何用iOS14 Widget小组件自定义玩法

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

weixin_42126865的博客 274

android 微信浮窗实现_就这?致敬安卓和微信,iOS 14正式发布!

大家好,我是虎皮大喵受到疫情影响的原因拥有30年历史的苹果 WWDC大会第一次被改成了线上模式尽管是面向开发者的活动但每年WWDC都会发布面向普通用户的消费级硬件或软件更新这一次,苹果将会给我们带来什么呢?接下来大喵就给大家盘点一下吧被传了这么久的iOS 14终于现身了!废话不多说,看看有哪些有意思的更新AppLibrary这是一个自动整理、分类用户App的功能将我们不想再主屏幕展示的...

weixin_35075144的博客 266

iOS扩展新特性之Widget开发(Today) 及网络请求部分

最近在研究iOS的一些扩展,在找资料的过程中,发现说的大多不够详尽,抱着学习总结的目的,想把自己研究学习的过程记录一下,有说的不对的地方欢迎大家批评指正,互相学习。 Widget主要作用是显示一些重要的及时性信息,或者提供一些重要常用功能入口。而且由于插件不允许键盘输入,所以用户需要能使用containing app来配置插件行为。 我是在已有的项目上添加的widget扩展,File->Ne...

weixin_34390105的博客 953

Visual Studio报错——LNK1561: 必须定义入口点

如下: 每个应用程序(exe)都应该有个启动点,这个点就是main函数。缺少就会出现link error 。 解决方法有2个: 1.添加含有main函数的CPP文件 2 右击属性,在常规项中修改配置类型,将应用程序修改为库,动静态库 https://jingyan.baidu.com/article/ad310e80bda0861849f49e9e.html 当然了,我只是遇到就记录一下,我的问题是main()写错了 ...

是鲤鱼啊 5860

VS2013 编译错误类型: 必须定义入口点

VS2013 编译错误类型: 必须定义入口点 LINK : fatal error LNK1561: 必须定义入口点 在进行vs2013编译的时候遇到报错1561:必须定义入口点,错误原因大致有以下原因: 1)作为启动项的项目,一般是错误定义或忘定义主函数 2)常规项目,修改 配置-常规-项目默认值-配置类型,选择“静态库lib”或“动态库dll” ...

Bussy的博客 3562

网易云音乐 iOS14小组件实践手册

苹果在今年的 WWDC20 上发布了小组件WidgetKit),支持在 iOS、iPadOS 主屏幕展示动态信息和个性化内容。加上 iOS 系统应用抽屉的加入,苹果对一向保守主屏幕大动干戈,导致用户也对小组件非常期待。但小组件的运行限制很多,如何在有限的机制上怎样做好用户体验就成为需要完成的挑战。 此文介绍小组件创建、原理和使用实战

小桥流水哗啦啦,iOS Coder 哒哒哒 3300

Widget是一切,Widget简介

作为一个初学者,好像什么都不懂哦!但是,我感觉已经深深地刻入了我的心中,因为它在代码中真的是随处可见!我百度了一番,翻译是,真的是很可爱了!所以,庞大的就好像一个变形金刚,是组装起来的。说正经的,中的的概念是非常广泛的,它不仅是ui元素,也可以是一些功能性的组件:比如手势检测的,用于主题数据传递的等等。...

あなたの可愛い41 4082

必须定义入口点

今天写一个测试小程序,碰到了VS提示未定义入口点,可是明明定义了main。 检查之下,发现我的CPP文件是重命名而来,在VS看来是不参与生成的文件,因此我们重新设置这个文件属性即可。

Deller_Breeze的专栏 1万+

Windows C++ 程序的入口点

第一个问题,什么是入口点? 对于开发者来说,程序的入口点就是程序执行的时候第一个执行的函数。 对于C++程序,常见的入口点有: 1.main 2.WinMain 3.DllMain 对于操作系统来说,程序的入口点就是把程序装载到内存后,第一条命令开始的地方。 操作系统(Windows)如何确定入口点呢? 首先,Windows下所有可执行程序都是PE格式,PE其中一个组成部分 可选头,...

iBliBiliBelieve的博客 1万+

C++报错之必须定义入口点(VS) 模板

1.检查自己main函数是否编写,main是否编写正确。2.调用模板函数时直接调用即可。我编写了模板函数quickSort,在main函数中调用时,在写main之前加上了typename<class T>,然后试图把数组类型写成T(因为在模板函数中数组类型为T):typename<class T> int main() { cout << "请输入一组数字(用空格隔开)进行快排" << en

yogima的博客 1万+

“Visual Studio 开发人员命令提示“中 解决 LINK : fatal error LNK1561: 必须定义入口点”问题

"Visual Studio 开发人员命令提示"中解决“ LINK : fatal error LNK1561: 必须定义入口点”问题

qq_41729660的博客 3243

QT、VS常见bug及解决办法(十二)——“error LNK1561: 必须定义入口点”

        在创建MFC工程时,会出现“error LNK1561: 必须定义入口点”的错误,出现原因是每个应用程序(文件格式为exe)都应该有个启动点,这个点就是main函数。缺少就会出现link error 。 解决方法有3: 1、添加含有main函数的CPP文件(百度给的方法,未尝试) 2、右击属性,在常规项中修改配置类型,将应用程序修改为库,动静态库(用过了,对我的系统来说不好使...

qq_37764129的博客 3018

VS2015错误 LNK1561:必须定义入口点

错误如下: 解释一下入口点, 每个应用程序(文件格式为exe)都应该有个启动点,这个点就是main函数。缺少就会出现link error 。 所以解决方法就有方向了,查看程序发现main函数名打错了,写成了”mian“,初级错误啊,哎~  ...

喜欢吃冰棍de谷利文君的博客 9241
上一篇: iOS绘制仪表盘,游标沿圆形轨迹移动动画
下一篇: 大专程序员能在iOS开发一直干下去吗?
在iOS写bug的杰克
博客等级 码龄6年 6粉丝 18原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值