// // QMChatRoomShowImageController.m // IMSDK-OC // // Created by haochongfeng on 2017/5/17. // Copyright © 2017年 HCF. All rights reserved. // #import "QMChatRoomShowImageController.h" @interface QMChatRoomShowImageController () @end @implementation QMChatRoomShowImageController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; //bigImageView self.bigImageView = [[UIImageView alloc] init]; self.bigImageView.contentMode = UIViewContentModeScaleAspectFit; if ([self.picType isEqualToString:@"0"]) { NSString * filePath = [NSString stringWithFormat:@"%@/%@/%@",NSHomeDirectory(),@"Documents",self.picName]; self.bigImageView.image = [UIImage imageWithContentsOfFile:filePath]; [self myInit]; }else { [self.bigImageView sd_setImageWithURL:[NSURL URLWithString:self.picName] placeholderImage:self.image]; [self.bigImageView sd_setImageWithURL:[NSURL URLWithString:self.picName] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { [self myInit]; }]; } } -(void)myInit{ //sv UIScrollView *sv = [[UIScrollView alloc] initWithFrame:self.view.bounds]; sv.minimumZoomScale = 1.0; sv.maximumZoomScale = 2.5; sv.delegate = self; [sv addSubview:self.bigImageView]; [self.view addSubview:sv]; //计算缩放scrollcontentVSize CGFloat rateK = kSize.width/kSize.height; if (self.bigImageView.image == nil) { return; } CGFloat rate = self.bigImageView.image.size.width/self.bigImageView.image.size.height; if (rate>rateK) { sv.contentSize = CGSizeMake(kSize.width, kSize.width/rate); self.bigImageView.frame = CGRectMake(0, 0, sv.contentSize.width, sv.contentSize.height); self.bigImageView.center = sv.center; }else{ // sv.contentSize = CGSizeMake(kSize.width, kSize.width/rate); sv.contentSize = CGSizeMake(kSize.height*rate, kSize.height); self.bigImageView.frame = CGRectMake(0, 0, sv.contentSize.width, sv.contentSize.height); self.bigImageView.center = sv.center; } //手势单击 UITapGestureRecognizer * gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHandle:)]; UILongPressGestureRecognizer * pressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)]; [self.bigImageView addGestureRecognizer:pressGestureRecognizer]; self.bigImageView.userInteractionEnabled = YES; [sv addGestureRecognizer:gestureRecognizer]; //双击 UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHandle:)]; doubleTap.numberOfTapsRequired = 2; //单机必须在双击手势识别失败时,才能识别 [gestureRecognizer requireGestureRecognizerToFail:doubleTap]; [sv addGestureRecognizer:doubleTap]; } //长按保存图片 - (void)longPressAction:(UILongPressGestureRecognizer *)pressGestureRecognizer { if (pressGestureRecognizer.state == UIGestureRecognizerStateBegan) { UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"保存图片" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; [alertView show]; } } //保存图片代理方法 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 1) { if ([self.picType isEqualToString:@"0"]) { NSString * filePath = [NSString stringWithFormat:@"%@/%@/%@",NSHomeDirectory(),@"Documents",self.picName]; UIImage *image = [UIImage imageWithContentsOfFile:filePath]; UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); }else { NSURL * url = [NSURL URLWithString:self.picName]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSOperationQueue * queue = [[NSOperationQueue alloc] init]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { UIImageWriteToSavedPhotosAlbum([UIImage imageWithData:data], self, @selector(image:didFinishSavingWithError:contextInfo:), nil); }]; } } } - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { if (!error) { ShowMsg(@"已保存到系统相册"); }else{ NSLog(@"image = %@, error = %@, contextInfo = %@", image, error, contextInfo); } } - (void)tapHandle:(UITapGestureRecognizer *)tap{ if (tap.numberOfTapsRequired == 1) { [self dismissViewControllerAnimated:true completion:nil]; } else if (tap.numberOfTapsRequired == 2) { UIScrollView *sv = (UIScrollView *)tap.view; if (sv.zoomScale != 1.0) { [sv setZoomScale:1.0 animated:YES]; } else { CGPoint touchPoint = [tap locationInView:self.bigImageView]; CGFloat newZoomScale = sv.maximumZoomScale; CGFloat xsize = self.view.frame.size.width / newZoomScale; CGFloat ysize = self.view.frame.size.height / newZoomScale; [sv zoomToRect:CGRectMake(touchPoint.x - xsize/2, touchPoint.y - ysize/2, xsize, ysize) animated:YES]; } } } #pragma mark - sv代理 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.bigImageView; } - (void)scrollViewDidZoom:(UIScrollView *)scrollView { CGFloat offsetX = (scrollView.frame.size.width > scrollView.contentSize.width) ? ((scrollView.frame.size.width - scrollView.contentSize.width) * 0.5) : 0.0; CGFloat offsetY = (scrollView.frame.size.height > scrollView.contentSize.height) ? ((scrollView.frame.size.height - scrollView.contentSize.height) * 0.5) : 0.0; self.bigImageView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX, scrollView.contentSize.height * 0.5 + offsetY); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end