iOS

Snapshot of UIView

Getting the Snapshot

- (UIImage *)getSnapshot 
{      
UIScreen *screen = [UIScreen mainScreen];
CGRect bounds = [self.view bounds];
UIGraphicsBeginImageContextWithOptions(bounds.size, false, screen.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
[self.view drawViewHierarchyInRect:bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();  
return image;
}

Swift

var screenshot: UIImage
{
UIGraphicsBeginImageContext(self.bounds.size);
let context = UIGraphicsGetCurrentContext();
self.layer.render(in: context)
let screenShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return screenShot
}

Snapshot with subview with other markup and text

  • Support Portrait and Landscape both type of image

  • Drawing and other subviews can be merged in my case Iā€™m adding label to draw

    { CGSize fullSize = getImageForEdit.size; CGSize sizeInView = AVMakeRectWithAspectRatioInsideRect(imgViewFake.image.size, imgViewFake.bounds).size; CGFloat orgScale = orgScale = fullSize.width/sizeInView.width; CGSize newSize = CGSizeMake(orgScale * img.image.size.width, orgScale * img.image.size.height); if(newSize.width <= fullSize.width && newSize.height <= fullSize.height){ newSize = fullSize; } CGRect offsetRect; if (getImageForEdit.size.height > getImageForEdit.size.width){ CGFloat scale = newSize.height/fullSize.height; CGFloat offset = (newSize.width - fullSize.widthscale)/2; offsetRect = CGRectMake(offset, 0, newSize.width-offset2, newSize.height); } else{ CGFloat scale = newSize.width/fullSize.width; CGFloat offset = (newSize.height - fullSize.heightscale)/2; offsetRect = CGRectMake(0, offset, newSize.width, newSize.height-offset2); } UIGraphicsBeginImageContextWithOptions(newSize, NO, getImageForEdit.scale); [getImageForEdit drawAtPoint:offsetRect.origin]; // [img.image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; CGFloat oldScale = img.contentScaleFactor; img.contentScaleFactor = getImageForEdit.scale; [img drawViewHierarchyInRect:CGRectMake(0, 0, newSize.width, newSize.height) afterScreenUpdates:YES]; img.contentScaleFactor = oldScale; UIImage *combImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); imageData = UIImageJPEGRepresentation(combImage, 1); }


This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow