Tag: 苹果电视

为什么要制作电视应用程序?

“电视的未来就是应用”。 这是蒂姆·库克(Tim Cook)在9月的苹果主题演讲和发布Apple TV v4时大胆提出的主张。 这种说法可以被夸大为夸大其词。 精心设计的夸张,旨在促进苹果自己的野心。 即使这是真的,这也不是苹果第一次成功地实现自我实现的预言。 但是,这对您意味着什么? 您的组织需要电视应用程序吗? 您最初的反应很可能是; “不”或“很好,但是,不”。 “当然,除非我们主要是视频驱动的,那有什么意义? 我们不是Vevo,Netflix或HBO,那为什么要打扰? 好吧,让我们来看看投资电视应用值得的几个原因。 1.电视正在重新成为主要的家庭娱乐设备 去年年底,《时代》杂志报道说,美国人平均每天看电视的时间减少了12分钟。 他们推测缓慢而剧烈的“电视死亡”和诸如苹果电视和Netflix之类的引发因素是一个重要因素,目前有260万美国家庭被归类为“仅宽带”。 但是,不是像Amazon Fire TV,Android TV和Apple TV这样的服务会杀死电视,也许它们毕竟是救星吗? 当然,传统的电视频道和节目制作仍然受到重大威胁,但是如今,没有电视作为每个客厅的中心的世界再次显得不可思议。 现在,电视收视率一直在缓慢下降,而互联网活动却在稳步增长,这些现在(最终)合并为不可抗拒的娱乐力量。 ……现在,没有电视作为每个客厅的中心的世界再次显得不可思议…… 2.物联网 当然,另一个新兴的数字趋势是“物联网”。 目前,诸如亚马逊回声之类的设备推动了家庭和办公对象之间连接性的提高,但是,如果您的电视成为明亮,喜人的指挥中心,即家庭操作中心,该怎么办? 我们所有人都可以拥有自己的白宫情况室-我们的沙发(带有筹码和蘸酱)放在我们的数字通信枢纽前面。 从这里我们不仅可以娱乐,而且可以控制和管理家庭活动和家庭物品。 因此,您的电视不仅可以重新获得作为主要娱乐平台的地位,而且还可以作为一种至关重要的生活管理工具而崭露头角。 不服气吗? 好吧,也许新的启用Siri的Apple TV控制器或Amazon Fire TV的启用语音的遥控器会让您信服。 不用再费力地摇动电池,也不必费劲地按下遥控器上的褪色按钮,只需执行几个简单的命令,您便可以掌握天气预报,足球队的名单或最新的股价。 3.曲线的前方 现在,以上两点似乎有些虚构,但这也许是现在投资应用程序的原因,而不是等待两年(当应用程序市场可能达到饱和点时)的原因。 考虑一下-在撰写本文时,Google Play商店中只有31个TV应用程序,而TVOS应用程序商店尚未启动,但其中将包含数百个应用程序(最多)。 与此相比, Google Play商店中有150万个智能手机应用程序 。 脱颖而出并领先于游戏的机会几乎不需要进一步论证。 已经有年轻,快速发展的公司加入了电视应用程序潮流: Airbnb是目前在TVOS应用商店中宣布的各种游戏和视频应用的组合。 除了少数可供Google TV使用的视频,音乐和娱乐应用程序之外,还有一个简单的“食谱手册”应用程序。 这些创新者和早期采用者仅仅是在跳鲨鱼吗?还是暗示电视应用程序已成为许多(如果不是大多数)公司和组织的领先营销产品? …已经有年轻,快速发展的公司加入了电视应用程序潮流… 4.游戏 显然,游戏是苹果TVOS计划的重要组成部分。 […]

为Apple TV开发

在上面的示例中,带有黄色突出显示的单元格清楚地指示了选定的产品。 为了获得这种用户体验,开发人员需要系统通知他们焦点更新,这就是焦点引擎起作用的地方。 焦点引擎 最初的重点 启动应用程序或显示新屏幕时,用户需要查看最初聚焦于哪个元素。 默认情况下,焦点引擎会选择屏幕上的第一个可聚焦元素。 在此示例中,聚焦引擎明智地聚焦于集合的第一个元素。 开发人员还可以选择确定哪个元素从重点开始。 例如,如果在显示屏幕时应将“浏览所有产品”按钮对准焦点,则Apple提供了属性preferredFocusEnvironments ,可以重写该属性以返回该按钮。 preferredFocusEnvironments是UIFocusEnvironment协议的一部分,控制视觉表示的对象符合该协议。 这意味着焦点引擎了解如何向充当焦点环境的组件提供更新,例如UIView或UIViewController 。 另外,由于视觉表示由较小的视觉表示组成,因此进一步暗示焦点环境可以由其他焦点环境组成,例如视图及其子视图,或者视图控制器及其子视图控制器。 聆听焦点更新 在前面的示例中,聚焦的单元格突出显示为黄色。 这可以通过以下方式实现: 这也是UIFocusEnvironment协议的一部分。 只要焦点引擎将焦点放在焦点环境上,它就会将didUpdateFocus消息发送到焦点环境。 此调用将在焦点环境链中传播,直到最终到达更新其视觉表示以表示焦点状态的元素为止。 在第一个产品专注于发布的示例中,我们的自定义单元收到了didUpdateFocus调用,检查了上下文以确保它是聚焦环境,并将其背景色更新为黄色。 didUpdateFocus还用于更新未聚焦元素的视觉表示。 在我们的示例中,当焦点从一种产品转移到另一种产品时,先前选择的产品的单元格将其背景色设置为浅灰色。 调试焦点更新 在开发过程中保持对焦点引擎行为的清晰了解非常重要。 Apple在Xcode中包含一个焦点检查器,使开发人员可以可视化焦点引擎周围的事件。 上图包括以下内容: 先前关注的项目- 带有实线边框的红色框 滑动方向- 带有虚线边框的浅红色框(在先前聚焦的项目内) 下一个重点元素- 带圆形红色边框的紫色框 可以通过在didUpdateFocus覆盖中设置断点,在应用程序中触发焦点更新以及检查上下文参数来访问可视化。 重点指南 由于聚焦引擎只能以严格的垂直或水平方式找到可聚焦的元素,因此在某些情况下,元素可能无法聚焦,因为它不在滑动方向指示的路径之内。 重点指南就是解决方案。 它们本质上用于通过利用其preferredFocusEnvironments属性来重定向焦点更新。 在下面的示例中,集合视图自动将焦点集中在其集合中与焦点单元相邻的单元上。 但是,除非焦点指南拦截了焦点更新,否则集合视图外部不在焦点单元路径中的元素将无法被焦点。 我们放置了一个焦点指南,该指南从“浏览所有产品”按钮的右边缘延伸到集合视图的右边缘。 由于有了这个聚焦指南,按钮才可以从集合中的最后一项聚焦。 焦点指南是不可见的,但仍可以使用焦点检查器看到。 当用户从最后一项向下滑动时,聚焦指南(蓝色框)将获得聚焦。 因为焦点指南的preferredFocusEnvironments设置为“浏览所有产品”按钮,所以它可以按预期重定向焦点。 以下是焦点指南设置的代码: 重要要点 在构建Apple TV应用程序时,值得花一些时间来全面了解焦点引擎的工作方式以及最终用户将如何浏览该应用程序。 让自己穿上鞋子,想象一下如何与应用程序交互。 此外,请确保您的应用是一致的,并且清楚其如何识别重点内容。 这样,在整个应用程序中,用户体验将变得流畅且连贯。

TvOSScribble,为tvOS构建涂鸦

正如我在“成为tvOS开发人员”中提到的那样,使用Apple TV时,其遥控器上缺少按键是最大的挑战之一。 对于非常常见的动作,有时很难找到直观的手势。 这些动作之一肯定是在频道之间切换的动作。 基本上没有办法使用数字键盘,P +或P-按钮进行调换,这在任何其他电视平台中都存在,而Apple Tv中则没有。 为AppleTv创建涂鸦 我很久以前与同事谈论Siri Remote的问题时,这是一个疯狂的主意。 拥有涂鸦手势识别器来代替传统的数字键盘不是很好吗? 类似于我们在Apple Watch中已经拥有的东西… 在接下来的几天里,我们进行了交谈之后,我做了一些尝试来创建这个概念的非常简单的原型,但每一个都失败了。 我发现的最大限制是,无论手势的实际初始位置如何,SDK报告的起始位置始终是数字化仪的中心,这意味着位置(x:960,y:540)。 随后的滑动将值作为与该起点的偏移量。 因此,实际上在Siri Remote中可能发生的情况是,手指完全位于同一点,您会从SDK获得不同的位置,因为它们取决于手指到达该点的顺序…🤕 第1集:路线 使用顺序说明是解决此问题的首次尝试,避免了SDK的先前限制。 由于手指的实际位置不可靠,随后的滑动从那里获取偏移值,因此很容易获得手势的方向顺序。 并根据这些指示来推断结果。 因此,如果用户以↗️➡️↘️⬇️↙️↙️➡️的顺序进行手势操作,我可以自动推断出2的结果,依此类推: 0:“⬅️↙️⬇️↘️➡️↗️↗️⬆️↖️⬅️” 1:“↗️⬇️” 2:“↗️➡️↘️⬇️↙️➡️➡️” 3:“↗️➡️↘️⬇️↙️➡️➡️↘️⬇️↙️” 4:“↙️➡️⬆️⬇️” 5:“⬅️⬇️➡️↘️⬇️↙️⬅️⬅️” 6:“⬅️↙️⬇️↘️➡️➡️↗️⬆️↖️⬅️” 7:“➡️↙️” 8:“⬅️↙️⬇️↘️➡️↘️⬇️↙️↙️⬅️↖️⬆️↗️➡️↗️↗️⬆️↖️↖️⬅️” 9:“⬅️↙️⬇️↘️➡️➡️↗️↗️⬆️↖️↖️↘️⬇️↙️↙️” 这是一个非常理论上的情况,基本上不会发生。 在现实世界中,总是存在错误和重复手势,这些错误和重复手势会生成疯狂的序列,与我们的任何理论模式都不匹配。 因此,我介绍了一些代码,以在获取方向序列之前清理一下手势……为了避免数字化仪的高精度导致错误的方向,将点移到与上一个位置过于接近的位置。 一旦确定了方向序列,就将Levenshtein距离应用于每个模式,结果得到最接近的匹配。 听起来是个不错的计划,对吧? 好吧,我不得不说实际上不是 我反复进行了很多工作,结果总是非常糟糕,特别是对于最长的手势(6、8或9)。 所以,我放弃了…… 第2集:CoreML 我已经把这个随意的想法放在失败的项目的抽屉里,然后继续我的生活,仿佛什么都没有发生😀 几个月后。 我当时在圣何塞参加WWDC 2017,甚至没有想到这个疯狂的主意。 那时Craig Federighi先生主持了会议,并提出了我实际上缺少创建涂鸦的工具……CoreML。 此时此刻,我立即再次谈到了涂鸦,并希望借助这项惊人的新技术再给它一次机会。 目前,我对机器学习的知识基本上为零,所以我一回到家就开始寻找更多信息。 我真的很惊讶,那里写满了关于机器学习的大量废话。 许多文档将其视为黑匣子,您在其中放入了一些数据,但没有对过程背后的数学进行任何解释,就得到了结果。 如果您此时也希望对机器学习有一个很好的介绍,建议您通过Google查看此youtube播放列表。 在短短的视频中,您会获得一个非常清晰的指南,适合没有魔术盒的初学者。 在我研究所有新世界的同时,Sri […]

tvOS 10:SpriteKit和Focus Engine入门

大约一年前,Apple发布了AppleTV 4,并通过tvOS 9首次为开发人员开放了该平台。tvOS和iOS之间最大的区别可能是用户与系统的交互方式。 在iOS上,他们通常使用手指,但在tvOS上,使用游戏控制器或iPhone的“ Remote”应用可通过随附的遥控器取消互动。 为了管理这种新的输入法,苹果公司创建了一种叫做焦点引擎的东西。 在焦点引擎内,屏幕上的任何一个元素都具有当前焦点,并且焦点在用户导航时在一个元素和另一个元素之间移动。 如果用户按下按钮,则输入将定向到当前关注的元素。 在tvOS 9中,焦点引擎仅在UIKit中受支持,因此SpriteKit开发人员可以滚动自己的系统。 在tvOS 10中,焦点引擎已扩展为支持SpriteKit,目的是使SpriteKit游戏中的交互性更符合UIKit和基于TVML的应用程序。 我目前正在将我的iOS游戏Mazy移植到tvOS,并且其中一部分采用了新的Focus引擎来为游戏菜单提供动力。 我想在这里分享我的经验,希望您在从事类似工作时能从中受益。 有2个WWDC视频,介绍SpriteKit中新的焦点引擎集成。 在tvOS上进行焦点交互(SpriteKit位从15:20开始,但是如果您不熟悉焦点引擎,则值得观看整个视频)。 SpriteKit的新增功能中也介绍了该引擎(焦点位从39:15开始)。 我有一个github存储库,您可以克隆以遵循以下示例。 你可以在这里找到它。 由于需要tvOS 10,它需要Xcode 8 beta,它也是使用Swift 3编写的。下面的每个部分都有一个场景。 只需在GameViewController.swift中更新此行以选择相关场景即可: 让场景= SimpleMenuScene(大小:view.frame.size) SimpleMenuScene 首先让我们得到一个简单的菜单。 SimpleMenuButton是SKNode的子类,将显示一个字符串,并在聚焦时更改颜色。 我们将从垂直列表中的3个SimpleMenuButton开始。 为了使项目可聚焦,它必须实现UIFocusItem。 SKNode已经实现了此功能,因此我们可以在SimpeMenuButton子类中重写它,如下所示: 覆盖public var canBecomeFocused:Bool { 得到{ 返回真 } } (请注意,在Swift 2.3中,canBecomeFocused是函数而不是属性)。 现在我们需要处理焦点更改,我们通过实现UIFocusEnvironment中的didUpdateFocus来实现。 您可以在关注的项目或其父项之一上实施此操作。 在这里,我已经在SimpleMenuScene上实现了它 覆盖func didUpdateFocus(在上下文中:UIFocusUpdateContext,与协调者:UIFocusAnimationCoordinator){ 让prevItem = context.previouslyFocusedItem 让nextItem = context.nextFocusedItem 如果让prevButton […]

成为tvOS开发人员

一年多以前,我来到苏黎世加入了Zattoo。 Zattoo是一家位于瑞士的小型公司,致力于通过互联网分发电视,无论用户使用哪种设备。 在这些设备中,有iPhone,iPad,现在有了App Store,这是Apple“最近”发布的第四代Apple TV。 即使在这段时间里我也一直在开发我们的iOS App,事实是我更专注于tvOS。 由于其上下文和设备类型,在电视平台上进行开发总是会导致其自身类型的问题。 这不是我第一次面对他们。 过去,我从事其他电视平台的开发工作,例如Euskaltel电视或Imagenio(如今更名为Movistar电视),在开发大屏幕时总是会遇到一系列问题。 实际上,Apple TV并非例外。 –过扫描 :使用屏幕边缘附近的所有区域基本上是不安全的,因为根据用户的电视设置,其中的所有内容都可能被裁剪甚至完全隐藏。 到目前为止,在tvOS中处理过扫描是一项手动任务,但是由于tvOS 11和新的safeAreaLayoutGuide定义,从现在开始将变得更加容易。 –非常长的会话,甚至永不结束:在大屏幕应用程序中查看用户会话的平均时长后,您会注意到与标准移动应用程序的巨大差异。 在大屏幕中,用户实际上在使用您的App时会在沙发上休息几个小时,更不用说那些只关闭电视以使STB和您的App在后台存活数天甚至数周的人。 内存管理和后端资源消耗的效率在这里确实很重要。 –屏幕不旋转:这实际上不是问题,而是优点。 自动布局问题较少,使开发人员更满意。 –基于焦点的导航:从用户到设备的较大距离决定了与之交互的方式。 由于无法使用触摸屏,因此可以使用遥控器在屏幕上的不同交互元素上移动焦点。 处理焦点始终是一项艰巨的任务,并且由于tvOS中的Focus Engine效率低下,因此与Apple TV一起工作时甚至更糟。 –尺寸 :一切都在进一步,因此一切都必须更大,就这么简单。 最好的方法是遵循平台人机界面准则定义的大小。 对于Apple TV,可以在此处找到它们。 –带宽 :在大屏幕上工作时不是硬性限制。 STB通常使用以太网连接到高速网络。 盒子的主要目的是接收视频,至少现在是高清的。 因此,从后端获取一些JSON应该不是什么大问题。 除了先前的问题,Apple TV的Apps开发也有其自身的特色。 它们可以归纳为三点, 导航,定制和可靠性。 导航 : Apple TV是迄今为止我使用的第一台机顶盒,其性能足以提供流畅的用户导航。 通过Siri Remote,Apple引入了电视导航的全新概念。 在拥有大量按钮的遥控器世界中,苹果公司有勇气😜释放了一个仅由六个按钮和一个数字转换器控制的盒子,开发人员只能使用其中两个按钮和数字转换器。 与Siri Remote一起使用,结合tvOS的后堆栈逻辑和焦点管理,是Apple Tv中最具挑战性的部分之一。 它始终需要做出折衷,这不仅是因为只有少数几个可用的手势,而且还因为使用本地组件作为AVPlayerViewController时,Apple可能不允许甚至保留很多手势。 我最近发布的有关tvOS定向点击的文章就是一个例子,您可以看到,检测到这些点击的唯一方法实际上是利用GameController SDK。 定制 : […]