iOS灵动岛开发实践

本文介绍了在iPhone 14 Pro系列上开发灵动岛的实践过程,包括基本概念、项目构思和代码实现。重点讲解了如何创建主工程和灵动岛Widget,使用ActivityKit进行数据交互,以及如何处理点击事件和数据更新。通过实例展示了如何实现电商抢购功能,提供了一个从主工程启动、更新、停止灵动岛Widget的示例。
摘要由CSDN通过智能技术生成

一、基本概述

名词基础知识

 

苹果在 iPhone 14 Pro 系列中增加一个灵动岛,主要目的是隐藏挖孔造型的高端“感叹号屏”。 通过动画的视觉差异,用户找不到原来的挖孔屏。灵动岛是一种巧妙的设计,模糊了软件和硬件之间的界限,它可以在锁屏的情况下根据不同的应用程序操作和提示、通知和活动内容的需求,自动改变大小和形状,展示用户关注的事情。

开发基础知识

 

1、设备只支持iPhone,并且是有“药丸屏”的iPhone14Pro和14Pro Max上;

2、Max系统版本、编译器及iOS系统版本:>=MacOS12.4、>=Xcode14.0+beta4、>=iOS16.1+beta;

3、使用 ActivityKit 用于配置、开始、更新、结束实现 Live Activity 能力。使用 WidgetKitSwiftUIwidget 小组件中创建 Live Activity 的用户界面,这样小组件和 Live Activity 的代码是可以共享;

4、Live Activity 目前只能通过 ActivityKit 从主工程获取数据,或者从 远程通知 获取最新数据;无法访问网络或者接受位置更新信息

5、 ActivityKit 和 远程通知推送 更新的数据不能超过4KB;

6、Live Activity 可以给不同的控制绑定不同的 deeplink,使其跳转到不同的页面;

7、Live Activity 在用户主动结束前最多存活8小时;

8、已经结束的 Live Activity 在锁屏也最多保留4小时,所以一个 Live Activity 最长可以停留12小时;

9、最多同时存在两组 Live Activity ,排列顺序待发现

二、项目构思

这里以电商常用的抢购商品作为实践,包含的交互方式主要有如下特征:

1、主工程商品能展示基本信息,包含图片、名称、价格、开抢时间、预约按钮等;

2、主工程记录商品预约状态及灵动岛的任务状态,避免重复预约;

3、开启预约后,在打开App的情况下,灵动岛看到该商品的基本信息,支持立即抢购;

包含了开发灵动岛的基础知识:

1、主工程数据通过 ActivityKit 来启动、更新、停止灵动岛 Widget;

2、灵动岛 Widget 的基本布局方式及开发注意事项;

3、灵动岛 Widget 点击跳转到主工程的事件通讯;

三、代码实践

1、创建主工程及灵动岛Widget工程

在主工程的 info.plist 文件中添加 Supports Live Activities 并且设置为 YES

2、熟悉 ActivityKit 常用对象及API,创建基本视图

 

数据部分(主工程):继承 ActivityAttributes ,定义常用的数据来控制或改变UI及状态。这里包含的商品的基本信息,可以认为是不变的状态,可变的状态需要在 ContentState 中声明。

// SeckillProduct.swift

import Foundation
import ActivityKit

struct SeckillProductAttributes: ActivityAttributes {
    typealias SeckillProductState = ContentState
    public struct ContentState: Codable, Hashable {
	      // 可变的属性需要放在这里,activity调用update进行数据的更新
        var isSeckill: Bool
    }
    
    // 一个灵动岛任务的初始化数据,描述一些不可变数据
    let productId: String
    let name: String
    let price: String
    let image: String
    let countDown: Double
    let isSeckill: Bool
    
    init(productId: String, name: String,  price: String, image: String, countDown: Double, isSeckill: Bool = false) {
        self.productId = productId
        self.name = name
        self.price = price
        self.image = image
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值