您现在的位置:首页 >> 环保科技

极岛Dynamic Island初探

时间:2023-04-21 12:17:46

idget() UgcEntryWidget() //新增Live Activity CoffeeDeliveryActivityWidget() }}

此外,App的的设计机密文件Info必需增加NSSupportsLiveActivities,并设置为true;

ActivityAttributes

ActivityAttributes相当于数据模型Model,具本体情况细可分动态数据和静态数据;ActivityAttributes条款阐述了出今日Live Activity之前的主旨。它的内部类别ContentState表示Live Activity的动态主旨。

一个大的都是示范了一个果汁饭盒API的ActivityAttributes条款的协作。该API的Live Activity表明已交付的果汁名称为静态数据,而CoffeeDeliveryStatus为动态数据,随着时间的推移而改变。

struct CoffeeDeliveryAttributes: ActivityAttributes { public struct ContentState: Codable, Hashable { var currentStatus: CoffeeDeliveryStatus } var coffeeName: String}enum CoffeeDeliveryStatus: Codable, Sendable, CaseIterable { case recieved, preparing, outForDelivery var displayText: String { switch self { case .recieved: return "Recieved" case .preparing: return "Brewing" case .outForDelivery: return "On its way!" } } var longText: String { switch self { case .recieved: return "We've recieved your order." case .preparing: return "Our baristas are hard at work brewing up your cup!" case .outForDelivery: return "Get ready, your brew is speeding over to you right now." } }}建立ActivityWidget表明示意平面图

脱俗火山岛有三种示意平面图型式,从左边到右依次是:

精细示意平面图总和示意平面图扩示范意平面图

三种示意平面图间可以完成切换;当一个人在动态火山岛之前触摸并长按精细或总和示意平面图时,以及当一个实时社区活动备份时,扩示范意平面图就可能会浮现。在不拥护脱俗火山岛的器材上,解锁平面图标展开的示意平面图表明为Live Activity更原先墙上。为了确保系统对尽可能在每个一段距离表明你的APP的实时社区活动,APP改写文档时能够拥护所有示意平面图。

扩示范意平面图,由于区域内空间较大,进一步分割出一个大具本体情况区域内

每一均都可程序功能强大示范主旨;接下来了解到文档如何协作各均示意平面图:

struct CoffeeDeliveryActivityWidget: Widget { var body: some WidgetConfiguration { return ActivityConfiguration(for: CoffeeDeliveryAttributes.self) { context in CoffeeDeliveryActivityWidgetView( attributes: context.attributes, state: context.state ) } dynamicIsland: { context in DynamicIsland { DynamicIslandExpandedRegion(.leading, priority: .greatestFiniteMagnitude, content: { //扩充区域内的左边侧示意平面图 }) DynamicIslandExpandedRegion(.trailing, content: { //扩充区域内的左边边示意平面图 }) } compactLeading: { //精细示意平面图左边侧区域内示意平面图 } compactTrailing: { //精细示意平面图左边边区域内示意平面图 } minimal: { //总和示意平面图示范 } } }}

其之前ActivityConfiguration结构所设计本体是这均的核心;

public struct ActivityConfiguration : WidgetConfiguration where Attributes : ActivityAttributes

ActivityConfiguration结构所设计本体遵循WidgetConfiguration条款,其之前Attributes泛型表达式遵循ActivityAttributes条款,而前面介绍过的CoffeeDeliveryAttributes就是ActivityAttributes条款的协作;

ActivityConfiguration的调用init方法如下所示:

public init(for attributesType: Attributes.Type = Attributes.self, @ViewBuilder content: @escaping (ActivityViewContext) -> Content, dynamicIsland: @escaping (ActivityViewContext) -> DynamicIsland) where Content : View

侧面文档之前就是协作了ActivityConfiguration的init方法,都有三个表达式:attributesType指明必需的传播的content模型类别,这里登录为CoffeeDeliveryAttributes.self;第二个表达式content,登录一个有界,它为出今日锁死平面图标上的社区活动建立示意平面图。当你提醒某人更原先实时社区活动主旨时,这个示意平面图也可能会以墙上的型式出今日不拥护脱俗火山岛的器材的主平面图标上;第三个表达式dynamicIsland,协作脱俗火山岛的内部UI协作。

DynamicIsland结构所设计本体,主要用途协作脱俗火山岛各均具本体情况UI;主要用途协作精细示意平面图、总和示意平面图、扩示范意平面图的各均UI;

生命周期监管

ActivityKit之前下定义了Activity具体来说,主要用途监管Live Activity从重启到状况备份、过后,零碎的生命周期报表;

重启APIpublic static func request(attributes: Attributes, contentState: Activity.ContentState, pushType: PushType? = nil) throws -> Activity示例Task { let attributes = CoffeeDeliveryAttributes(coffeeName: coffeeName) let state = CoffeeDeliveryAttributes.ContentState(currentStatus: .recieved) do { try await MainActor.run { let activity = try Activity.request( attributes: attributes, contentState: state, pushType: nil ) //.... print("Started activity") } catch (let error) { print("Error starting activity (error) (error.localizedDescription)") } }

今日,让我们开始Activity,必需的传播状况state和属性attributes,重启Activity。警惕:这里相当多区隔attributes和state就是为了针对静态数据(attributes)和动态数据(state)分别处置,后续只有动态数据才可能会被备份。

状况备份APIpublic func update(using contentState: Activity.ContentState) async示例func updateActivity(state: CoffeeDeliveryStatus) { let state = CoffeeDeliveryAttributes.ContentState(currentStatus: state) Task { await liveActivity?.update(using: state) }}

备份动态数据。

中断func stop() { Task { await liveActivity?.end(using: nil, dismissalPolicy: .immediate) await MainActor.run { liveActivity = nil } }}

马上中断liveActivity。

默认

脱俗火山岛拥护DeepLink,可以默认进入App;具本体情况来说:对于所有的小组件,都有脱俗火山岛,在的小组件的示意平面图相关联所设计之前添加widgetURL(_:)示意平面图修饰符。如果的小组件的示意平面图相关联所设计都有多个widgetURL修饰符,则行为形式化。

对于限于WidgetFamily的的小组件,如WidgetFamily.systemMedium,WidgetFamily.systemLarge或WidgetFamily.systemextrallarge,将一个或多个客户端的设计机密文件添加到小焊接的示意平面图相关联所设计之前。可以同时限于widgetURL和Link的设计机密文件。如果交互以Link的设计机密文件为目标,则系统对限于该的设计机密文件之前的URL。对于小焊接之前其他任何区域内的交互,系统对限于widgetURL示意平面图修饰符之前登录的URL。

@ViewBuildervar body: some View { ZStack { AvatarView(entry.character) .widgetURL(entry.character.url) .foregroundColor(.white) } .background(Color.gameBackground)}限于场面初探

再次,我们从产品相反初步探讨一下Live Activity及脱俗火山岛的限于场面;可以发现不论是在脱俗火山岛示范接收者还是在锁屏平面图形界面示范接收者,这类接收者必需符合实时性极强,使用者持续关唯,比如正在完成之前的决赛最高分,正在配送的餐食还有多久送出;这类接收者在一个比起较短算起内、高频被备份,比较简单呈今日脱俗火山岛;所以一般来说,一个大拆成类别的App简单增加Live Activity及脱俗火山岛的适配器:

本体育赛事类App运动监控类App饭盒配送类App论述

本篇文中零碎介绍了建立脱俗火山岛这一原先UI交互型式所必需的开发计划报表,开发计划者必需警惕所设计数据模型时,区隔好哪些动态数据必需被备份,哪些静态数据保持不变;另外,我们也初步探讨了脱俗火山岛的限于场面,对于那些产品形体必需及时备份状况接收者的App,较慢适配器脱俗火山岛,将可能会给使用者带来更快的本体验,值得试图。

参考>

作者:狐友技术制作团队

来源:账号社会公众号:搜狐技术产品

引自:

如何缓解类风湿关节炎疼
拉肚子快速止泻小窍门
迈普新
孩子不爱吃饭是怎么回事
孩子积食吃什么消食
标签:初探
相关阅读