`
啸笑天
  • 浏览: 3465576 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

TVOS tips

    博客分类:
  • TVOS
 
阅读更多

酷

App Programming Guide for tvOS

 

 酷

All video playback on Apple TV is based on HTTP Live Streaming and FairPlay Streaming. See About HTTP Live Streaming and FairPlay Streaming Overview. For HTTP Live Streaming authoring specifications, see HLS Authoring Specification for Apple TV.

 

酷

Apple tvOS引入了一下几个特有的框架。

 

酷 资源限制

Apple TV上的应用没有持久化的本地存储。这意味着每个应用都应该将数据存放在iCloud,并且通过一种用户体验较好的方式将它们获取到。

除了缺乏本地存储,Apple TV应用的大小也被限制在200MB。如果一个应用的大小超过了限制,就需要使用按需加载的方式将它们打包。知道什么时候加载以及如何价值新的资源对开发一款成功的应用非常重要。更多关于按需加载资源的信息,见《On-Demand Resources Guide》

 酷

 

只有焦点引擎能够显式的更新焦点,意味着系统并没有提供API来直接在某个方向操作和移动焦点。只有在用户发送移动事件、系统和应用请求更新的时候,焦点引擎才会更新焦点。更多关于焦点的更新,见《Updating Focus Programmatically》

酷

 

如果焦点引擎找到了一个可以接受焦点的视图,它会通过shouldUpdateFocusInContext:代理方法给应用提供一个评估是否移动焦点的机会。焦点引擎按前一个和下一个的顺序通知每个焦点环境(先通知前一个视图,然后下一个视图,最后通知它们的父视图)。只要有一个视图返回NO,这次移动就会被取消。更多关于焦点环境的信息,见《UIFocusEnvironmentProtocol Reference》

酷系统产生的焦点更新动作

在许多环境下,必要的时候UIKit会自动更新焦点。下面是焦点自动更新的一些示例:

 

  • 焦点视图被移除。
  • UITableView或UICollectionView重新加载数据。
  • 弹出一个新的视图控制器。
  • 用户按Menu按钮返回。

酷 在视图控制器中支持焦点

因为UIViewController响应UIFocusEnvironment,自定义视图控制器可以覆盖UIFocusEnvironment中的代理方法来实现自定义焦点行为。自定义视图控制器:

  • 覆盖preferredFocusedView来明确焦点默认从哪里开始。
  • 覆盖shouldUpdateFocusInContext:定义焦点如何移动。
  • 覆盖didUpdateFocusInContext:withAnimationCoordinator:响应焦点的更新时机并且改变应用的状态。

视图控制器可以通过调用setNeedsFocusUpdate请求焦点引擎来重置焦点到当前的preferredFocusedView上。注意,只有当该视图控制器包含一个已经获取焦点的视图时,setNeedsFocusUpdate才会起作用。

 

酷 在CollectionViewTableView中支持焦点

使用集合视图和表视图时,我们通过代理对象自定义焦点行为。这个模式同时也用于基于焦点的界面的实现。UITableViewDelegate和UICollectionViewDelegate协议定义了UIFocusEnvironment协议中相同的方法,但是只能给表视图和集合视图使用。

在集合视图和表视图中支持焦点的技巧:

  • 使用UICollectionViewDelegate中的collectionView:canFocusItemAtIndexPath:或者UITableViewDelegate中的tableView:canFocusRowAtIndexPath:方法表明一个Cell是否可以获取焦点。这与在自定义视图中重写canBecomeFocused方法的作用一样。
  • 使用UICollectionView和UITableView中的remembersLastFocusedIndexPath属性表示离开焦点离开后,再次获取焦点时是否应该停留在最后一次的位置。

酷在自定义视图中支持焦点

UIViewController、UIView都实现了UIFocusEnvironment协议,因此所有在在视图控制器中支持焦点提到的都可以在自定义视图中使用。因为视图能够获取焦点,所以实现自定义视图的焦点行为时,还需要考虑一些额外的东西:

  • 如果自定义视图需要能够获取焦点,重写canBecomeFocused方法,并返回YES(默认返回NO)。视图可以是一直都能够获取焦点或者只能在一些条件下获取焦点。例如UIButton在禁用状态是不能获取焦点的。
  • 如果一个视图需要将焦点重定向到领悟一个焦点(例如子视图),需要重写preferredFocusedView。
  • 重写didUpdateFocusInContext:withAnimationCoordinator:响应焦点改变事件,并更新程序状态。

酷 焦点相关动画

当焦点发生改变的时候,获取焦点的视图执行动画,而前一个视图动画进入无焦点状态。与应用中的其它动画不一样的是,UIKit会调整焦点动画的时长和动画曲线来达到某种系统级的行为。例如,当焦点快速移动的时候,动画的时长会虽用户的移动而加速。

UIKit为支持焦点的视图类提供了系统定义的焦点动画。使用UIKit的内置类UIFocusAnimationCoordinator和addCoordinatedAniamtions:completion:方法可以为系统定义的行为创建动画。

添加到协调器的动画可以在获取焦点或者失去焦点的时候运行(不是同时),这取决于提供给协调器的焦点环境。获取焦点的视图和失去焦点的视图共同的父视图或者焦点获取视图的父视图,在焦点动画执行时,运行自己的动画。而失焦视图的父视图在失去焦点的时候执行动画。

- (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator
{
    [super didUpdateFocusInContext:context withAnimationCoordinator:coordinator];

    if (self == context.nextFocusedView) {
        [coordinator addCoordinatedAnimations:^{
            // focusing animations
        } completion:^{
            // completion
        }];
    } else if (self == context.previouslyFocusedView) {
        [coordinator addCoordinatedAnimations:^{
            // unfocusing animations
        } completion:^{
            // completion
        }];
    }
}

 

 酷有许多原因会导致视图不能获取焦点,下面列举了一些例子(但不是全部):

  • 视图的canBecomeFocused方法返回NO。
  • 视图的hidden属性被设置为YES。
  • 视图的alpha属性被设置为0。
  • 视图被设置为不能接受用户交互。
  • 视图被其它视图覆盖。

UIKit为UIView提供了一个隐藏的方法_whyIsThisViewNotFocusable来帮助测试上面提到的几种情况。这个方法只在调试器中有用,并且会将可能的原因打印出来。

 

(lldb) po [(UIView *)0x148db5234 _whyIsThisViewNotFocusable]
ISSUE: This view has userInteractionEnabled set to NO. Views must allow user interaction to be focusable.
ISSUE: This view returns NO from -canBecomeFocused.
(lldb) po [(UIView *)0x14b644d70 _whyIsThisViewNotFocusable]
ISSUE: One or more ancestors are not eligible for focus, preventing this view from being focusable. Details:

    <ExampleAncestorView 0x148db5810>:
        ISSUE: This view has userInteractionEnabled set to NO. Views must allow user interaction to be focusable.

 酷

在UINaviGationController栈中的vc顶部的控件无法获得焦点,可能是UINavigationBar挡住了控件。

 

 酷

[MUX翻译] Apple TV 人机界面指南

 tvOS Human Interface Guidelines

 酷触摸板事件:滑动,点击,轻触。

 酷Apple TV上的所有图片按@1x分辨率提供。

酷

每个应用必须提供一个小尺寸和大尺寸图标。应用图标必须呈递两种尺寸,两者长宽比相同。

小尺寸图标——这个尺寸的图标在Apple TV主屏上使用。

实际尺寸:400px by 240px

安全区域尺寸:370px by 222px

非聚焦态尺寸:300px by 180px

聚焦态尺寸:370px by 222px

大尺寸图标——这个尺寸的图标在App Store使用。

尺寸:1280px by 768px

 

大尺寸图标应照搬小尺寸图标的设计。尽管大尺寸图标与小图标使用不同,它仍然是你的应用图标,应该在外观与小图标相匹配。

 

应用图标安全区域模板能够帮你把内容放在合适位置

酷顶部展区(Top Shelf)图片

最低要求:每个应用至少提供单张顶部展区静态图——当应用在主屏最上面一行且被选中聚焦时使用。

顶部展区静态图尺寸:1920px by 720px

 酷启动图像

尺寸:1920px by 1080px 

酷标签栏 Tab Bars

高度是140px

 

酷 

Using the Focus Guide to Improve your tvOS Apps

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Swift 开发者必备 Tips

    Swift是Apple为iOS、iPadOS、macOS、watchOS和tvOS开发的一种强大的、类型安全的编程语言。作为Swift开发者,掌握一些实用的Tips能够显著提高开发效率和代码质量。"Onevcat Swifter - Swift 开发者必备 Tips"正是...

    objccn-swifter-tips-swift4最新版

    Swift,作为Apple公司推出的一种强大且安全的编程语言,被广泛应用于iOS、macOS、watchOS以及tvOS的开发。随着技术的不断发展,Swift4版本的发布带来了许多新特性和改进,使得开发更加高效且易于理解。本文将围绕...

    Swifter Tips.zip

    1. **Swift基础**: Swift是一种由Apple开发的开源编程语言,用于构建iOS、macOS、watchOS和tvOS的应用。它的语法简洁明了,易于理解,同时也具备高性能。 2. **Swifter**: "Swifter"可能指的是熟练掌握Swift的...

    swift开发者必备tips(第四版)

    Swift是一种由Apple公司开发的开源编程语言,主要用于构建iOS、iPadOS、macOS、watchOS和tvOS的应用程序。自2014年发布以来,Swift以其简洁、安全和高性能的特点,迅速成为开发者社区中的热门选择。这本书针对Swift...

    Swifter -Swift 必备 Tips (第四版) 王巍(喵神) 作

    Swift作为Apple公司推出的一种强大且易学的编程语言,被广泛应用于iOS、macOS、watchOS以及tvOS的开发。它的设计目标是提高开发效率,增强代码的安全性和可读性。在《Swifter》第四版中,王巍(喵神)分享了许多实用...

    气泡,提示,Tips,Popup。一款基于Swift编写的气泡弹窗,可高度自定义.zip

    Swift是一种由苹果公司推出的开源编程语言,专为构建iOS、iPadOS、macOS、watchOS和tvOS应用程序而设计。它具有简洁、安全和高性能的特点,使得开发过程更为高效和愉快。这款气泡弹窗组件充分利用了Swift的灵活性和...

    Swifter - 100 个 Swift 必备 tips (第四版) 喵神出品,必属精品

    Swift 是苹果公司推出的一种强大且易学的编程语言,用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 应用程序。这本指南的核心目标是帮助开发者提高 Swift 编程效率,提升代码质量和可维护性。 在“100 个 Swift ...

    iOS游戏应用源代码——SlavaBushtruk-Alterplay-iOS-dev-tips.zip

    Swift是苹果公司推出的高效、现代化的编程语言,专为iOS、macOS、watchOS和tvOS开发设计。熟悉Swift的基本语法、面向对象编程特性、泛型和闭包等概念,对于理解和修改源代码至关重要。 其次,项目涉及到SpriteKit...

    swifttips文档格式全集

    Swift是苹果公司推出的一种强大的、安全的编程语言,主要用于开发iOS、macOS、watchOS和tvOS的应用程序。"swifttips文档格式全集"显然是一份全面介绍Swift编程技巧和最佳实践的资源集合,提供了PDF、EPUB和MOBI三种...

    SWIFTER-100个Swift必备Tips(第二版)

    11. **SwiftUI**:苹果推出的全新UI框架,通过声明式编程来构建用户界面,适用于iOS、macOS、watchOS和tvOS平台。 12. **轻量级枚举模式(CaseIterable)**:通过遵循CaseIterable协议,可以让枚举的所有case自动...

    Swifter - Swift 开发者必备 Tips

    1. **Swift基础知识**:Swift是一种强大且易读的编程语言,用于构建iOS、macOS、watchOS和tvOS的应用。它的语法简洁明了,但包含许多高级特性,如类型推断、枚举和结构体的强大功能、以及可选类型等。了解这些基础是...

    Swift Tips

    Swift是苹果公司推出的一种编程语言,专为iOS、macOS、watchOS和tvOS等平台设计,用于构建高质量的应用程序。Swift以其简洁、安全和高性能的特点赢得了开发者们的喜爱。"Swift Tips"很可能是由知名专家OnveCat撰写的...

    OBJC中国-Swift 开发者必备Tips_Swift_iOS

    Swift是苹果公司推出的一种强大的、安全的编程语言,主要用于开发iOS、macOS、watchOS以及tvOS的应用程序。这篇资源“OBJC中国-Swift 开发者必备Tips”旨在为Swift开发者提供一系列实用的技巧和最佳实践,帮助他们...

    Swift2.0官方中文版+100必备tips

    Swift是苹果公司推出的一种强大的、安全的编程语言,主要用于开发iOS、macOS、watchOS和tvOS的应用程序。自2014年首次发布以来,Swift迅速成为了开发者们的首选工具,以其简洁、易读的语法和高效性能赢得了广泛的...

    Swifter tips

    Swift是一种强大且现代的编程语言,被广泛应用于iOS、macOS、watchOS和tvOS的开发。通过掌握一些实用的技巧,你可以提升代码的可读性、可维护性和性能。下面我们将深入探讨一些关于Swift优化和提升开发效率的关键...

    swift-SwiftTips一些有用的Swift小贴士

    Swift是Apple公司推出的一种强大的、安全的编程语言,用于构建iOS、macOS、watchOS和tvOS的应用程序。本文将围绕“SwiftTips”这一主题,分享一些实用的Swift编程技巧和最佳实践,帮助开发者提高效率,写出更加优雅...

    swifter-tips.pdf

    Swift是一种由苹果公司设计的编程语言,用于开发iOS、iPadOS、macOS、watchOS、tvOS和Linux应用程序。它旨在结合C和Objective-C的优点,同时避免它们的一些陷阱,从而提高安全性、性能和现代性。以下是从给定的文件...

    SwiftTips:Swift提示和技巧

    Swift是Apple为开发iOS、macOS、watchOS和tvOS应用程序推出的一种强大的编程语言。它以其简洁、安全和高性能的特点赢得了开发者们的喜爱。本篇主要围绕"SwiftTips:Swift提示和技巧"展开,旨在帮助开发者们提升Swift...

Global site tag (gtag.js) - Google Analytics