码迷,mamicode.com
首页 > 其他好文 > 详细

PhotoView 实现与图片进行简单的交互

时间:2015-08-18 11:36:04      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

本文的category是根据VIPhotoView来做参考,在此基础上添加个加载网络图片。

此category主要功能是与图片进行交互,双击放大图片,捏合等操作。

感谢 !

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

技术分享

 

PhotoView 实现与图片进行简单的交互

标签:

原文地址:http://www.cnblogs.com/geshihuayoutiao/p/4737029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!