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的实例:

[cpp] view plaincopy
  1. @property (nonatomic,strong) UIWindow *externalWindow;
  2. @property (nonatomic,strong) UIScreen *externalScreen;

然后,检查:

[cpp] view plaincopy
  1. - (void)checkForExistingScreenAndInitializeIfPresent
  2. {
  3. if ([UIScreen screens].count > 1) {
  4. self.externalScreen = [[UIScreen screens] objectAtIndex:1];
  5. NSLog(@"external screen :%@",self.externalScreen);
  6. CGRect screenBounds = self.externalScreen.bounds;
  7. self.externalWindow = [[UIWindow alloc] initWithFrame:screenBounds];
  8. self.externalWindow.screen = self.externalScreen;
  9. // Set the initial UI for the window for example
  10. {
  11. UILabel *screenLabel = [[UILabel alloc] initWithFrame:screenBounds];
  12. screenLabel.text = @"Screen 2";
  13. screenLabel.textAlignment = NSTextAlignmentCenter;
  14. screenLabel.font = [UIFont systemFontOfSize:100];
  15. UIViewController *externalViewController = [[UIViewController alloc] init];
  16. externalViewController.view.frame = screenBounds;
  17. [externalViewController.view addSubview:screenLabel];
  18. self.externalWindow.rootViewController = externalViewController;
  19. }
  20. self.externalWindow.hidden = NO;
  21. }
  22. }

在这里通过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。这样就简单了,设置一下:

[cpp] view plaincopy
  1. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidConnect:) name:UIScreenDidConnectNotification object:nil];
  2. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil];

然后进行相关的处理。

[cpp] view plaincopy
  1. #pragma mark - Notifications Handler
  2. - (void)screenDidConnect:(NSNotification *)notification
  3. {
  4. NSLog(@"connect");
  5. self.externalScreen = notification.object;
  6. // Handle the configuration below......
  7. }
  8. - (void)screenDidDisconnect:(NSNotification *)notification
  9. {
  10. NSLog(@"disconnect");
  11. if (self.externalWindow) {
  12. self.externalWindow.hidden = YES;
  13. self.externalScreen = nil;
  14. self.externalWindow = nil;
  15. }
  16. }

这样差不多就搞定了。基本上在iOS开发中主要是view的编辑,因为在新的屏幕中分辨率不一样,要进行特定的设置。

iOS学习笔记20-通过AirServer使用AirPlay镜像并实现多屏幕显示控制相关推荐

  1. iOS 开发 高级:通过AirServer使用AirPlay镜像并实现多屏幕显示控制

    AirPlay是iOS中一个很酷的功能,通过Wi-Fi连接支持AirPlay的设备,然后使用镜像功能就能在其他设备显示内容,播放声音.有很多大型的游戏都支持AirPlay,这样比如连接电视时,那么iP ...

  2. iOS学习笔记-自己动手写RESideMenu

    代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...

  3. OpenCV for Ios 学习笔记(4)-标记检测1

    本文原始地址:OpenCV for Ios 学习笔记(4)-标记检测1 简单的标记经常是以白色块和黑色块构成的规则图形.因为我们预先知道这些因素,所以我们可以很容易检测标记. 如图: 首先,我们需要找 ...

  4. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...

  7. iOS学习笔记-地图MapKit入门

    代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...

  8. iOS学习笔记-自定义过渡动画

    代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...

  9. IOS学习笔记07---C语言函数-scanf函数

    2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072            ...

最新文章

  1. java绑定变量怎么加_在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量
  2. STL中 map 和 multimap
  3. php可以支持代码重用技术的命令,Linux下的编程 PHP高级技巧全放送(一)
  4. glxinfo: not found
  5. springcloud使用zipkin实现链路追踪与监控
  6. mysql批量添加报错_技术分享 | MySQL 在批量插入时捕捉错误信息
  7. 《计算机系统:系统架构与操作系统的高度集成》——1.6 操作系统的演化
  8. 凌波多媒体教室软件_看胖瘦终端,如何让教室变得更“智慧”
  9. 蓝桥杯 c语言入门试题,蓝桥杯c语言试题2015
  10. 使用selenium下载百度图片
  11. 超级实用网址合集(必须收藏一波)
  12. hotnets2018 Networking in Heaven as on Earth 阅读报告
  13. linux设备驱动--字符设备模型
  14. 微信小程序通过服务号推送模板消息
  15. 【Git】fatal Not a git repository or any of the parent direc
  16. 数据库编程入门培训(一)
  17. 数据分析常用五大软件介绍
  18. 计算机英语大专期末考试,电子科技大学《大学英语2(专科)》20春期末考试【标准答案】...
  19. (课程类 Course)
  20. STM8使用SPI通信需要注意的几个问题

热门文章

  1. win10 配置 IIS PHP MySQL 环境
  2. Java NIO Selector详解(含多人聊天室实例)
  3. Android阵营苹果,安卓党转苹果阵营:第一次使用iPhone要注意哪些问题
  4. ubuntu 永久打开USB串口权限、232串口权限
  5. 简单的(第一人称射击)FPS游戏
  6. 拆解天猫精灵AI联盟之得邦照明
  7. 易语言和python交互[易语言源码|贝贝吧_易语言通过读取文件获取WIFI信息的代码...
  8. 网络直播采用的技术(一)
  9. 如何将XLSM文件转换成XLSX格式
  10. 计算机网络技术店面取名,电脑店铺起名