(iOS开发)iPad通过lighting转HDMI连接电视,电视屏幕不能满屏有黑边的解决方案

目前大部分电视都是16:9的显示屏,史诗级大屁股显示屏已经很少见了。iPad的屏幕是4:3的,当用iPad连接电视后,因为比例不一样,电视屏幕左右两侧会有黑边,看视频的话相当不爽。有人说用遥控器设置,公司电脑全部是海信,我找遍了菜单里所有的选项也没能去掉黑边满屏显示,所以只能从代码上下手了。

下面三个监听可以监控外接显示屏的连接情况
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(screenDidConnectNotification:) name: UIScreenDidConnectNotification object: nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(screenDidDisconnectNotification:) name: UIScreenDidDisconnectNotification object: nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(screenModeDidChangeNotification:) name: UIScreenModeDidChangeNotification object: nil];
可以用下面的方法找到外接屏
//[UIScreen screens] 返回一个数组,包含本机和外连的所有screen,数组中第一个对象肯定是 [UIScreen mainScreen]
UIScreen *external = [[UIScreen screens] objectAtIndex: 1];//external就是电视的screen
屏幕模式,也就是屏幕的大小和像素
UIScreenMode *preferedMode = external.preferredMode;//最合适电视的屏幕模式
UIScreenMode *maxScreenMode = nil;//电视支持的最大的屏幕模式
for(int i = 0; i < [[external availableModes] count]; i++) {
    UIScreenMode *current = [[[[UIScreen screens] objectAtIndex:1] availableModes] objectAtIndex: i];
    if (current.size.width > max.width) {
        max = current.size;
        maxScreenMode = current;
      }
 }
external.currentMode = maxScreenMode;
//我测试的preferedMode和maxScreenMode一直是相同的,为保险还是用的maxScreenMode
屏幕的过扫描补偿(UIScreenOverscanCompensation)
typedef NS_ENUM(NSInteger, UIScreenOverscanCompensation) {
    UIScreenOverscanCompensationScale,                           // the final composited framebuffer for the screen is scaled to avoid clipping
    UIScreenOverscanCompensationInsetBounds,                     // the screen's bounds will be inset in the framebuffer to avoid clipping. no scaling will occur
    UIScreenOverscanCompensationNone NS_ENUM_AVAILABLE_IOS(9_0), // no scaling will occur. use overscanCompensationInsets to determine the necessary insets to avoid clipping
    UIScreenOverscanCompensationInsetApplicationFrame NS_ENUM_DEPRECATED_IOS(5_0, 9_0, "Use UIScreenOverscanCompensationNone") = 2,
};
//只有电视屏幕是过扫描时才有效果
external.overscanCompensation = UIScreenOverscanCompensationScale;
把iPad屏幕上的内容处理成全屏并传输到电视
大体思路就是实时截屏给external显示,上次写到这就给忘了,过了很久了就不往下写了,有需要的小伙伴可以联系我。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,223评论 4 61
  • 做最优秀的自己 组织管理的核心是价值创造、价值评价和价值分配,企业通过绩效考核、年度考核等方式对人员综合素质进行价...
    530吉祥如意阅读 324评论 0 1
  • 1 其实我知道你是有点害怕我,尽管你从来不明说,可是从你小心翼翼的态度和言辞,我知道,你有点怕我。 妈妈请原谅我,...
    龙妮妮阅读 633评论 10 18
  • 之前看到一个问题:“大学室友对你的成绩有什么影响?” 而实际上我觉得这个问题的本质不在于大学室友,更重要的是:你选...
    范先生说阅读 1,803评论 4 11