当应用程序处于横向模式时拍摄屏幕截图

Posted

技术标签:

【中文标题】当应用程序处于横向模式时拍摄屏幕截图【英文标题】:Taking Screen Shot When App is in Landscape Mode 【发布时间】:2012-12-03 11:13:55 【问题描述】:

我正在开发一款只能在横向模式下使用的应用。在那个应用程序中,我有一个功能是截取该特定屏幕的屏幕截图。我已经实现了这段代码

UIGraphicsBeginImageContext(self.view.window.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();;
imageView.transform = CGAffineTransformMakeRotation(3.0 * M_PI / 2.0);
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(imageView.image, nil, nil, nil);

使用此代码,我可以在纵向模式下获得我的应用程序的屏幕截图。我想要横向模式。

【问题讨论】:

【参考方案1】:

不要添加window。如果你添加它,你的上下文大小是错误的。

// Just use self.view.bounds.size is OK
UIGraphicsBeginImageContext(self.view.bounds.size);

【讨论】:

【参考方案2】:

也许晚了,但将其包装在 UIImageView 中实际上并不会旋转图像本身。 这是我编写的一些代码,可以从应用程序的整个窗口创建旋转图像。

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

CGRect rect = [keyWindow bounds];
UIGraphicsBeginImageContext(rect.size);

CGContextRef context = UIGraphicsGetCurrentContext();
[keyWindow.layer renderInContext:context];

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

return [[UIImage alloc] initWithCGImage:[image CGImage] scale:1 orientation:UIImageOrientationLeft];

如果你想让它向右旋转,只需将 UIImageOrientationLeft 替换为 UIImageOrientationRight

【讨论】:

以上是关于当应用程序处于横向模式时拍摄屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

当屏幕处于横向模式时,UIAlertview 以纵向模式显示

应用程序第一次处于纵向模式,如果设备处于横向模式

iPad应用程序首先进入纵向模式,然后在解锁屏幕后进入横向模式,在锁定时处于横向模式

我只想要一个屏幕处于纵向模式,而所有其他屏幕都处于横向和纵向模式 ios 9 应用程序

横向模式下的 iPhone/iPod Touch 屏幕截图是不是在应用商店中以这种方式显示?

当设备处于横向时,Phonegap iOS 应用程序以纵向加载