在APP开发中有时需要进行手写签名,签名之后保存图片,提交电子签单,此时需要我们对UIscrollview 的view层进行view转图片的操作,话不多说 看源码
这是一个调起相册或者相机的方法 代理的准守 这些不讲了
- (void)loadImageFinished:(UIImage *)image
{
NSMutableArray *imageIds = [NSMutableArray array];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
//写入图片到相册
PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
//记录本地标识,等待完成后取到相册中的图片对象
[imageIds addObject:req.placeholderForCreatedAsset.localIdentifier];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
NSLog(@"success = %d, error = %@", success, error);
if (success)
{
//成功后取相册中的图片对象
__block PHAsset *imageAsset = nil;
PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:imageIds options:nil];
[result enumerateObjectsUsingBlock:^(PHAsset * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
imageAsset = obj;
*stop = YES;
//回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
[HTDZJ_ShareTools showErrorMessage:@"保存成功" inView:self.view afterDelayTime:1.5];
});
// [HTDZJ_ShareTools showSuccessMessage:@"保存成功" inView:self.view afterDelayTime:1.5];
}];
if (imageAsset)
{
//加载图片数据
[[PHImageManager defaultManager] requestImageDataForAsset:imageAsset options:nil
resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
}];
}
}
}];
}
下面是这两个方法 就是处理uiscrollerview 或者viewd的方法
- (UIImage *)screenshotForView:(UIView *)view {
UIImage *image = nil;
//判断View类型(一般不是滚动视图或者其子类的话内容不会超过一屏,当然如果超过了也可以通过修改frame来实现绘制)
if ([view.class isSubclassOfClass:[UIScrollView class]]) {
UIScrollView *scrView = (UIScrollView *)view;
CGPoint tempContentOffset = scrView.contentOffset;
CGRect tempFrame = scrView.frame;
scrView.contentOffset = CGPointZero;
scrView.frame = CGRectMake(-6, 5, scrView.contentSize.width+3, scrView.contentSize.height-120);
image = [self screenshotForView:scrView size:scrView.frame.size];
scrView.contentOffset = tempContentOffset;
scrView.frame = tempFrame;
} else {
CGRect frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height-65);
//CGSize size = CGSizeMake(view.frame.size.width, view.frame.size.height-150);
//view.frame = frame;
image = [self screenshotForView:view size:frame.size];
}
return image;
}
- (UIImage *)screenshotForView:(UIView *)view size:(CGSize)size {
UIImage *image = nil;
UIGraphicsBeginImageContextWithOptions(size, YES, [UIScreen mainScreen].scale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
如果有什么问题 可以留下评论