項目開發(fā)中的一個需求 ,需要將不在屏幕中的內容也要截圖保存到本地相冊 ,于是我的思路是:將下面的大的scrollView轉化為image,再將image保存相冊即可。以下是我的代碼:
pragma mark 把scrollView轉換成image
- (UIImage *)captureScrollView:(UIScrollView *)scrollView{
UIImage* image = nil;
// 第一個參數(shù)表示區(qū)域大小。第二個參數(shù)表示是否是非透明的,一般傳no。第三個參數(shù)就是屏幕密度了,關鍵就是第三個參數(shù)
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, NO, [UIScreen mainScreen].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()];
image = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
if (image != nil) {
return image;
}
return nil;
}
pragma mark 點擊保存圖片按鈕的實現(xiàn)方法
- (void)saveImageButtonAction:(id)sender{
NSLog(@"點擊了保存圖片");
UIImage *image = [self captureScrollView:self.bigView];
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
pragma mark 成功保存圖片到相冊中, 必須調用此方法, 否則會報參數(shù)越界錯誤
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
NSLog(@"error == %@",error);
if (!error) {
[SVProgressHUD showSuccessWithStatus:@"保存成功"];
} else {
[SVProgressHUD showErrorWithStatus:@"保存失敗"];
}
}
最后說一下我在這里遇到的一個坑:大家在設置scrollView的ContentSize時 如果設置寬為0的話,會一直生成image失敗,導致保存不成功。寬度改成屏幕的寬度即可。