我正在尝试“镜像”视图控制器:
- 应用程序实例化视图控制器 1(A 类)
- 应用程序在另一个 UIWindow(外部显示器,通过 Airplay 或物理连接器)上实例化视图控制器 2(也是 A 类)
- 视图控制器 1 接收到的任何触摸事件都应在视图控制器 2 上进行模仿
我已经MkMapViews
通过在 vc1 中捕获诸如区域更改或滚动之类的东西并告诉 vc2 设置其区域或滚动到该位置来处理简单视图控制器之类的事情,让 vc1 上的 UIControl IBActions 也调用相同的动作vc2等
这适用于简单的情况,但问题来自复杂的视图控制器,这些控制器具有扩展/收缩等UITableViews
自定义功能UITableViewCells
。我发现自己必须实现每一个可能的委托/动作,并使一堆对象知道他们应该做的事情不知道,如果我要让它完全可重用,这似乎是错误的。
我已经尝试遍历 vc1 的子视图树并使用objc_setAssociatedObject()
将视图控制器实例中的 UIResponder 相互关联,但我仍然必须捕获 vc1 上的每个委托/动作以查找UIResponder
vc2 上的模拟事件。必须有一种更简单的方法来做到这一点。我也尝试了子类化UIWindow
和覆盖sendEvent
并将事件发送到外部显示器UIWindow
,但每个UIEvent
似乎都有信息将它与UIWindow
它的起源联系起来,因为外部显示器UIWindow
在我发送它时没有做任何事情。
我将如何以一种允许我将镜像抽象为一个不错的子类或其他东西的方式来做到这一点,这样我就不必在每个视图控制器中乱扔特殊情况代码?我曾考虑过调整 UIView 的触摸事件,但我什至不确定这是否会有所帮助,因为 UITouches 和 UIEvents 与它们起源的 UIWindow 相关联,而且 UIEvent 似乎没有为我提供创建自己的方法事件。
注意:我想要做的不是默认 Airplay 镜像,因为我希望外部显示体验能够利用完整的显示分辨率和尺寸。这个想法是允许 iPhone 应用程序在设备本身上运行(即,比它的宽度更高),同时还提供针对该显示器的外部显示器的体验(比它的高度更宽,更高的分辨率,有机会以更易读的 HDTV 友好格式呈现信息)。
想法?