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];

    /** 先从沙盒中取出图片 */
   __block UIImage *image = [UIImage loadImage:imageName ofType:imageExtension inDirectory:cachesDirectory];

    /** 当图片不存在 */
    if (!image) {

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            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演示:

时间: 2024-10-11 10:10:23

PhotoView 实现与图片进行简单的交互的相关文章

js+html+css实现简单页面交互功能(2015知乎前端笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2

js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2 密码:hellozhihu

【原】iOS 设计中 图片后期简单处理的完美组合

iOS 设计中 图片后期简单处理的完美组合 四张图+.DS_Store (3张alpha通道“是”,1张没有alpha通道) 5,909,971 字节(磁盘上的 5.9 MB),共 5 项 第一步:转非alpha通道,工具 Alpha-Channel-Remover https://github.com/bpolat/Alpha-Channel-Remover  这个地址就哦了 http://alphachannelremover.blogspot.com 这个墙内墙外都试过没打开 转完后:变小

C#生成条形码图片的简单方法

本文实例讲述了C#生成条形码图片的简单方法.分享给大家供大家参考.具体实现方法如下: 实现原理: 其实Windows本身就有一个字体是用来显示条形码的. 只要将数字改为这种字体就变成了条形码. windows字体库下,有如下八种字体可以用来将数字转换成条形码: Code39AzaleaNarrow1 Code39AzaleaNarrow2 Code39AzaleaNarrow3 Code39AzaleaRegular1 Code39AzaleaRegular2 Code39AzaleaWide1

一个抓取知乎页面图片的简单爬虫

在知乎上看到一个问题  能利用爬虫技术做到哪些很酷很有趣很有用的事情?发现蛮好玩的,便去学了下正则表达式,以前听说正则表达式蛮有用处的,学完后觉得确实很实用的工具.问题评论下基本都是python写的爬虫,我看了下原理,感觉爬一个简单的静态网页还是挺容易的.就是获取网站html源码,然后解析需要的字段,最后拿到字段处理(下载).想起我学java的时候有个URL类好像有这个功能,便去翻了下api文档,发现URLConnection果然可以获取html源码. 首先从核心开始写,获取网页源码 packa

gif/jpg/png 图片格式 简单对比

本文章来自于艾某人的网易博客. 在网站开发中,我们经常会用到背景图,或者是数据图,这些都是图片,我们常用的图片的文件格式有三种:GIF,JPG,PNG.这三种图片格式具有不同的特点,对动画.透明度支持的情况不同,同时对色彩的处理也不同.我们在开发的过程中只有选择合适的图片格式,才能使我们的开发速度更快. 在面试的过程中,发现被问的很频繁的是有关于图片格式的问题,这时候才猛然发觉我对这些问题知之甚少,仅停留在表面的一些认知,可能表面的认知也是需要提一下的,但是对于图片的认识越深,才能在选用的过程中

LZ77压缩算法编码原理详解(结合图片和简单代码)

前言 LZ77算法是无损压缩算法,由以色列人Abraham Lempel发表于1977年.LZ77是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77.鉴于其在数据压缩领域的地位,本文将结合图片和源码详细介绍其原理. 原理介绍: 首先介绍几个专业术语. 1.lookahead buffer(不知道怎么用中文表述,暂时称为待编码区): 等待编码的区域 2. search buffer: 已经编码的区域,搜索缓冲区 3.滑动窗口: 指定大小的窗,包含“搜索缓冲区”(左) + “待编码区”(右

Android笔记(二十八) Android中图片之简单图片使用

用户界面很大程度上决定了APP是否被用户接收,为了提供友好的界面,就需要在应用中使用图片了,Android提供了丰富的图片处理功能. 简单使用图片 使用Drawable对象 为Android应用增加了Drawable资源之后,系统会自动在R.java文件中创建一个索引项:R.drawable.fileName,然后在Java中可以通过R.drawable.fileName来获取到该资源的索引(一个int类型的常量),如果要获取实际的Drawable对象,则可以调用Resources的getDra

Python学习笔记一:简单的交互程序

入门第一课:简单的用户交互程序 1 name = input("Name: ") #Python3.X中的input取代了Python2.X中的input_raw 2 age = int(input("Age: )) #此处若不加int语句,输入时计算机会识别为字符串,为了确保计算机识别为数字,用户也可以输入数字意外的字符.int = integer意为整数 3 job = input("Job: ") 4 salary = input("Sal

安卓与HTML简单的交互使用

实现通过java代码与HTML的一个互相操作. 准备工作: 1.新建Android工程,在布局文件中添加WebView控件. 2.准备一个HTML文件,放在src/main/assets文件夹下. 3.在java中得到webview,通过loadUrl找到assets下的HTML文件,必须设置webview能使用js(settings.setJavaScriptEnabled(true))加载显示如下效果: 简单的效果实现 一.点击HTML上sayHello按钮,可以得到java代码返回的字符串