直接贴.m文件代码

#import "UIImageView+Scale.h"

static CGRect oldframe;

@implementation UIImageView (Scale)

//放大

-(void)showImageView:(UIImageView *)targetImgView {

UIImage *image = targetImgView.image;

UIWindow *window = [UIApplication sharedApplication].keyWindow;

UIView *bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];

oldframe =[targetImgView convertRect:targetImgView.bounds toView:window];

bgView.backgroundColor = [UIColor lightGrayColor];

bgView.alpha = 0;

UIImageView *imageView = [[UIImageView alloc ] initWithFrame:oldframe];

imageView.image = image;

imageView.tag = 1001;

[bgView addSubview:imageView];

[window addSubview:bgView];

bgView.userInteractionEnabled = YES;

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideImage:)];

[bgView addGestureRecognizer:tap];

//如果图片还没有加载出来会卡在这里

if (image) {

[UIView animateWithDuration:0.3 animations:^{

imageView.frame = CGRectMake(0,  (SCREEN_HEIGHT - image.size.height * SCREEN_WIDTH / image.size.width)/2, SCREEN_WIDTH, image.size.height * SCREEN_WIDTH/image.size.width);

bgView.alpha = 1;

}];

}

UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(bgView.right - 80, imageView.bottom + 10, 80, 30)];

[btn setTitle:@"保存" forState:0];

[bgView addSubview:btn];

[btn addTarget:self action:@selector(saveImage:) forControlEvents:UIControlEventTouchUpInside];

}

//缩小隐藏

- (void)hideImage:(UITapGestureRecognizer *)tap {

UIView *backgroundView=tap.view;

UIImageView *imageView=(UIImageView*)[tap.view viewWithTag:1001];

[UIView animateWithDuration:0.5 animations:^{

imageView.frame = oldframe;

backgroundView.alpha=0;

} completion:^(BOOL finished) {

[backgroundView removeAllSubviews];

[backgroundView removeFromSuperview];

}];

}

//保存

- (void)saveImage:(UIButton *)sender {

UIImageView *imageView = (UIImageView *)[sender.superview viewWithTag:1001];

UIImage *image = imageView.image;

UIImageWriteToSavedPhotosAlbum(image,self,@selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:),nil);

}

//保存回调

- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {

NSString *message;

if (!error) {

message = @"成功保存到相册~";

}else {

message = [error description];

}

NSLog(@"message is %@",message);

[MBProgressHUD showHUD:message];

}

@end

ios 点击放大图片,保存至手机相册的更多相关文章

  1. 微信小程序base64图片保存到手机相册

    问题:base64图片不能直接用wx.saveImageToPhotosAlbum保存到手机相册 解决: 先用fs.writeFile写入本地文件,再wx.saveImageToPhotosAlbum ...

  2. jquery插件jquery.LightBox.js之点击放大图片并左右点击切换图片(仿相册插件)

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的点击放大图片并左右点击切换图片的效果,您可以根据自己的实 ...

  3. React Native之图片保存到本地相册(ios android)

    React Native之图片保存到本地相册(ios android) 一,需求分析 1,react native保存网络图片到相册,iOS端可以用RN自带的CameraRoll完美解决,但是andr ...

  4. IOS下拉放大图片

    代码地址如下:http://www.demodashi.com/demo/11623.html 一.实现效果图 现在越来越多的APP中存在下拉放大图片的效果,今天贡献一下我的实现这种方法的原理,和我遇 ...

  5. 小程序base64图片格式保存至手机相册

    // 保存图片至相册 saveImg() { //获取文件管理器对象 const fs = wx.getFileSystemManager() //文件保存路径 const Imgpath = wx. ...

  6. 小程序canvas生成海报保存至手机相册

    小程序canvas画图保存至手机相册 (1)可直接展示生成的海报 .因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报 (2 ...

  7. 微信小程序点击按钮将图片保存到手机

    SaveCard: function(e) { let that = this; console.log('保存'); var imgSrc = e.currentTarget.dataset.img ...

  8. js限制图片大小、点击放大图片、点击在新开页面显示

    缩放图片到合适大小        function ResizeImages() {            var myimg, oldwidth, oldheight;            var ...

  9. flutter 长按图片保存到手机

    main.dart import 'dart:io'; import 'package:flutter/material.dart'; import 'package:http/http.dart' ...

随机推荐

  1. [转载]expect spawn、linux expect 用法小记

    原文地址:expect spawn.linux expect 用法小记作者:悟世 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写 ...

  2. var, object, dynamic的区别以及dynamic的使用

    var, object, dynamic的区别以及dynamic的使用 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用 2013-06- ...

  3. 通过Shell脚本读取properties文件中的参数时遇到\r换行符的问题

    今天在编写微服务程序启动脚本的时候,遇到一个比较奇葩的问题,下面给出具体描述: 目标:通过读取maven插件打包时生成的pom.properties文件,获取里面的应用名称和应用版本号,然后拼接得到s ...

  4. Python第一天——入门Python(3)列表

    列表,也是一种序列类型. 如何定义列表? 用" [ ] "(中括号进行定义) 列表的索引操作 例如 # hobby_list=['basketball','football','p ...

  5. Linux下网卡BCM4313的安装

    我遇到的问题:打开网络管理->wifi 显示固件缺失 通过: 1 lspci | grep Wireless 显示: 1 08:00.0 Network controller: Broadcom ...

  6. Cocos2d-x 3.x事件分发机制总结

    在2.x中处理事件需要用到委托代理(delegate),相信学过2.x的触摸事件的同学,都知道创建和移除的流程十分繁琐.而在3.x中由于加入了C++11的特性,而对事件的分发机制通过事件分发器Even ...

  7. centos6.4、6.5、7.0环境下载及安装

    centos6.4.6.5.7.0下载地址: http://www.cnblogs.com/zhwl/p/3657958.html或 http://www.linuxdown.net/CentOS/2 ...

  8. 如何对Javascript代码进行二次压缩(混淆)

    如何对Javascript代码进行二次压缩(混淆) 对Javascript代码进行压缩(混淆),可以有效减少传输和加载时间.但是,不是所有的变量(方法)都能被混淆的,一般来说,只有非属性的变量(方法) ...

  9. 数据库开启gtid时,需要注意的问题

    1.slave不能执行任何sql,包括超级用户2.read_only=on,这个必须要开启,避免业务执行sql3.保证当前slave的事务id为1 当slave同步出现问题时,手动跳过,需要考虑的问题 ...

  10. oc内容5大区

    1.堆区(malloc):不需要手动管理内存,自动管理 2.栈区(stack):需要手动管理内存 3.静态区 4.常量区 5.方法区 load类方法:把类加载进内存的时候调用,只会调用一次 initi ...