我想使用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];
}
答案 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
。这将禁用第二个屏幕上的“视网膜”分辨率,使渲染速度更快!