方法一:View的大小不大于手機(jī)屏幕
#pragma mark - 方法一:View的大小不大于手機(jī)屏幕
- (UIImage *)GetmakeImageWithView:(UIView *)view andWithSize:(CGSize)size
{
// 下面方法,第一個(gè)參數(shù)表示區(qū)域大小。第二個(gè)參數(shù)表示是否是非透明的。如果需要顯示半透明效果,需要傳NO,否則傳YES。第三個(gè)參數(shù)就是屏幕密度了,關(guān)鍵就是第三個(gè)參數(shù) [UIScreen mainScreen].scale。
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
方法二:View的大小大于手機(jī)屏幕
#pragma mark - 方法二:View的大小大于手機(jī)屏幕
- (UIImage *) snapshotWithScrollView:(UIScrollView *)scrollView
{
UIImage * image = nil;
UIGraphicsBeginImageContext(scrollView.contentSize);
CGPoint savedContentOffset = scrollView.contentOffset;
CGRect savedFrame = scrollView.frame;
scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
UIGraphicsEndImageContext();
if (image != nil) {
return image;
}
return nil;
}
截取view中某個(gè)區(qū)域生成一張圖片
#pragma mark - 截取view中某個(gè)區(qū)域生成一張圖片
- (UIImage *)shotWithView:(UIView *)view scope:(CGRect)scope
{
CGImageRef imageRef = CGImageCreateWithImageInRect([self GetmakeImageWithView:view andWithSize:view.bounds.size].CGImage, scope);
UIGraphicsBeginImageContext(scope.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect rect = CGRectMake(0, 0, scope.size.width, scope.size.height);
CGContextTranslateCTM(context, 0, rect.size.height);//下移
CGContextScaleCTM(context, 1.0f, -1.0f);//上翻
CGContextDrawImage(context, rect, imageRef);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRelease(imageRef);
return image;
}