Apple TV+ app 的这个轮播和焦点是如何做到丝般顺滑的配合?

2025 年 12 月 29 日
 Dukewill

跟 GPT / Gemini / Claude 斗智斗勇好几个日日夜夜都没能摸清楚里面的门道,可能 AI 在一些小众的技术细节上还是力不从心,特别是 tvOS 上的焦点控制。只能来请教熟悉 tvOS / SwiftUI 的大佬们了。

用文字不太好描述,做了个图:

想请教:

  1. Apple TV 上的 Apple TV+ app 顶部 Hero (大图背景)和上层的按钮可能是用什么 SDK 实现的?( Tabview ? ScrollView ?普通的 ZStack ?)
  2. 它是怎么做到焦点在最左侧的“Renew Apple TV”按钮上时,既可以向左切换影片,又能仅在到达最左侧第一部影片时才呼出侧边栏(侧边栏应该是.tabViewStyle(.sidebarAdaptable))?

我尝试了:

折腾得心累,我甚至怀疑 Apple 是不是用了什么私有 SDK 或者什么 UIKit 的特性来实现。

还请大佬们不吝赐教。

3874 次点击
所在节点    iDev
15 条回复
Cabana
2025 年 12 月 30 日
哈哈,这个在 Android 上感觉挺好实现的。你们不能监听拦截并消费按键事件么?
Dukewill
2025 年 12 月 30 日
@Cabana 理论上也可以拦截,但这里有一个系统级的侧边栏,它的响应优先级似乎更高,拦不住啊
Cabana
2025 年 12 月 30 日
@Dukewill
Android 里事件传递是自顶向下,但是否消费是自底向上的。
哈哈,说了这么多 Android 的也没啥参考性,等一个 iOS 大佬来
Dukewill
2025 年 12 月 30 日
@Cabana 大佬谦虚了,交流讨论嘛,说不定就能受到什么启发
timesh
2025 年 12 月 30 日
是不是影片标题和按钮是一个大 div 。切换底图时,这个 div 渐隐,切图,然后 div 显示。配上 A15 芯片,就很丝滑吧。
timesh
2025 年 12 月 30 日
左侧我觉的有 2 个方案,一个是计数器,轮播和右按钮就加,左按就减到 0 就唤起左侧功能区。
或者是轮播图有个 index ,不开启无线轮播那再往左轮播就变-1 然后展开左侧功能区。
Dukewill
2025 年 12 月 30 日
@timesh 现在问题的关键,就是找到关键的问题🐶

大佬的思路就是我现在的 index 方案,麻烦的是侧边栏,它有一个系统级的响应,就是焦点只要到屏幕最左侧,再按一下向左就能呼出这个侧边栏。

我就是不知道 Apple 是怎么做到既能向左切影片,又避免呼出侧边栏,焦点还不抖的(直到最左侧的第一部影片)
pc10300
2025 年 12 月 30 日
额 我能想到的就是,在 renew apple tv 按钮左侧,加个透明的按钮,当 focusstat == 这个透明的按钮的时候 index -= 1 ,当动画执行完了以后 再把 focusstate 给到动画结束后的 index 的按钮上。
Dukewill
2025 年 12 月 30 日
@pc10300 看起来就是我说的“幽灵焦点”的方案,这个的问题就是 - 快速连续左切的话,焦点似乎来不及回到正确位置,会让侧边栏鬼畜闪现 。。。
RSTAR
2025 年 12 月 30 日
说句题外话,我觉得这个侧边栏特别恶心,它违反了统一的交互规则,所有 App 都是在 Top 页面再按返回就是退出到桌面,它这一弹出,很容易给用户一种错觉,已经到头了,然后继续留在 TV app 里。
我觉得这明显是故意的,因为任何交互设计师都能发现这个问题,只不过浓眉大眼的苹果竟然也明目张胆的干这种龌龊之事,着实让我震惊。
pc10300
2025 年 12 月 30 日
@Dukewill 那就得保证,焦点到了这里 暂时不让继续移动了之类的,等动画走完了再说, 苹果说不定藏了 API 。
Dukewill
2025 年 12 月 30 日
@RSTAR 哈哈,可能他们单纯觉得这个侧边栏比原来那种顶部菜单栏更炫酷
Dukewill
2025 年 12 月 30 日
@pc10300 #11

大佬这个确实是一个思路,我看看能不能实现先,感谢。
Loratad1ne
2025 年 12 月 31 日
@RSTAR 用下来感觉:侧边栏可以容纳比顶部导航还要多的东西,而且有层级。iPad tv app 里,顶部导航好看是好看,但是有些菜单只有侧边栏有
RSTAR
2025 年 12 月 31 日
@Loratad1ne #14 主要问题是苹果自己打破自己定的规范,就像法院亲自违法,吃相太难看了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1182010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX