极岛Dynamic Island初探
时间:2023-04-21 12:17:46
此外,App的的设计机密文件Info必需增加NSSupportsLiveActivities,并设置为true;
ActivityAttributesActivityAttributes相当于数据模型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 : ActivityAttributesActivityConfiguration结构所设计本体遵循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,较慢适配器脱俗火山岛,将可能会给使用者带来更快的本体验,值得试图。
参考>作者:狐友技术制作团队
来源:账号社会公众号:搜狐技术产品
引自:
。如何缓解类风湿关节炎疼拉肚子快速止泻小窍门
迈普新
孩子不爱吃饭是怎么回事
孩子积食吃什么消食
- .94㎡极简原木风设计清新自然,让生活也变得精细而简单
- .海南一17岁少年33岁大姐,数小时内多次折磨,结局让人愤怒!
- .财报前瞻|直抵不确定性山丘,Netflix能否逆风翻盘?
- .Genny 2022春夏系列,丰富色彩,修身廓形的柔和,时尚也有面料的光泽感
- .女子出轨后遭丈夫报复,每天强迫妻子4次!妻子哭诉:坟头也但他却
- .三湘印象发盈警 2022年归母折合同比下降72.68%
- .运动流淌高阶美:四个极简小众瑜伽服!
- .老婆和经纪人出差,发了张朋友圈,我好像了!
- .总结经验拓长处 促进质量管理提升
- .微光全球华人红毯:关晓彤终于穿对,张天爱火辣惊艳,赵丽颖一言难尽
- .常州一“鸭店”被捣毁,被抓时女嫖客正激吻:你以为女人不好色啊
- .两大环保新政下月迟至实施,这些板块有望受益,资金关注股曝光(附股)
- .GUCCI 最新广告大片 | VAIN x McDonald 全新合作 | A$AP Rocky x Gufram 潮流家具复刻版
- .过了60岁,有些钱没合理花了
- .肩周炎久治不愈?看看红外光灸疗机
- .女子衣着单薄街头等车,露着后背浑身直打颤,躲藏在垃圾桶旁避风
- .妻子在家被客户两次,丈夫在屋子睡觉,却误以为妻子在看碟片
- .中天金融:2022年预亏125亿至139亿元 或被拟定退市风险警示
- ."RAY DESIGN"出品,爆炸好看的轿车手绘图欣赏(海耀设计分享)
- .3对高知聚众好色,玩“游戏”,被抓时还狡辩:我是自由恋爱