Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Screenshot Only Part of Screen - Swift

Tags:

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?

like image 315
tdh Avatar asked Jan 16 '15 01:01

tdh


2 Answers

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();
like image 87
rakeshbs Avatar answered Oct 02 '22 03:10

rakeshbs


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()
}
like image 43
Raksha Saini Avatar answered Oct 02 '22 04:10

Raksha Saini