用SDWebImage渐变加载图片
使用
使用请详细查看源码,只需要给定一个图片地址以及一个placeHolder图片(非必须)即可。
效果
源码
https://github.com/YouXianMing/UI-Component-Collection 中的 SDWebImageViewPlaceHorder
//
// PlaceholderImageView.h
// SDWebImageViewPlaceHorder
//
// Created by YouXianMing on 16/8/19.
// Copyright © 2016年 YouXianMing. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface PlaceholderImageView : UIView
/**
* Picture's url string.
*/
@property (nonatomic, strong) NSString *urlString;
/**
* The placeholder's image.
*/
@property (nonatomic, strong) UIImage *placeholderImage;
/**
* Default is UIViewContentModeScaleAspectFill.
*/
@property (nonatomic) UIViewContentMode placeholderImageContentMode;
/**
* Default is UIViewContentModeScaleAspectFill.
*/
@property (nonatomic) UIViewContentMode contentImageContentMode;
/**
PlaceholderImageView's constractor.
@param frame The Frame.
@param image The placeholderImage.
@return The PlaceholderImageView's instancetype.
*/
+ (instancetype)placeholderImageViewWithFrame:(CGRect)frame placeholderImage:(UIImage *)image;
@end
//
// PlaceholderImageView.m
// SDWebImageViewPlaceHorder
//
// Created by YouXianMing on 16/8/19.
// Copyright © 2016年 YouXianMing. All rights reserved.
//
#import "PlaceholderImageView.h"
#import "UIImageView+WebCache.h"
@interface PlaceholderImageView ()
@property (nonatomic, strong) UIImageView *placeHoderImageView;
@property (nonatomic, strong) UIImageView *contentImageView;
@property (nonatomic, strong) NSString *pUrlString;
@end
@implementation PlaceholderImageView
- (void)layoutSubviews {
[super layoutSubviews];
self.placeHoderImageView.frame = self.bounds;
self.contentImageView.frame = self.bounds;
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
self.layer.masksToBounds = YES;
self.placeHoderImageView = [[UIImageView alloc] initWithFrame:self.bounds];
self.contentImageView = [[UIImageView alloc] initWithFrame:self.bounds];
[self addSubview:self.placeHoderImageView];
[self addSubview:self.contentImageView];
self.contentImageContentMode = UIViewContentModeScaleAspectFill;
self.placeholderImageContentMode = UIViewContentModeScaleAspectFill;
}
return self;
}
+ (instancetype)placeholderImageViewWithFrame:(CGRect)frame placeholderImage:(UIImage *)image {
PlaceholderImageView *placeHolderImageView = [[PlaceholderImageView alloc] initWithFrame:frame];
placeHolderImageView.placeholderImage = image;
return placeHolderImageView;
}
#pragma mark - Setter & Getter.
- (void)setPlaceholderImage:(UIImage *)placeholderImage {
_placeHoderImageView.image = placeholderImage;
}
- (UIImage *)placeholderImage {
return _placeHoderImageView.image;
}
- (void)setUrlString:(NSString *)urlString {
_pUrlString = urlString;
_contentImageView.alpha = 0.f;
NSURL *url = [NSURL URLWithString:urlString];
[_contentImageView sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (image) {
// Image load from disk or download from network.
if (cacheType == SDImageCacheTypeNone || cacheType == SDImageCacheTypeDisk) {
[UIView animateWithDuration:0.5f animations:^{
_contentImageView.alpha = 1.f;
}];
} else {
_contentImageView.alpha = 1.f;
}
}
}];
}
- (NSString *)urlString {
return _pUrlString;
}
- (void)setPlaceholderImageContentMode:(UIViewContentMode)placeholderImageContentMode {
_placeHoderImageView.contentMode = placeholderImageContentMode;
}
- (UIViewContentMode)placeholderImageContentMode {
return _placeHoderImageView.contentMode;
}
- (void)setContentImageContentMode:(UIViewContentMode)contentImageContentMode {
_contentImageView.contentMode = contentImageContentMode;
}
- (UIViewContentMode)contentImageContentMode {
return _contentImageView.contentMode;
}
@end