用SDWebImage渐变加载图片

使用

使用请详细查看源码,只需要给定一个图片地址以及一个placeHolder图片(非必须)即可。

效果

源码

https://github.com/YouXianMing/UI-Component-Collection 中的 SDWebImageViewPlaceHorder

  1. //
  2. // PlaceholderImageView.h
  3. // SDWebImageViewPlaceHorder
  4. //
  5. // Created by YouXianMing on 16/8/19.
  6. // Copyright © 2016年 YouXianMing. All rights reserved.
  7. //
  8.  
  9. #import <UIKit/UIKit.h>
  10.  
  11. @interface PlaceholderImageView : UIView
  12.  
  13. /**
  14. * Picture's url string.
  15. */
  16. @property (nonatomic, strong) NSString *urlString;
  17.  
  18. /**
  19. * The placeholder's image.
  20. */
  21. @property (nonatomic, strong) UIImage *placeholderImage;
  22.  
  23. /**
  24. * Default is UIViewContentModeScaleAspectFill.
  25. */
  26. @property (nonatomic) UIViewContentMode placeholderImageContentMode;
  27.  
  28. /**
  29. * Default is UIViewContentModeScaleAspectFill.
  30. */
  31. @property (nonatomic) UIViewContentMode contentImageContentMode;
  32.  
  33. /**
  34. PlaceholderImageView's constractor.
  35.  
  36. @param frame The Frame.
  37. @param image The placeholderImage.
  38. @return The PlaceholderImageView's instancetype.
  39. */
  40. + (instancetype)placeholderImageViewWithFrame:(CGRect)frame placeholderImage:(UIImage *)image;
  41.  
  42. @end
  1. //
  2. // PlaceholderImageView.m
  3. // SDWebImageViewPlaceHorder
  4. //
  5. // Created by YouXianMing on 16/8/19.
  6. // Copyright © 2016年 YouXianMing. All rights reserved.
  7. //
  8.  
  9. #import "PlaceholderImageView.h"
  10. #import "UIImageView+WebCache.h"
  11.  
  12. @interface PlaceholderImageView ()
  13.  
  14. @property (nonatomic, strong) UIImageView *placeHoderImageView;
  15. @property (nonatomic, strong) UIImageView *contentImageView;
  16. @property (nonatomic, strong) NSString *pUrlString;
  17.  
  18. @end
  19.  
  20. @implementation PlaceholderImageView
  21.  
  22. - (void)layoutSubviews {
  23.  
  24. [super layoutSubviews];
  25. self.placeHoderImageView.frame = self.bounds;
  26. self.contentImageView.frame = self.bounds;
  27. }
  28.  
  29. - (instancetype)initWithFrame:(CGRect)frame {
  30.  
  31. if (self = [super initWithFrame:frame]) {
  32.  
  33. self.layer.masksToBounds = YES;
  34.  
  35. self.placeHoderImageView = [[UIImageView alloc] initWithFrame:self.bounds];
  36. self.contentImageView = [[UIImageView alloc] initWithFrame:self.bounds];
  37.  
  38. [self addSubview:self.placeHoderImageView];
  39. [self addSubview:self.contentImageView];
  40.  
  41. self.contentImageContentMode = UIViewContentModeScaleAspectFill;
  42. self.placeholderImageContentMode = UIViewContentModeScaleAspectFill;
  43. }
  44.  
  45. return self;
  46. }
  47.  
  48. + (instancetype)placeholderImageViewWithFrame:(CGRect)frame placeholderImage:(UIImage *)image {
  49.  
  50. PlaceholderImageView *placeHolderImageView = [[PlaceholderImageView alloc] initWithFrame:frame];
  51. placeHolderImageView.placeholderImage = image;
  52.  
  53. return placeHolderImageView;
  54. }
  55.  
  56. #pragma mark - Setter & Getter.
  57.  
  58. - (void)setPlaceholderImage:(UIImage *)placeholderImage {
  59.  
  60. _placeHoderImageView.image = placeholderImage;
  61. }
  62.  
  63. - (UIImage *)placeholderImage {
  64.  
  65. return _placeHoderImageView.image;
  66. }
  67.  
  68. - (void)setUrlString:(NSString *)urlString {
  69.  
  70. _pUrlString = urlString;
  71. _contentImageView.alpha = .f;
  72.  
  73. NSURL *url = [NSURL URLWithString:urlString];
  74. [_contentImageView sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
  75.  
  76. if (image) {
  77.  
  78. // Image load from disk or download from network.
  79. if (cacheType == SDImageCacheTypeNone || cacheType == SDImageCacheTypeDisk) {
  80.  
  81. [UIView animateWithDuration:0.5f animations:^{
  82.  
  83. _contentImageView.alpha = .f;
  84. }];
  85.  
  86. } else {
  87.  
  88. _contentImageView.alpha = .f;
  89. }
  90. }
  91. }];
  92. }
  93.  
  94. - (NSString *)urlString {
  95.  
  96. return _pUrlString;
  97. }
  98.  
  99. - (void)setPlaceholderImageContentMode:(UIViewContentMode)placeholderImageContentMode {
  100.  
  101. _placeHoderImageView.contentMode = placeholderImageContentMode;
  102. }
  103.  
  104. - (UIViewContentMode)placeholderImageContentMode {
  105.  
  106. return _placeHoderImageView.contentMode;
  107. }
  108.  
  109. - (void)setContentImageContentMode:(UIViewContentMode)contentImageContentMode {
  110.  
  111. _contentImageView.contentMode = contentImageContentMode;
  112. }
  113.  
  114. - (UIViewContentMode)contentImageContentMode {
  115.  
  116. return _contentImageView.contentMode;
  117. }
  118.  
  119. @end

用SDWebImage渐变加载图片的更多相关文章

  1. 李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片

     李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片  源码:  // //  ViewController.m //  08-九宫格扩展 // //  Created by 李洪强 ...

  2. SDWebImage实现图片缓存

    我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了.研究发现, ...

  3. SDWebImage下载图片的使用

    第一步,下载SDWebImage,导入工程.github托管地址https://github.com/rs/SDWebImage 第二步,在需要的地方导入头文件 1 #import "UII ...

  4. SDWebImage下载图片有时候无法成功显示出来

    之前用下面的方法现在图片,有时候会出现图片没有下载成功显示: - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)p ...

  5. SDWebImage清除图片缓存

    背景: 使用 SDWebImage 库,由于内存中一直缓存着加载的图片,而导致内存过高(我们无法手动管理内存),弹出内存警告而导致程序很卡或者直接crash掉. 我的解决方法: 在AppDelegat ...

  6. 使用SDWebImage下载图片,sharedDownloader方法下载成功,new 方法下载失败

    一,经历 1.使用 new 方法创建下载对象时,下载图片总是失败,而且不会执行成功或失败后的回调. 2.参考别人的代码,用的是sharedDownloader来创建下载对象,可以顺利下载图片. 3.看 ...

  7. SDWebImage缓存图片的机制(转)

    SDWebImage是一个很厉害的图片缓存的框架.既ASIHttp+AsyncImage之后,我一直使用AFNetworking集成的UIImageView+AFNetworking.h,但后者对于图 ...

  8. SDWebImage缓存图片的机制

    SDWebImage是一个很厉害的图片缓存的框架.既ASIHttp+AsyncImage之后,我一直使用AFNetworking集成的UIImageView+AFNetworking.h,但后者对于图 ...

  9. sdwebimage缓存图片

    当使用SDWebImage时,如果用相同图片名的图片替换掉了原始缓存的图片,当再次请求的时候,还是使用的缓存图片,图片不会发生改变 原因:图片在NSCache中是以absolute url作为key存 ...

随机推荐

  1. Observer设计模式中-委托事件-应用在消息在窗体上显示

    Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...

  2. 2016/10/28 很久没更了 leetcode解题 3sumcloset

    16.3Sum Closest Given an array S of n integers, find three integers in S such that the sum is closes ...

  3. C++变量的左值和右值

    变量和文字常量都有存储区,并且有相关的类型. 区别在于变量是寻址的,对于每一个变量,都有两个值与其相关联 1  它的数据值,存储在某个内存地址中.有时这个值也被称为对象的右值 文字常量和变量都可被用作 ...

  4. kenrnel 驱动中常用的宏

    http://blog.csdn.net/uruita/article/details/7263290 1. MODULE_DEVICE_TABLE (usb, skel_table);该宏生成一个名 ...

  5. 【转】移动端viewport的使用

    web端网站转移至移动端页面,注意点如下: 1.首先引入viewport调整页面宽度 <meta name="viewport" content="width=de ...

  6. 我使用中的Linux命令和快捷键(For Ubuntu)

    虽然自己工作一直都在MS的平台体系,自然很多的工作都需要在windows上完成,自己的电脑也一直使用windows操作系统,但是笔记本配置不是很好,导致装windows 8后,笔记本卡的难以忍受.想想 ...

  7. Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

    CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...

  8. Windows7上搭建Cocos2d-x 3.1.1开发环境

    前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握Cocos2d-x 3.0.首先就从开发环境的大家说起吧. 开发工具 ...

  9. 解决阿里云SLB无法添加https证书的问题

    私钥是在Linux中通过下面的openssl命令生成的: openssl req -new -newkey rsa:2048 -nodes -keyout cnblogs.key -out cnblo ...

  10. C++11 并发指南六(atomic 类型详解三 std::atomic (续))

    C++11 并发指南六( <atomic> 类型详解二 std::atomic ) 介绍了基本的原子类型 std::atomic 的用法,本节我会给大家介绍C++11 标准库中的 std: ...