iphone / ipad应用程序 - 拍摄屏幕截图

时间:2010-05-14 02:50:09

标签: iphone ipad screenshot orientation

我成功实现了一个适用于ipad和iphone的应用程序。 在那里我提供了选项,用户将应用程序的屏幕截图作为邮件附件发送。即使这样运作良好。 但是我的代码正在拍摄屏幕,而不管方向如何。我得到的图像始终处于纵向模式。 我想根据ipad / iphone的方向拍摄屏幕截图并将图像作为附件发送。我正在使用以下代码拍摄屏幕截图。

UIGraphicsBeginImageContext(screenWindow.frame.size);
[screenWindow.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

2 个答案:

答案 0 :(得分:2)

有一个类别由Hardy Macia实施:

http://www.catamount.com/forums/viewtopic.php?f=21&t=967

它在UIImage上有很多类别。 您想要使用的是:

UIimage* newImage = [imageToBeRotated imageRotatedByDegrees:90.0];

您的角度取决于设备的当前方向。 使用:

[[UIApplication sharedApplication] statusBarOrientation]

获取设备的方向。

希望这有帮助。

答案 1 :(得分:0)

除了已经旋转的实际窗口外,您可以渲染一个顶级视图。如果您正在显示状态栏,请尝试获取该视图的超级视图。否则这样的事情可能有用:

CGRect frame = screenWindow.frame;

if ( isLandscape ) {
  CGFloat t = frame.size.width;
  frame.size.width = frame.size.height;
  frame.size.height = t;
}

UIGraphicsBeginImageContext(frame.size);

if ( isLandscape ) {
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextRotateCTM( context , M_PI_2 );
  CGContextTranslateCTM( context , ( frame.size.width - frame.size.height ) * 0.5 ,
    ( frame.size.height - frame.size.width ) * 0.5 );
}

...

您可能不得不使用CGContextTranslateCTM,但它应该接近它。