iOS:如何使一个视图控制器镜像另一个视图操作

时间:2014-05-09 06:28:58

标签: ios objective-c uiwindow airplay uievent

我试图"镜像"视图控制器:

  1. app实例化视图控制器1(A类)
  2. app在另一个UIWindow(外部显示器,通过Airplay或物理连接器)上实例化视图控制器2(也是A类)
  3. 应在视图控制器2上模仿视图控制器1接收的任何触摸事件
  4. 我已经参与了MkMapViews和简单视图控制器之类的工作,只需捕捉区域更改或在vc1中滚动等内容并告诉vc2设置其区域或滚动到该位置, vc1上的UIControl IBActions也在vc2等中调用相同的操作。

    这适用于简单的情况,但问题在于复杂的视图控制器,其中包含UITableViews和自定义UITableViewCells等扩展/收缩等内容。我发现自己必须实现每个可能的委托/行动并让一堆物体意识到他们不应该知道的事情,如果我要完全重复使用它,这似乎是错误的。

    我尝试过vc1的子视图树,并使用objc_setAssociatedObject()将视图控制器实例中的UIResponder相互关联,但我仍然要抓住vc1上的每个代理/操作来查找vc2上的UIResponder来模仿事件。必须有一种更简单的方法来做到这一点。我尝试了对UIWindow进行子类化并覆盖sendEvent并将事件发送到外部显示UIWindow,但每个UIEvent似乎都有关联的信息它发送到UIWindow,因为外部显示UIWindow在我发送时没有对它做任何事情。

    如何以一种允许我将镜像抽象为一个漂亮的子类或其他东西的方式来实现这一点,以便我不必使用特殊情况代码丢弃每个视图控制器?我已经考虑过调整UIView的触摸事件了,但是我甚至不确定这是否会有所帮助,因为UITouches和UIEvents与他们来自的UIWindow相关联,而且UIEvent似乎没有为我提供一种创造自己活动的方式。

    注意:我尝试做的是默认的Airplay镜像,因为我希望外部显示器体验能够充分利用完整的显示分辨率和尺寸。这个想法是允许iPhone应用程序在设备本身上工作(即比它更宽),同时还提供适合该显示器的外部显示器的体验(宽度高于高,更高的分辨率,机会以更易读的HDTV友好格式呈现信息。)

    思想?

0 个答案:

没有答案