首页 > Web开发 > 详细

模仿SDWebImage实现异步加载图片

时间:2014-07-23 12:27:16      阅读:363      评论:0      收藏:0      [点我收藏+]

模仿SDWebImage实现异步加载图片

bubuko.com,布布扣

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本身,这个涨知识了:)

bubuko.com,布布扣

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

bubuko.com,布布扣

模仿SDWebImage实现异步加载图片,布布扣,bubuko.com

模仿SDWebImage实现异步加载图片

原文:http://www.cnblogs.com/YouXianMing/p/3862208.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!