標籤:
// 1.隊列組 dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 2.下載圖片1 __block UIImage *image1 = nil; dispatch_group_async(group, queue, ^{ NSURL *url1 = [NSURL URLWithString:@"http://111.jpg"]; NSData *data1 = [NSData dataWithContentsOfURL:url1]; image1 = [UIImage imageWithData:data1]; }); // 3.下載圖片2 __block UIImage *image2 = nil; dispatch_group_async(group, queue, ^{ NSURL *url2 = [NSURL URLWithString:@"http://222.png"]; NSData *data2 = [NSData dataWithContentsOfURL:url2]; image2 = [UIImage imageWithData:data2]; }); // 4.合并圖片 (保證執行完組裡面的所有任務之後,再執行notify函數裡面的block) dispatch_group_notify(group, queue, ^{ // 開啟一個位元影像上下文 UIGraphicsBeginImageContextWithOptions(image1.size, NO, 0.0); // 繪製第1張圖片 CGFloat image1W = image1.size.width; CGFloat image1H = image1.size.height; [image1 drawInRect:CGRectMake(0, 0, image1W, image1H)]; // 繪製第2張圖片 CGFloat image2W = image2.size.width * 0.5; CGFloat image2H = image2.size.height * 0.5; CGFloat image2Y = image1H - image2H; [image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)]; // 得到上下文中的圖片 UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext(); // 結束上下文 UIGraphicsEndImageContext(); // 5.回到主線程顯示圖片 dispatch_async(dispatch_get_main_queue(), ^{ self.imageView.image = fullImage; }); });
iOS-GCD 隊列組的使用