ios 点击放大图片,保存至手机相册
直接贴.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 点击放大图片,保存至手机相册的更多相关文章
- 微信小程序base64图片保存到手机相册
问题:base64图片不能直接用wx.saveImageToPhotosAlbum保存到手机相册 解决: 先用fs.writeFile写入本地文件,再wx.saveImageToPhotosAlbum ...
- jquery插件jquery.LightBox.js之点击放大图片并左右点击切换图片(仿相册插件)
该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的点击放大图片并左右点击切换图片的效果,您可以根据自己的实 ...
- React Native之图片保存到本地相册(ios android)
React Native之图片保存到本地相册(ios android) 一,需求分析 1,react native保存网络图片到相册,iOS端可以用RN自带的CameraRoll完美解决,但是andr ...
- IOS下拉放大图片
代码地址如下:http://www.demodashi.com/demo/11623.html 一.实现效果图 现在越来越多的APP中存在下拉放大图片的效果,今天贡献一下我的实现这种方法的原理,和我遇 ...
- 小程序base64图片格式保存至手机相册
// 保存图片至相册 saveImg() { //获取文件管理器对象 const fs = wx.getFileSystemManager() //文件保存路径 const Imgpath = wx. ...
- 小程序canvas生成海报保存至手机相册
小程序canvas画图保存至手机相册 (1)可直接展示生成的海报 .因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报 (2 ...
- 微信小程序点击按钮将图片保存到手机
SaveCard: function(e) { let that = this; console.log('保存'); var imgSrc = e.currentTarget.dataset.img ...
- js限制图片大小、点击放大图片、点击在新开页面显示
缩放图片到合适大小 function ResizeImages() { var myimg, oldwidth, oldheight; var ...
- flutter 长按图片保存到手机
main.dart import 'dart:io'; import 'package:flutter/material.dart'; import 'package:http/http.dart' ...
随机推荐
- 对用户控件(ascx)属性(property)赋值
对用户控件(ascx)属性(property)赋值 Insus.NET写此博文,是对用户控件(ASCX)的属性赋值经验与技巧分享.是这样子的,在做新闻站点时,一般都会有分很多类别. 在站点首页会显示最 ...
- 黑马程序员:Java基础总结----枚举
黑马程序员:Java基础总结 枚举 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...
- linux apt-get 源配置
linux中apt-get不能使用可能因为源不对,需要修改/etc/apt下的sources.list文件 apt-get源网上有很多,但是试了很多都不能用,以下提供一个我自己这边使用成功的源: de ...
- 你可能把A/B测试做错了
大卫奥格威说过,"永远不要停止试验,你的广告也就永远不会停止改进". 在当今的网络世界中,类似于吆喝科技 AppAdhoc A/B Testing 这样的工具越来越多,AB测试和转 ...
- 关于props和state以及redux中的state
React的数据模型分为共有数据和私有数据,共有数据可以在组件间进行传递,私有数据为当前组件私有.共有数据在React中使用props对象来调用,它包含标签所有的属性名称和属性值,props对象有三个 ...
- JS高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法
一.位置方法 ECMAScript5为数组实例添加了两个位置:indexOf()和 lastIndexOf().这两个方法接收两个参数:要查找的项和(可选的)表示查找起点位置的索引(如在数组[7,8, ...
- Hibernate介绍和入门案例
一身转战三千里,一剑曾当百万师 如果你在之前没有学过SSH三大框架,那么你之前肯定是通过JDBC来对数据库进行操作.现在,你完全可以把跟数据库交互的操作直接交给Hibernate. Hibernate ...
- static const readonly
C#中的static 和Java中的static 简单,两者用法完全是一致的.从两方面讨论: 1. 变量是属于类的,不是实例级别的.只能通过类名调用,不能通过实例调用. 2. 如果在定义时就赋值了,那 ...
- windows下配置Java环境变量
一.首先, JDK的安装路径,在这里我们选择默认安装在C:\Program Files\Java\jdk1.7.0_45\目录下. 二.下面, 设置环境变量: [1]“我的电脑”右键菜单---> ...
- 将mysql的data目录移走方法
如移动到"/home/mysql/data",我的mysql是装在/usr/local/mysql下的 1. 将/usr/local/mysql/data移动到/home/mysq ...