模仿SDWebImage实现异步加载图片

模仿SDWebImage实现异步加载图片

SDWebImage想必大家都不陌生吧,要实现它的图片异步加载功能这个还是很简单的.

注意:此处我只实现了异步加载图片,并没有将文件缓存到本地的打算哦:)

源码:

UIImageView+YXImageView.h

//
//  UIImageView+YXImageView.h
//  PicDemo
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIImageView (YXImageView)

- (void)setImageWithURL:(NSString *)url placeholderImage:(UIImage *)placeholder;

@end

UIImageView+YXImageView.m

//
//  UIImageView+YXImageView.m
//  PicDemo
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "UIImageView+YXImageView.h"

@implementation UIImageView (YXImageView)

- (void)setImageWithURL:(NSString *)url placeholderImage:(UIImage *)placeholder
{
    // 先设置placeholder
    self.image = placeholder;
    
    // 异步下载完了之后再加载新的图片
    if (url)
    {
        // 子线程下载
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            
            NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
            NSData *data          = [NSURLConnection sendSynchronousRequest:request
                                                          returningResponse:nil
                                                                      error:nil];
            // 主线程更新
            dispatch_async(dispatch_get_main_queue(), ^{
                if (data)
                {
                    self.image = [UIImage imageWithData:data];
                    [self setNeedsDisplay];
                }
            });
        });
    }
}

@end

使用的源码:

RootViewController.m

//
//  RootViewController.m
//  PicDemo
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "UIImageView+YXImageView.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:imageView];
    
    [imageView setImageWithURL:@"http://pic.cnitblog.com/avatar/572952/20140226185251.png"
              placeholderImage:[UIImage imageNamed:@"1.png"]];
}

@end

核心代码:

GCD部分就不讲解了,关键的一步是需要重绘view本身,这个涨知识了:)

除了下载图片,你还可以做其他操作呢:)

模仿SDWebImage实现异步加载图片,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。