iOS 开发 高级:通过AirServer使用AirPlay镜像并实现多屏幕显示控制
2013-05-20 11:56
981 查看
AirPlay是iOS中一个很酷的功能,通过Wi-Fi连接支持AirPlay的设备,然后使用镜像功能就能在其他设备显示内容,播放声音。有很多大型的游戏都支持AirPlay,这样比如连接电视时,那么iPhone就完全变成了游戏手柄,而电视显示游戏画面。由于大部分的iOS用户都没有使用Apple TV,因此多屏幕的应用比较少使用。但这并不能否定AirPlay的强大功能。本文将介绍使用AirServer软件在Mac或Windows上实现AirPlay的功能,进而介绍通过编程实现多屏幕显示的方法。
1、使用AirServer软件实现AirPlay
AirServer是一个极其强大的软件,能够通过软件的方式完全实现Apple TV的功能。大家可以到Google之,有免费的试用版。下图就是其图标:
在安装好AirServer后,打开,可以看到标志在Mac的工具栏上:
OK,接下来就是将iPhone与Mac连接起来,可以使用iPhone上的热点,用Mac连接,或者在Mac上建立一个热点,让iPhone连接Wifi。
连接好之后,双击iPhoneHome键,拉到音量调节界面,如下:
点击右边的AirPlay按键,弹出设置界面:
选择第二个,也就是Mac:
打开镜像,完成。这样没有错误的情况下,在Mac上就实现了AirPlay的镜像,如下图:
接下来你可以播放视频,音乐来测试一下效果。如果有点卡的话,可以考虑重启一下wifi,这样传输速度会快一点。
2、编程实现多屏幕。
在可以使用AirPlay之后,我们要实现多屏幕,也就是在电脑上显示的和iOS设备上显示的内容不一样。
2.1 基本原理
获取新的屏幕信息--->创建一个新的Window--->将新的Window对应的Screen屏幕设置为新的屏幕--->设置新的屏幕的UI显示
我们知道,一般情况下,我们在开发过程中只使用一个window(UIWindow),而且一般在AppDelegate文件中创建,一般情况下我们甚至完全不用理会window。一样的,screen(UIScreen)我们除了通过它来获取一些屏幕信息之外也不会做任何处理,比较屏幕也只有一块。那么现在要实现多屏幕就不一样了。我们要创建新的window,获取新的screen,并且将window和screen联系在一起,这样要在这个window中显示的内容就可以显示在这个新的屏幕当中。
2.2 实现
STEP 1:检查是否有多的屏幕存在,如果有,那么直接设置。一般先在viewController中设置一个UIWindow和UIScreen的实例:
然后,检查:
在这里通过screens Method来判断是否屏幕数大于1,如果是意味着有别的屏幕连接到iOS设备,这时获取这个屏幕。
对于window初始化然后关键是要设置其Frame,一般就是设置成屏幕大小,全屏。然后将window的screen设置为外部屏幕。然后就可以进行window相关view,viewController的设置,上面的代码只是一个小例子。最后设置window 的hidden为NO。
对于上面这种情况,主要是针对iOS在启动应用之前就已经AirPlay了,那么,如果是启动应用后才要打开AirPlay呢?
当然有办法------notification
STEP 2:Notification检查屏幕的连接情况。
UIScreen有两个notification可以检查屏幕的连接情况:
UIScreenDidConnectNotification
UIScreenDidDisconnectNotification
一旦屏幕连接上或断开iOS设备,就会发出上面的notification。这样就简单了,设置一下:
然后进行相关的处理。
这样差不多就搞定了。基本上在iOS开发中主要是view的编辑,因为在新的屏幕中分辨率不一样,要进行特定的设置。
【本文为原创文章,如需转载,请注明出处!来自songrotek的Blog】
1、使用AirServer软件实现AirPlay
AirServer是一个极其强大的软件,能够通过软件的方式完全实现Apple TV的功能。大家可以到Google之,有免费的试用版。下图就是其图标:
在安装好AirServer后,打开,可以看到标志在Mac的工具栏上:
OK,接下来就是将iPhone与Mac连接起来,可以使用iPhone上的热点,用Mac连接,或者在Mac上建立一个热点,让iPhone连接Wifi。
连接好之后,双击iPhoneHome键,拉到音量调节界面,如下:
点击右边的AirPlay按键,弹出设置界面:
选择第二个,也就是Mac:
打开镜像,完成。这样没有错误的情况下,在Mac上就实现了AirPlay的镜像,如下图:
接下来你可以播放视频,音乐来测试一下效果。如果有点卡的话,可以考虑重启一下wifi,这样传输速度会快一点。
2、编程实现多屏幕。
在可以使用AirPlay之后,我们要实现多屏幕,也就是在电脑上显示的和iOS设备上显示的内容不一样。
2.1 基本原理
获取新的屏幕信息--->创建一个新的Window--->将新的Window对应的Screen屏幕设置为新的屏幕--->设置新的屏幕的UI显示
我们知道,一般情况下,我们在开发过程中只使用一个window(UIWindow),而且一般在AppDelegate文件中创建,一般情况下我们甚至完全不用理会window。一样的,screen(UIScreen)我们除了通过它来获取一些屏幕信息之外也不会做任何处理,比较屏幕也只有一块。那么现在要实现多屏幕就不一样了。我们要创建新的window,获取新的screen,并且将window和screen联系在一起,这样要在这个window中显示的内容就可以显示在这个新的屏幕当中。
2.2 实现
STEP 1:检查是否有多的屏幕存在,如果有,那么直接设置。一般先在viewController中设置一个UIWindow和UIScreen的实例:
@property (nonatomic,strong) UIWindow *externalWindow; @property (nonatomic,strong) UIScreen *externalScreen;
然后,检查:
- (void)checkForExistingScreenAndInitializeIfPresent { if ([UIScreen screens].count > 1) { self.externalScreen = [[UIScreen screens] objectAtIndex:1]; NSLog(@"external screen :%@",self.externalScreen); CGRect screenBounds = self.externalScreen.bounds; self.externalWindow = [[UIWindow alloc] initWithFrame:screenBounds]; self.externalWindow.screen = self.externalScreen; // Set the initial UI for the window for example { UILabel *screenLabel = [[UILabel alloc] initWithFrame:screenBounds]; screenLabel.text = @"Screen 2"; screenLabel.textAlignment = NSTextAlignmentCenter; screenLabel.font = [UIFont systemFontOfSize:100]; UIViewController *externalViewController = [[UIViewController alloc] init]; externalViewController.view.frame = screenBounds; [externalViewController.view addSubview:screenLabel]; self.externalWindow.rootViewController = externalViewController; } self.externalWindow.hidden = NO; } }
在这里通过screens Method来判断是否屏幕数大于1,如果是意味着有别的屏幕连接到iOS设备,这时获取这个屏幕。
对于window初始化然后关键是要设置其Frame,一般就是设置成屏幕大小,全屏。然后将window的screen设置为外部屏幕。然后就可以进行window相关view,viewController的设置,上面的代码只是一个小例子。最后设置window 的hidden为NO。
对于上面这种情况,主要是针对iOS在启动应用之前就已经AirPlay了,那么,如果是启动应用后才要打开AirPlay呢?
当然有办法------notification
STEP 2:Notification检查屏幕的连接情况。
UIScreen有两个notification可以检查屏幕的连接情况:
UIScreenDidConnectNotification
UIScreenDidDisconnectNotification
一旦屏幕连接上或断开iOS设备,就会发出上面的notification。这样就简单了,设置一下:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidConnect:) name:UIScreenDidConnectNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil];
然后进行相关的处理。
#pragma mark - Notifications Handler - (void)screenDidConnect:(NSNotification *)notification { NSLog(@"connect"); self.externalScreen = notification.object; // Handle the configuration below...... } - (void)screenDidDisconnect:(NSNotification *)notification { NSLog(@"disconnect"); if (self.externalWindow) { self.externalWindow.hidden = YES; self.externalScreen = nil; self.externalWindow = nil; } }
这样差不多就搞定了。基本上在iOS开发中主要是view的编辑,因为在新的屏幕中分辨率不一样,要进行特定的设置。
【本文为原创文章,如需转载,请注明出处!来自songrotek的Blog】
相关文章推荐
- iOS 开发 高级:通过AirServer使用AirPlay镜像并实现多屏幕显示控制
- iOS学习笔记20-通过AirServer使用AirPlay镜像并实现多屏幕显示控制
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(四):使用UIRefreshController实现下拉刷新
- IOS 特定于设备的开发:获取和使用设备姿势(通过手机方向控制3d物体显示)
- 使用tinymini210开发远程的温度监控系统,实现C#和安卓客户端显示数据和控制
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(三):批量处理表格数据
- 该篇博客是在《iOS高级开发——CollectionView的动态增删cell及模型重构》的基础上继续进行开发的。在之前那篇博客中,我们实现了动态的增删cell,并且使用了模型Model进行重构
- IOS中通过UICollectionView和UICollectionViewFlowLayout设置初始游标cursor来控制左右滑动来实现多条记录水平分页显示及控制音标读音
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(一):显示数据
- iOS开发 - 滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和Masonry简单使用)
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(二):删除表格中的数据
- IOS应用开发14——使用UICollectionView实现图片列表显示
- iOS开发使用storyboard预览UI在不同屏幕显示效果
- iOS开发-新版Xcode在Appdelegate中通过代码控制跳转,不使用系统默认跳转到默认ViewController
- iOS开发—使用GCD实现多线程
- Delphi for iOS开发指南(9):在iOS应用程序中使用ListBox组件来显示TableView
- iOS项目开发实战——使用UICollectionView实现瀑布流
- iOS开发 自定义tableView样式(使用代码/使用Interface Builder)、分组显示、给TableView增加索引、给TableView增加SearchBar
- iOS开发使用UIWebView显示多种文档
- iOS开发屏幕适配,纯代码是如何实现的?