123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- //
- // QMChatRoomShowImageController.m
- // IMSDK-OC
- //
- // Created by haochongfeng on 2017/5/17.
- // Copyright © 2017年 HCF. All rights reserved.
- //
- #import "QMChatRoomShowImageController.h"
- @interface QMChatRoomShowImageController () <UIAlertViewDelegate,UINavigationControllerDelegate,UIScrollViewDelegate>
- @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:false 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
|