I'm using this Swift code to take a screenshot of my app:
UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
How would I go about taking a screenshot of only part of the screen, and not all of it, as I do here?
For example if you want to take the screen shot of the UIView
rectangle at position (50,50)
with height of (100,150)
.
First set the Image Context to the size of the rectangle. This sets the image size.
UIGraphicsBeginImageContextWithOptions(CGSizeMake(100,150), false, 0);
Now draw the view in this context in such a way that, the visible part of the screenshot starts at (50,50)
self.view.drawViewHierarchyInRect(CGRectMake(-50,-50,view.bounds.size.width,view.bounds.size.height) afterScreenUpdates: true)
This clips the screen shot at (100,150)
because we set the size of our context
. Now take the UIImage from this.
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
To snapshot a view containing a UIVisualEffect (Blur/Vibrancy), see my solution here: https://stackoverflow.com/a/33633386/802196
I think this is the best Answer to take a shot of part of the screen:
func screenShot() {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.frame.size.width*0.99,self.frame.size.height*0.70), false, 0)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
self.view?.drawViewHierarchyInRect(CGRectMake(-01, -01, self.frame.size.width, self.frame.size.height), afterScreenUpdates: true)
var screenShot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}