1、屏幕截图
//截取当前屏幕大小的图片
- (UIImage *)snapshot
{
UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, [[UIScreen mainScreen] scale]);;
if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:NO];
} else {
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
}
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
2、scrollView、tableView的截图
- (UIImage *)getImageWithTableView {
UIImage* newImage = nil;
UITableView *scrollView = (UITableView *)self;
CGFloat scale = [UIScreen mainScreen].scale;
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, scrollView.opaque, scale);
{
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()];
newImage = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
return newImage;
}
类似于上面的截图,会有一定的问题,如果你用self.tableView.rowHeight = UITableViewAutomaticDimension;来预估算tableView的cell高度的话,tableView的截图就会出现误差,会多一块黑色的,因为预估高度会比真实高度高一点儿,画布的高度是预估的高度,但是渲染出来的图片确是真实的高度,而我们需要的是渲染出来的图片,则需要进行裁剪,则可以使用下面的方法
3、scrollView、tableView的截图裁剪为需要的图片
- (UIImage *)getImageWithTableView {
UIImage* newImage = nil;
UITableView *scrollView = (UITableView *)self;
CGFloat scale = [UIScreen mainScreen].scale;
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, scrollView.opaque, scale);
{
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()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
//将UIImage转换成CGImageRef
CGImageRef sourceImageRef = [viewImage CGImage];
//按照给定的矩形区域进行剪裁
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, CGRectMake(0, 0, scrollView.contentSize.width * scale, scrollView.contentSize.height * scale));
//将CGImageRef转换成UIImage
UIImage* scaledImage = [UIImage imageWithCGImage:newImageRef];
//等比缩放
CGSize size = CGSizeMake(scaledImage.size.width / scale, scaledImage.size.height / scale);
UIGraphicsBeginImageContext(size); //size 为CGSize类型,即你所需要的图片尺寸
[scaledImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
newImage = UIGraphicsGetImageFromCurrentImageContext();
}
UIGraphicsEndImageContext();
return newImage;
}
网友评论