tvOS聚焦引擎在90度旋转的电视上?

问题描述 投票:1回答:1

[我们公司正在使用纵向连接的电视,并将其连接到运行我们自己的自定义应用程序的Apple TV,作为状态板。这纯粹是一个内部的,被黑客入侵的应用程序-无需担心发送到App Store。

为了避免横向渲染,我们有一个基类视图控制器在视图上执行90度CGAffineTransform(并且项目中的所有其他视图控制器都继承自该基类):

class PortraitViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.transform = CGAffineTransform(rotationAngle: -1*CGFloat.pi/2)
    }
}

此选项非常适合显示图像,文本,视频,自定义UI控件等。但是,焦点引擎不会随视图旋转,并且由于它希望电视仍以横向显示,因此Apple TV会以远程手势显示最终偏离我们想要的角度90度这是一个例子:

enter image description here

这里,我们希望在遥控器上向右/向左滑动,以在两个段之间移动分段控件的焦点。但是,由于Apple TV认为它以横向模式显示,因此它认为分段控件是垂直定向的,向上/向下滑动可移动分段的焦点。

有人知道是否有办法说服焦点引擎不要在视图旁边旋转,或者以其他方式在不旋转视图的情况下以纵向模式显示视图?

ios tvos
1个回答
0
投票

这很糟糕,但是我想实现自己想要的唯一方法就是完全接管聚焦系统。因此,使根窗口/视图具有焦点可劫持所有输入事件,监听原始输入事件,并根据需要通过原始触摸/按下事件管理自己的焦点系统。您仍然可以使用preferredFocusEnvironments + setNeedsFocusUpdate来利用所有系统UI +动画来进行聚焦/非聚焦元素,但是将需要完全掌握如何根据用户输入转移焦点以及如何转发焦点更新提示以实现视差效果。

在UIApplication或UIWindow级别覆盖sendEvent(_ event:UIEvent)以便在将输入事件传递给系统之前将其转换为纵向坐标,这在纸面上似乎是一个好主意,并且几乎可以正常工作。除非无法以编程方式生成或修改触摸事件。既然您不关心App Store的可行性,但是也许您可以破解一种以编程方式生成或修改触摸事件的方法?子类化UITouch / UIPress?使用performSelector调用私有或未记录的方法?

© www.soinside.com 2019 - 2024. All rights reserved.