2010-04-18 23 views

回答

35

我找你是同样的事情。上周末,我写了一个小的UIApplication类添加镜像支持,我发布到代码谷歌代码。

http://code.google.com/p/iphoneos-screen-mirroring/

要使用它,你只需要设置它在你的应用程序委托的程序去把空空像这样:

[[UIApplication sharedApplication] setupScreenMirroringOfMainWindow:mainWindow framesPerSecond:20]; 

上周末,我只有一次机会尝试使用Apple AV输出线在大屏幕电视上播放。性能不恒星,因此我不会推荐使用高于30 fps的帧速率...

+0

在这里不工作只有黑屏与[[UIApplication sharedApplication] setupScreenMirroringOfMainWindow:window framesPerSecond:20]; 我在iPad上调试VGA适配器? – x2on 2010-04-20 06:50:03

+0

新版本与[[UIApplication sharedApplication] setupScreenMirroringWithFramesPerSecond:20.0]一起使用;但速度很慢。 – x2on 2010-04-21 14:52:41

+0

我推出了一个新版本,可以直接使用CALayer进行复制。我会看看明天的表现会不会更好(因为dev iPad不在了,所以今晚不能尝试)。 – 2010-04-22 18:11:34

3

每个UIWindow对象(基本上是顶层视图)都分配了一个屏幕(UIScreen),您当然可以设置所需的屏幕。因此,将主要内容移动到第二个屏幕很容易,但镜像很难。 (如果你不想听讲为什么它很丑,跳到下一段),我相信这是苹果的意图,这是因为两次绘制相同的东西,一个分辨率更高,并且因为之前观看界面的经验进入任何呈现模式都是相当不利的,相比之下,直到视频播放,主题演讲已经开始,等等,这是你显然想要考虑的情况,但是镜像是一个坏主意。

UIWindow继承自UIView,所以尽管我对这个确切的东西没有太多个人经验,但您仍应该能够将其绘制到某种类型的位图上下文中,然后使用两个不同的UIWindows只有在他们的图像视图推动实际的像素到他们各自的屏幕。如果您只想镜像一个特定的自定义视图(并且不包括它的子视图),这会相当容易,因为您可以在设备屏幕上显示该视图(捕获任何输入),然后以具有方法的方式进行设计要调用它在任何上下文中绘制它(某些drawRects可能正常工作),并调用另一个屏幕上超级特殊的自定义子视图,这将实现drawRect以仅调用实际视图上的方法。

希望这有助于,对不起,我咆哮了一下:(

+0

你为什么说“一个分辨率更高”?我昨天刚接触投影机,默认为1024x768,与iPad相同。我希望它默认镜像,除非你的应用程序决定在外部显示其他东西。展示应用程序概念真的很棒。 – jamone 2010-04-19 19:49:14

+0

虽然我同意炫耀应用程序会很酷,但请记住,苹果公司认为这不会是人们将主要使用这个功能的原因:P但是,如果您不介意未看到屏幕当iPad连接到外部显示器时,它很容易将主UIWindow移动到其他UIScreen - http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIScreen_Class/Reference/UIScreen .html – 2010-04-19 20:49:12

+0

它可以在模拟器4.2上运行吗? 我已经尝试在模拟器上使用此代码与电视out..but没有显示出来.. :( – Hisenberg 2011-02-16 14:37:18

5

我认为值得补充的是,QuartzCore框架是强制性的,否则在编译时会出现4个错误。

Undefined symbols: 
    "_CATransform3DMakeRotation", referenced from: 
     -[UIApplication(ScreenMirroring) updateMirroredWindowTransformForInterfaceOrientation:] in UIApplication+ScreenMirroring.o 
     -[UIApplication(ScreenMirroring) updateMirroredWindowTransformForInterfaceOrientation:] in UIApplication+ScreenMirroring.o 
     -[UIApplication(ScreenMirroring) updateMirroredWindowTransformForInterfaceOrientation:] in UIApplication+ScreenMirroring.o 
    "_kCAGravityResizeAspect", referenced from: 
     _kCAGravityResizeAspect$non_lazy_ptr in UIApplication+ScreenMirroring.o 
    (maybe you meant: _kCAGravityResizeAspect$non_lazy_ptr) 
    "_OBJC_CLASS_$_CADisplayLink", referenced from: 
     objc-class-ref-to-CADisplayLink in UIApplication+ScreenMirroring.o 
    "_CATransform3DIdentity", referenced from: 
     _CATransform3DIdentity$non_lazy_ptr in UIApplication+ScreenMirroring.o 
    (maybe you meant: _CATransform3DIdentity$non_lazy_ptr) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status