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


    本文的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];
        
        /** 先从沙盒中取出图片 */
        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演示:

  • 相关阅读:
    java—连连看-实现封装
    java—连连看GUI
    连连看--产生随机数
    勇者斗恶龙
    在ctex环境下利用Metapost作图
    [leetcode] Binary Tree Postorder Traversal
    [leetcode] Binary Tree Maximum Path Sum
    [leetcode] Binary Tree Level Order Traversal II
    [leetcode] Binary Tree Level Order Traversal
    [leetcode] Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/geshihuayoutiao/p/4737029.html
Copyright © 2020-2023  润新知