zoukankan      html  css  js  c++  java
  • 用SDWebImage渐变加载图片

    用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
  • 相关阅读:
    SQL GUID和自增列做主键的优缺点
    python __future__ 的几种特性
    数据库中文乱码处理
    Android_Intent意图详解
    Windows Server 2012 R2超级虚拟化之六 Hyper-v Replica 2.0和Live migrations
    如今网站定位,需立足于用户
    Hibernate 数据的批量插入、更新和删除
    paip.提升用户体验---论文本编辑器的色彩方案
    时间管理方法学习
    网站优化:从搜索引擎到社交网络的艰难转变
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/6030182.html
Copyright © 2011-2022 走看看