03-队列组 (了解)
1 #import "XZViewController.h" 2 3 // 1.分别下载2张图片:大图片、LOGO 4 // 2.合并2张图片 5 // 3.显示到一个imageView身上 6 7 @interface XZViewController () 8 @property (weak, nonatomic) IBOutlet UIImageView *imageView; 9 @property (nonatomic, strong) UIImage *image1; 10 @property (nonatomic, strong) UIImage *image2; 11 @end 12 13 @implementation XZViewController 14 15 - (void)viewDidLoad 16 { 17 [super viewDidLoad]; 18 19 } 20 21 // 2D绘图 Quartz2D 22 // 合并图片 -- 水印 23 24 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 25 { // 方法三 26 // 1.队列组 27 dispatch_group_t group = dispatch_group_create(); 28 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 29 30 // 2.下载图片1 31 __block UIImage *image1 = nil; 32 dispatch_group_async(group, queue, ^{ 33 NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg"]; 34 NSData *data1 = [NSData dataWithContentsOfURL:url1]; 35 image1 = [UIImage imageWithData:data1]; 36 }); 37 38 // 3.下载图片2 39 __block UIImage *image2 = nil; 40 dispatch_group_async(group, queue, ^{ 41 NSURL *url2 = [NSURL URLWithString:@"http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png"]; 42 NSData *data2 = [NSData dataWithContentsOfURL:url2]; 43 image2 = [UIImage imageWithData:data2]; 44 }); 45 46 // 4.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block) 47 dispatch_group_notify(group, queue, ^{ 48 // 开启一个位图上下文 49 UIGraphicsBeginImageContextWithOptions(image1.size, NO, 0.0); 50 51 // 绘制第1张图片 52 CGFloat image1W = image1.size.width; 53 CGFloat image1H = image1.size.height; 54 [image1 drawInRect:CGRectMake(0, 0, image1W, image1H)]; 55 56 // 绘制第2张图片 57 CGFloat image2W = image2.size.width * 0.5; 58 CGFloat image2H = image2.size.height * 0.5; 59 CGFloat image2Y = image1H - image2H; 60 [image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)]; 61 62 // 得到上下文中的图片 63 UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext(); 64 65 // 结束上下文 66 UIGraphicsEndImageContext(); 67 68 // 5.回到主线程显示图片 69 dispatch_async(dispatch_get_main_queue(), ^{ 70 self.imageView.image = fullImage; 71 }); 72 }); 73 } 74 /** 方法二 */ 75 - (void)test2 76 { 77 // 异步下载 78 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 79 // 1.下载第1张 80 NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg"]; 81 NSData *data1 = [NSData dataWithContentsOfURL:url1]; 82 self.image1 = [UIImage imageWithData:data1]; 83 84 [self bindImages]; 85 }); 86 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 87 // 2.下载第2张 88 NSURL *url2 = [NSURL URLWithString:@"http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png"]; 89 NSData *data2 = [NSData dataWithContentsOfURL:url2]; 90 self.image2 = [UIImage imageWithData:data2]; 91 92 [self bindImages]; 93 }); 94 } 95 96 - (void)bindImages 97 { 98 if (self.image1 == nil || self.image2 == nil) return; 99 100 // 3.合并图片 101 // 开启一个位图上下文 102 UIGraphicsBeginImageContextWithOptions(self.image1.size, NO, 0.0); 103 104 // 绘制第1张图片 105 CGFloat image1W = self.image1.size.width; 106 CGFloat image1H = self.image1.size.height; 107 [self.image1 drawInRect:CGRectMake(0, 0, image1W, image1H)]; 108 109 // 绘制第2张图片 110 CGFloat image2W = self.image2.size.width * 0.5; 111 CGFloat image2H = self.image2.size.height * 0.5; 112 CGFloat image2Y = image1H - image2H; 113 [self.image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)]; 114 115 // 得到上下文中的图片 116 UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext(); 117 118 // 结束上下文 119 UIGraphicsEndImageContext(); 120 121 // 4.回到主线程显示图片 122 dispatch_async(dispatch_get_main_queue(), ^{ 123 self.imageView.image = fullImage; 124 }); 125 } 126 /** 方法一 */ 127 - (void)test1 128 { 129 // 异步下载 130 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 131 // 1.下载第1张 132 NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg"]; 133 NSData *data1 = [NSData dataWithContentsOfURL:url1]; 134 UIImage *image1 = [UIImage imageWithData:data1]; 135 136 // 2.下载第2张 137 NSURL *url2 = [NSURL URLWithString:@"http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png"]; 138 NSData *data2 = [NSData dataWithContentsOfURL:url2]; 139 UIImage *image2 = [UIImage imageWithData:data2]; 140 141 // 3.合并图片 142 // 开启一个位图上下文 143 UIGraphicsBeginImageContextWithOptions(image1.size, NO, 0.0); 144 145 // 绘制第1张图片 146 CGFloat image1W = image1.size.width; 147 CGFloat image1H = image1.size.height; 148 [image1 drawInRect:CGRectMake(0, 0, image1W, image1H)]; 149 150 // 绘制第2张图片 151 CGFloat image2W = image2.size.width * 0.5; 152 CGFloat image2H = image2.size.height * 0.5; 153 CGFloat image2Y = image1H - image2H; 154 [image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)]; 155 156 // 得到上下文中的图片 157 UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext(); 158 159 // 结束上下文 160 UIGraphicsEndImageContext(); 161 162 // 4.回到主线程显示图片 163 dispatch_async(dispatch_get_main_queue(), ^{ 164 self.imageView.image = fullImage; 165 }); 166 }); 167 } 168 169 @end