iOS 13 ScrollView截圖問題記錄

- (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測試后的時(shí)候發(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; // 設(shè)置截圖需要的偏移量和frame? ? ? ? scrollView.contentOffset = CGPointZero;

? ? ? ? scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);


// 創(chuàng)建臨時(shí)view,并且把要截圖的view添加到臨時(shí)view上面? ? ? ? UIView *tempView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)];

? ? ? ? [scrollView removeFromSuperview];

? ? ? ? [tempView addSubview:scrollView];


// 對臨時(shí)view進(jìn)行截圖? ? ? ? [tempView.layer renderInContext:UIGraphicsGetCurrentContext()];

? ? ? ? viewImage = UIGraphicsGetImageFromCurrentImageContext();


// 恢復(fù)截圖view原來的狀態(tài)? ? ? ? [scrollView removeFromSuperview];

? ? ? ? [self addSubview:scrollView];

? ? ? ? scrollView.contentOffset = savedContentOffset;

// 如果原來是frame布局,需要設(shè)置frame,如果是Auto layout需要再次進(jìn)行Auto layout布局。 // scrollView.frame = savedFrame;? ? ? ? [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {

? ? ? ? ? ? make.edges.equalTo(self);

? ? ? ? }];

? ? }

? ? UIGraphicsEndImageContext();

return viewImage;

}


? ? return viewImage;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容