- (UIImage*)captureScrollView:(UIScrollView*)scrollView{
之前有過scrollView 截取長圖的需求從網(wǎng)上搜索的是以下代碼?
? ? UIImage* image = nil;
? ? UIGraphicsBeginImageContext(scrollView.contentSize);
? ? {
? ? ? ? CGPoint savedContentOffset = scrollView.contentOffset;
? ? ? ? CGRect savedFrame = scrollView.frame;
? ? ? ? UIGraphicsBeginImageContextWithOptions(scrollView.frame.size,NO, [UIScreen mainScreen].scale);
? ? ? ? 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) {
? ? ? ? returnimage;
? ? }
}
但是最近iOS13測試后的時候發(fā)現(xiàn)長圖顯示不全,經(jīng)過查詢以下代碼可解決
- (UIImage*)captureScrollView:(UIScrollView*)scrollView{
UIImage* viewImage = nil;
? ? UITableView *scrollView = tableview;
? ? UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, NO, 0.0);
? ? {
// 保存原來的偏移量? ? ? ? CGPoint savedContentOffset = scrollView.contentOffset;
? ? ? ? // CGPoint savedFrame = scrollView.frame; // 設置截圖需要的偏移量和frame? ? ? ? scrollView.contentOffset = CGPointZero;
? ? ? ? scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
// 創(chuàng)建臨時view,并且把要截圖的view添加到臨時view上面? ? ? ? UIView *tempView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)];
? ? ? ? [scrollView removeFromSuperview];
? ? ? ? [tempView addSubview:scrollView];
// 對臨時view進行截圖? ? ? ? [tempView.layer renderInContext:UIGraphicsGetCurrentContext()];
? ? ? ? viewImage = UIGraphicsGetImageFromCurrentImageContext();
// 恢復截圖view原來的狀態(tài)? ? ? ? [scrollView removeFromSuperview];
? ? ? ? [self addSubview:scrollView];
? ? ? ? scrollView.contentOffset = savedContentOffset;
// 如果原來是frame布局,需要設置frame义图,如果是Auto layout需要再次進行Auto layout布局。 // scrollView.frame = savedFrame;? ? ? ? [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
? ? ? ? ? ? make.edges.equalTo(self);
? ? ? ? }];
? ? }
? ? UIGraphicsEndImageContext();
return viewImage;
}
? ? return viewImage;