如何将tvOS旋转为纵向模式

继续讨论其他一些小众话题,让我们看一下如何旋转tvOS应用程序以在纵向模式下工作。 因此,在tvOS中什么是“肖像”,那么……从SDK角度来看,这个概念就不存在了。 iOS中没有任何与旋转相关的方法可以将其转移到tvOS,这是有充分理由的。 话虽这么说,仍然有一小段有用的tvOS应用程序以比垂直空间更多的垂直空间呈现。 Panic的状态板应用程序就是一个很好的例子,该应用程序是在2013年使用iPad制造的,iPad最好安装在所连接电视的背面。 当然,您也可以使用此选项,但是对于我们的用例和本文的主题,我们将坚持使用tvOS作为平台。

在尝试解决此问题之前,我们经过了漫长而艰辛的思考,我们如何才能做到这一点,并在将来保持应用程序可维护。 引起人们的第一个担心是,这将影响我们编写约束的方式,必须在编写代码之前先将布局转换为头脑。 这感觉就像是一个无法忍受的情景,是如此难以忍受,以至于我们几乎决定完全放弃肖像的想法。 在就如何最好地解决此问题进行了小型头脑风暴之后,我们想到了下降到层次结构中最低(或最高)点,更具体地说是应用程序窗口的想法。

如果交换宽度和高度,则最终得到正确的帧尺寸。 但是,窗口现在放错了位置。 这是我们的好朋友改造进入并保存一天的地方。

我们要做的第一件事是使旋转正确,对于我们的用例,我们必须将屏幕旋转-270度。 这可以通过CGAffineTransform轻松完成。 瞧,现在我们可以正确旋转屏幕了。 但是,屏幕现在有些放错了位置。

为了固定位置,我们需要将另一个变换应用于窗口,这是xy坐标的平移。 这些值很容易计算,只需将宽度减去高度再除以2,对y位置进行相同操作,但取反即可。 然后,我们通过调用.concatenating创建转换并将其应用于我们已经存在的旋转转换。 使用此方法,我们可以将两个变换合并为一个,最后将其应用于窗口。

就在那里 该应用程序的窗口现在使用的是纵向窗口大小,已经旋转并定位为适合电视屏幕的中间位置。
更重要的是,您现在可以使用与通常应用于视图的约束类型相同的约束,而不必考虑屏幕旋转的问题。 除了过分扫描时我想强调的一个小细节。

在tvOS人机界面指南中,Apple提到应该至少将60个用于顶部和底部插图,将90个用于左侧和右侧插图。 现在,您已经旋转了电视屏幕,在处理过扫描时,应该将这些值反转为安全起见。 因此,顶部和底部为90,左侧和右侧为60。