Reputation: 9700
I’m trying to take a screenshot of my iPad application, and create a UIImage
, which I can then blur, and do fun stuff with. I’m taking the screenshot with the following code, which is working perfectly:
- (UIImage *)convertViewToImage
{
UIGraphicsBeginImageContext(self.bounds.size);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
However, my app supports landscape orientation only, and the screenshot that comes out is rotated 90 degrees to the left (in portrait orientation). I’m calling this method on my UIWindow
, and I understand that UIWindow
uses a different coordinate system, but I can’t quite figure out how to rotate that UIImage
. I’ve read a couple of similar questions here and tried their solution (using initWithCGImage:scale:orientation
, and re-drawing the image), but since it’s a full-screen iPad image, if I rotate it, it seems to keep the actual portrait dimension, but stretch the rotated image into it.
In a nutshell, the method above is giving me what I need, but at 768x1024, rather than 1024x768. I need to rotate it 90 degrees to the left, exactly the same as rotate would work in Preview, Photoshop, etc.
Upvotes: 2
Views: 213
Reputation: 56635
You can call it on the root view controller's view instead. That has the same content as the window but with the orientation of the device.
Upvotes: 2