先直接上图,要实现分享一张图片,如下图
分享出去的图片中不应带有下面4个按钮,所以需要截图截在分割线处将图片转换为NSData二进制.
考虑到屏幕适配问题,所以将截图部分用scrollview来承载,截图通过截取scrollview视图即可。
#pragma mark-- 按视图承载所有内容截屏
- (void)snapshotScreenInView:(UIView *)view
{
CGSizesize = view.bounds.size;
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
CGRectrect = view.frame;
// 自iOS7开始,UIView类提供了一个方法-drawViewHierarchyInRect:afterScreenUpdates: 它允许你截取一个UIView或者其子类中的内容,并且以位图的形式(bitmap)保存到UIImage中
[viewdrawViewHierarchyInRect:rect afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
拓展:下面的方法截图后的图片会使毛玻璃效果失效,所以用以上方法即可
// if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){
// UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);
// } else {
// UIGraphicsBeginImageContext(view.bounds.size);
// }
// [view.layer renderInContext:UIGraphicsGetCurrentContext()];
//
// UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
//
// UIGraphicsEndImageContext();
//
// UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
实现保存图片
//参数1:图片对象
//参数2:成功方法绑定的target
//参数3:成功后调用方法
//参数4:需要传递信息(成功后调用方法的参数)
UIImageWriteToSavedPhotosAlbum(image,self,@selector(image:didFinishSavingWithError:contextInfo:),nil);
实现方法:
- (void)image:(UIImage*)imagedidFinishSavingWithError:(NSError*)errorcontextInfo:(void*)contextInfo{
if(error) {
[YJProgressHUDshowMessage:@"保存失败"inView:self.view];
}else{
[YJProgressHUDshowMessage:@"保存成功"inView:self.view];
}
}