IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> iOS16 锁屏小组件开发 -> 正文阅读

[游戏开发]iOS16 锁屏小组件开发

前言

解决如何添加一个锁屏小组件的问题,其实很简单,就是在桌面小组件的基础上新增了3个WidgetFamily类型去支持锁屏小组件,我们只需要支持一下WidgetFamily和视图即可。

说明

iOS16 新增了锁屏的编辑功能,其中有两块区域可以放置小组件,WidgetFamily也新增了accessoryInlineaccessoryRectangularaccessoryCircular三种。对应关系如下图所示:说明1

一、accessoryInline

accessoryInline类型小组件只能放置在顶部的小组件区域,只能放置一行ImageText且长度固定,左边一定会带有一个系统日期
说明2

二、accessoryRectangular、accessoryCircular

accessoryRectangularaccessoryCircular 只能放在==下方的小组件区域(1x4)==排列组合。
accessoryRectangular外形是一个圆角矩形,内容是一个矩形,占位1x2所以最多放置2个。上下左右是有一定的边距的,并不是填满。
accessoryCircular外形是是一个圆角方形,内容是一个圆形,占位1x1所以最多放置4个。上下左右是有一定的边距的,并不是填满。说明3

限制

  1. 刷新机制依旧延续桌面小组件的刷新机制。
  2. 文字和图片的颜色设置无效,在锁屏小组件上都会被渲染成系统时间一样的颜色,但是颜色设置会导致颜色的深浅不一样。
  3. accessoryInline 只能显示ImageTextaccessoryRectangular、accessoryCircular 还能显示一些ProgressView
  4. 尺寸非常小,且位置固定,展示内容有限。
  5. 无法像桌面小组件一样长按打开后面的编辑页面用SiriIntent 提供用户配置,自由度较小。

代码

只需要在Widget入口的supportedFamilies属性中支持即可

@main
struct MyWidget: Widget {
    let kind: String = "MyTWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            WidgetEntryView(entry: entry)
        }
        .configurationDisplayName("xxx")
        .description("xxx")
        // 在这里支持小组件类型
        .supportedFamilies([.accessoryInline, .accessoryRectangular, .accessoryCircular])
    }
}

视图则可以使用 @Environment(.widgetFamily) var family 来区分尺寸,编写不同的视图。

struct WidgetEntryView : View {
    var entry: Provider.Entry
    @Environment(\.widgetFamily) var family // 尺寸环境变量
    var body: some View {
        switch family{
        case .accessoryInline :
            Text("顶部文字")
        case .accessoryCircular :
            Text("1x1组件")
        case .accessoryRectangular :
            Text("1x2组件")
        default :
            Text("默认")
        }
    }
}

如果你的项目目标系统是iOS14Widget还要支持iOS14 的桌面小组件,可以使用版本判断来区分supportedFamilies

func getWidgetSupportedFamilies () -> [WidgetFamily]{
    if #available(iOS 16, *) {
        return [.accessoryInline, .accessoryRectangular, .accessoryCircular, .systemSmall]
    } else {
        return [.systemSmall]
    }
}

@main
struct MyWidget: Widget {
    let kind: String = "MyTWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            WidgetEntryView(entry: entry)
        }
        .configurationDisplayName("xxx")
        .description("xxx")
        // 在这里支持小组件类型
        .supportedFamilies(getWidgetSupportedFamilies())
    }
}

如果需要像闹钟那样的毛玻璃背景的话可以使用 AccessoryWidgetBackground()说明4

struct WidgetEntryView : View {
    var entry: Provider.Entry
    @Environment(\.widgetFamily) var family // 尺寸环境变量
    var body: some View {
        switch family{
        case .accessoryInline :
            Text("顶部文字")
        case .accessoryCircular :
        	ZStack {
          		AccessoryWidgetBackground()
            	Text("1x1组件")
         	}
        case .accessoryRectangular :
            Text("1x2组件")
        default :
            Text("默认")
        }
    }
}

参考文献

本人新手,如果有写错的地方欢迎指正,期待和大家一起交流开发。

《Apple-creating-a-widget-extension》
《Apple-widgetfamily》
《Apple-Creating Lock Screen Widgets and Watch Complications》
《iOS14 Widget开发踩坑(一)修正版-初识别与刷新》
《iOS14WidgetKit开发实战1-4》

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:51:25  更:2022-10-22 21:53:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/3 4:23:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码