PhotoView 实现与图片进行简单的交互
本文的category是根据VIPhotoView来做参考,在此基础上添加个加载网络图片。
此category主要功能是与图片进行交互,双击放大图片,捏合等操作。
感谢vitoziv !
VIPhotoView的github地址:https://github.com/vitoziv/VIPhotoView
本文的category添加了个方法,加载网络图片
/** 显示的图片,提供给外界调用,用于保存图片 */
@property (strong, nonatomic) UIImageView *imageView; /** 加载网络图片 */
+ (instancetype)photoViewWithFrame:(CGRect)frame atImageUrlString:(NSString *)urlString;
- (instancetype)initWithFrame:(CGRect) frame atImageUrlString:(NSString *)urlString; /** 加载本地图片 */
+ (instancetype)photoViewWithFrame:(CGRect)frame atImageName:(NSString *)imageName;
- (instancetype)initWithFrame:(CGRect)frame atImageName:(NSString *)imageName;
内部实现图片缓存,默认缓存到NSCachesDirectory
- (void)setupImageOfURLString:(NSString *)urlString { /** 取得沙盒路径 */
NSString *cachesDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; /** 取得图片名 */
NSString *imageName = [[urlString lastPathComponent] stringByDeletingPathExtension]; /** 取得图片扩展名 */
NSString *imageExtension = [urlString pathExtension]; /** 先从沙盒中取出图片 */
UIImage *image = [UIImage loadImage:imageName ofType:imageExtension inDirectory:cachesDirectory]; /** 当图片不存在 */
if (!image) { NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; image = [UIImage imageWithData:data]; /** 下载图片后存储到沙盒中 */
[image saveImage:image atFileName:imageName atImageType:imageExtension atDirectory:cachesDirectory];
} self.imageView.image = image; }
使用PhotoView
- (void)viewDidLoad {
[super viewDidLoad]; NSString *urlString = @"http://ww4.sinaimg.cn/large/7a8aed7bgw1ev1yplngebj20hs0qogq0.jpg"; /** 加载网络图片 */
XQPhotoView *photoView = [XQPhotoView photoViewWithFrame:self.view.bounds atImageUrlString:urlString]; /** 加载本地图片 */
// XQPhotoView *photoView = [XQPhotoView photoViewWithFrame:self.view.bounds atImageName:@"7a8aed7bgw1euqcfwjbkdj20hs0qo40w.jpg"]; [self.view addSubview:photoView];
}
本文的缓存考虑的不足,但是用SDWebImage来做缓存的话,对其具有依赖性,所以就没有使用SDWebImage
如果有更好的缓存方法,请与我联系,指导我一下,谢谢~
demo链接:https://github.com/XQBoy/PhotoView
demo演示:
PhotoView 实现与图片进行简单的交互的更多相关文章
- java--文件过滤器和简单系统交互
一.文件过滤器 /** * @Title: getFileByFilter * @Description: 根据正则rege获取给定路径及其子路径下的文件名(注意递归的深度不要太大) * @param ...
- ajax简单后台交互
ajax简单后台交互 1,扯淡 单身的生活,大部分时间享受自由,小部分时间忍受寂寞. 生活有时候,其实蛮苦涩,让人难以下咽.那些用岁月积累起来的苦闷,无处宣泄,在自己的脑海里蔓延成一片片荆棘,让你每每 ...
- thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
这篇文章主要介绍了thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法,结合简单示例形式分析了thinkPHP5框架验证码相关配置.后台验证.前台刷新等操作技巧,学习thinkphp源码的朋 ...
- Markdown 图片的简单处理
0. 前言 最近写 md 文章的时候发现,在 markdown 里插入一些很长的图片的时候,会显得很不好看,于是去查了一下如何实现 markdown 里图片的并排显示,参考了各个博客内的内容和 mar ...
- LZ77压缩算法编码原理详解(结合图片和简单代码)
前言 LZ77算法是无损压缩算法,由以色列人Abraham Lempel发表于1977年.LZ77是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77.鉴于其在数据压缩领域的地位,本文将结合图 ...
- mfc显示静态图片最简单的方法
一致都是研究如何调用opencv显示动态图片,但是很多时候在显示图标的时候,都是需要显示静态图片,现在将最简单的方法总结下: 1.添加picture控件 2.添加资源,要求为bmp 3.修改属性 结果 ...
- php笔记之GD库图片创建/简单验证码
燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...
- img设置默认图片最简单的解决方法
<img src='图片的路径' onerror='this.src="如果图片不存在,则使用该图片"' 这个解决方法除了简单外,还有一个优点. 就是当你不知道图片是否存在, ...
- BMP、GIF、JPEG、PNG以及其它图片格式简单介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/songjinshi/article/details/37516649 BMP格式 BMP是英文Bit ...
随机推荐
- 图论介绍(Graph Theory)
1 图论概述 1.1 发展历史 第一阶段: 1736:欧拉发表首篇关于图论的文章,研究了哥尼斯堡七桥问题,被称为图论之父 1750:提出了拓扑学的第一个定理,多面体欧拉公式:V-E+F=2 第二阶段( ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:制作一个大按钮
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- java SHA1加密算法
package com.cn.test.rsa; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExc ...
- tensorflow之逻辑回归模型实现
前面一篇介绍了用tensorflow实现线性回归模型预测sklearn内置的波士顿房价,现在这一篇就记一下用逻辑回归分类sklearn提供的乳腺癌数据集,该数据集有569个样本,每个样本有30维,为二 ...
- 如何配置nginx
Nginx安装手册 1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. n gcc 安装nginx需要先将官网下载的源码进行编译,编译 ...
- jquery获取select选中的文本值
误区: 一直以为jquery获取select中option被选中的文本值,是这样写的: $("#id").text(); //获取所有option的文本值 实际上应该这样: ...
- C# 篇基础知识5——委托和事件
事件处理程序是基于“委托”机制运行的. 1.委托 (1)委托的定义和使用 有时需要将一个函数作为另一个函数的参数,这时就要用到委托(Delegate)机制.例如设计一个马戏表演函数: //定义委托 d ...
- 装系统:Win7,机子是Dell 5460,有半高的mSATA SSD
问题描述:Dell Vostro 5460有一个机械盘,有一个半高的mSATA SSD,现在想将系统重装到mSATA SSD上,但是机子BIOS的Boot选项没有mSATA,只有机械盘,怎么办? 解决 ...
- java多线程知识回顾(笔记)
线程创建的方式 有两种 第一种是继承Thread类 重写run方法 (个人偏向这一种实际中这种用的较多) 例如 public class MyThead extends Thread { int j= ...
- SciPy 线性代数
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...