在第二个显示屏上显示iOS屏幕

时间:2014-02-03 14:12:06

标签: ios external-display

我想使用airplay或HDMI适配器在大屏幕上演示我的iOS应用程序。

问题是我的应用程序仅以纵向模式运行,大多数电视的宽高比为16:9,因此iPhone屏幕非常小。为了解决这个问题,我想旋转电视并旋转iPhone的输出以获得更大的显示效果。

在iOS6中,我使用了CADisplayLink并拍摄了当前屏幕的快照,然后将其绘制在外部屏幕上。不幸的是,旧代码在iOS 7上不再起作用,并且有点迟钝。有一个很好的框架吗?

如果您没有任何框架建议,您可以帮我提高效率吗?

我的代码目前看起来像这样:

- (UIImage *) screenshot {
    UIView* view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);

    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];


    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

- (void)drawFrame
{
    UIImageView* contentView = (UIImageView *)[self.secondWindow.rootViewController.view viewWithTag:[@"contentView" hash]];
    CGImageRef screenImg = [self screenshot].CGImage;//UIGetScreenImage();

    contentView.image = [UIImage imageWithCGImage:screenImg scale:1.0 orientation:UIImageOrientationLeft];
}

1 个答案:

答案 0 :(得分:0)

我改变了这样的屏幕截图功能,让它在iPhone 5s上运行得足够快:

- (UIImage *) screenshot {
    UIView* view = [[[[UIApplication sharedApplication] delegate] window] rootViewController].view;
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 2);
    CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationNone);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

在我改变第一行之前,我的iPhone屏幕上也有一些屏幕闪烁。并且还改变了InterpolationQuality。

如果您在较旧的iPhone上运行代码,您还可以尝试将ImageContext的比例(UIGraphicsBeginImageContextWithOptions函数的最后一个参数)设置为1。这将禁用第二个屏幕上的“视网膜”分辨率,使渲染速度更快!