因项目的需要,需要截取整个ScrollerView视图,开始搜索找到如下的相关解决方式:
转载自:http://www.cnblogs.com/willbin/p/3745067.html
- (UIImage *)captureScrollView{
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;
}
经过测试使用,貌似解决了,但是,在iOS9之前的系统,直接崩溃了,。。。。。。。。伤,,,,
错误指向:
Assertion failed: (CGFloatIsValid(x) && CGFloatIsValid(y)),
function void CGPathMoveToPoint(CGMutablePathRef, const CGAffineTransform *, CGFloat, CGFloat),
file Paths/CGPath.cc, line 254.
错误示例代码:
UIImage* image = nil;
CGSize imageSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height);
UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; // <- ERROR image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
解决代码:
#pragma mark - 截取屏幕的图片
- (UIImage *)captureScrollView:(UIScrollView *)scrollView{
UIImage* image = nil;
CGSize sizes=scrollView.contentSize;
sizes.width=sizes.width;
sizes.height=sizes.height-20;
UIGraphicsBeginImageContextWithOptions(sizes, NO, 0);
{
CGPoint savedContentOffset = scrollView.contentOffset;
CGRect savedFrame = scrollView.frame;
scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView drawViewHierarchyInRect:scrollView.bounds afterScreenUpdates:YES];
image = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
if (image != nil) {
return image;
}
return nil;
}