iOS学习笔记20-通过AirServer使用AirPlay镜像并实现多屏幕显示控制
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的实例:
- @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的编辑,因为在新的屏幕中分辨率不一样,要进行特定的设置。
iOS学习笔记20-通过AirServer使用AirPlay镜像并实现多屏幕显示控制相关推荐
- iOS 开发 高级:通过AirServer使用AirPlay镜像并实现多屏幕显示控制
AirPlay是iOS中一个很酷的功能,通过Wi-Fi连接支持AirPlay的设备,然后使用镜像功能就能在其他设备显示内容,播放声音.有很多大型的游戏都支持AirPlay,这样比如连接电视时,那么iP ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...
- OpenCV for Ios 学习笔记(4)-标记检测1
本文原始地址:OpenCV for Ios 学习笔记(4)-标记检测1 简单的标记经常是以白色块和黑色块构成的规则图形.因为我们预先知道这些因素,所以我们可以很容易检测标记. 如图: 首先,我们需要找 ...
- IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...
IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...
- iOS学习笔记-地图MapKit入门
代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...
- iOS学习笔记-自定义过渡动画
代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...
- IOS学习笔记07---C语言函数-scanf函数
2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072 ...
最新文章
- java绑定变量怎么加_在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量
- STL中 map 和 multimap
- php可以支持代码重用技术的命令,Linux下的编程 PHP高级技巧全放送(一)
- glxinfo: not found
- springcloud使用zipkin实现链路追踪与监控
- mysql批量添加报错_技术分享 | MySQL 在批量插入时捕捉错误信息
- 《计算机系统:系统架构与操作系统的高度集成》——1.6 操作系统的演化
- 凌波多媒体教室软件_看胖瘦终端,如何让教室变得更“智慧”
- 蓝桥杯 c语言入门试题,蓝桥杯c语言试题2015
- 使用selenium下载百度图片
- 超级实用网址合集(必须收藏一波)
- hotnets2018 Networking in Heaven as on Earth 阅读报告
- linux设备驱动--字符设备模型
- 微信小程序通过服务号推送模板消息
- 【Git】fatal Not a git repository or any of the parent direc
- 数据库编程入门培训(一)
- 数据分析常用五大软件介绍
- 计算机英语大专期末考试,电子科技大学《大学英语2(专科)》20春期末考试【标准答案】...
- (课程类 Course)
- STM8使用SPI通信需要注意的几个问题
热门文章
- win10 配置 IIS PHP MySQL 环境
- Java NIO Selector详解(含多人聊天室实例)
- Android阵营苹果,安卓党转苹果阵营:第一次使用iPhone要注意哪些问题
- ubuntu 永久打开USB串口权限、232串口权限
- 简单的(第一人称射击)FPS游戏
- 拆解天猫精灵AI联盟之得邦照明
- 易语言和python交互[易语言源码|贝贝吧_易语言通过读取文件获取WIFI信息的代码...
- 网络直播采用的技术(一)
- 如何将XLSM文件转换成XLSX格式
- 计算机网络技术店面取名,电脑店铺起名