230,队列组——同时下载两张图片,然后,合并显示

来源:互联网 发布:linux nmon 编辑:程序博客网 时间:2024/04/27 15:19

#import "ViewController.h"


@interface ViewController ()


@property (nonatomic,strong)UIImageView *imageview;


@end


@implementation ViewController


- (UIImageView *)imageview{

    if (_imageview ==nil) {

        _imageview = [[UIImageViewalloc] initWithFrame:CGRectMake(0,0, self.view.bounds.size.width,self.view.bounds.size.height)];

        [self.viewaddSubview:_imageview];

    }

    return_imageview;

}

/**

 *  队列组的作用:队列组里面队列的所有任务都执行完了,再执行notify方法

 */


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    //1,创建一个队列组

    dispatch_group_t group =dispatch_group_create();

    

    //2,创建一个队列

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    

    //3,开启一个新的异步线程,下载第一张图片image1

    __block UIImage *image1 =nil;

    dispatch_group_async(group, queue, ^{

        NSURL *url = [NSURLURLWithString:@"http://image64.360doc.com/DownloadImg/2013/09/0513/34991836_5.jpg"];

        NSData *data = [NSDatadataWithContentsOfURL:url];

        image1 = [UIImage imageWithData:data];

    });

    

    //4,再开一个新的异步线程,跟第三步同时下载image2

    __block UIImage *image2 =nil;

    dispatch_group_async(group, queue, ^{

        NSURL *url = [NSURLURLWithString:@"http://a0.att.hudong.com/58/59/19300001173647130466595655170.jpg"];

        NSData *data = [NSDatadataWithContentsOfURL:url];

        image2 = [UIImage imageWithData:data];

    });

    

    //5,前面两个线程执行完后,就执行下面的方法

    __block UIImage *image3 =nil;

    dispatch_group_notify(group, queue, ^{

        //创建一个空的image3,开始画图

        UIGraphicsBeginImageContextWithOptions(image1.size,NO, 0.0);

        

        //将第一个image1画入image3

        [image1 drawInRect:CGRectMake(0,0, image1.size.width, image1.size.height)];

        //将第二个image2画入image3

        [image2 drawInRect:CGRectMake(0,0, image2.size.width, image2.size.height)];

        //获取水印后的图片

        image3 = UIGraphicsGetImageFromCurrentImageContext();

        

        //结束画图

        UIGraphicsEndImageContext();

        

        //回到主线程,更新UI

        dispatch_async(dispatch_get_main_queue(), ^{

            self.imageview.image = image3;

        });

    });

}



@end


0 0