Ios-queue Group
Last Update:2015-10-01
Source: Internet
Author: User
<span id="Label3"></p><pre><span style="font-size: 14pt;"><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">HMVIEWCONTROLLER.M</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">03-queue Group (learn)</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Created by Apple on 14-9-16.</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Copyright (c) 2014 Heima. All Rights Reserved.</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">#import</span></span> <span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">HMViewController.h</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1. Download 2 pictures respectively: Big picture, LOGO</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">2. Merge 2 photos</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3. Display to a imageview body</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">@interface</span></span><span style="color: #000000;"><span style="color: #000000;">hmviewcontroller () @property (weak, nonatomic) iboutlet uiimageview</span></span>*<span style="color: #000000;"><span style="color: #000000;">imageView, @property (nonatomic, Strong) UIImage</span></span>*<span style="color: #000000;"><span style="color: #000000;">image1, @property (nonatomic, Strong) UIImage</span></span>*<span style="color: #000000;"><span style="color: #000000;">image2;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">@end</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">@implementation</span></span><span style="color: #000000;"><span style="color: #000000;">Hmviewcontroller</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">) Viewdidload{[super viewdidload]; }</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">2D Drawing quartz2d</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">merged Image--watermark</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) touchesbegan: (nsset *) touches withevent: (uievent *)<span style="color: #0000ff;"><span style="color: #0000ff;">Event</span></span><span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1. Queue Groups</span></span>dispatch_group_t Group =<span style="color: #000000;"><span style="color: #000000;">dispatch_group_create (); dispatch_queue_t Queue</span></span>= Dispatch_get_global_queue (dispatch_queue_priority_default,<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">2. Download picture 1</span></span>__block UIImage *image1 =<span style="color: #000000;"><span style="color: #000000;">nil; Dispatch_group_async (group, queue,</span></span>^<span style="color: #000000;"><span style="color: #000000;">{nsurl</span></span>*URL1 = [nsurl urlwithstring:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>*data1 =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithcontentsofurl:url1]; Image1</span></span>=<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithdata:data1]; }); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3. Download Picture 2</span></span>__block UIImage *image2 =<span style="color: #000000;"><span style="color: #000000;">nil; Dispatch_group_async (group, queue,</span></span>^<span style="color: #000000;"><span style="color: #000000;">{nsurl</span></span>*URL2 = [nsurl urlwithstring:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>*DATA2 =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithcontentsofurl:url2]; Image2</span></span>=<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithdata:data2]; }); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">4. Merge Pictures (ensure that all tasks within the group are executed, and then execute the block inside the Notify Function)</span></span>Dispatch_group_notify (group, queue, ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">to <span style="color: #008000;">Open a bitmap context</span></span>Uigraphicsbeginimagecontextwithoptions (image1.size, NO,<span style="color: #800080;"><span style="color: #800080;">0.0</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">draw the 1th picture</span></span>CGFloat image1w =<span style="color: #000000;"><span style="color: #000000;">image1.size.width; CGFloat image1h</span></span>=<span style="color: #000000;"><span style="color: #000000;">image1.size.height; [image1 Drawinrect:cgrectmake (</span></span><span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">, image1w, image1h)]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">draw the 2nd picture</span></span>CGFloat image2w = Image2.size.width *<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; CGFloat image2h</span></span>= Image2.size.height *<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; CGFloat image2y</span></span>= image1h-<span style="color: #000000;"><span style="color: #000000;">image2h; [image2 Drawinrect:cgrectmake (</span></span><span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">, image2y, image2w, image2h)]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get the picture in context</span></span>UIImage *fullimage =<span style="color: #000000;"><span style="color: #000000;">Uigraphicsgetimagefromcurrentimagecontext (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">End Context</span></span><span style="color: #000000;"><span style="color: #000000;">Uigraphicsendimagecontext (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">5. Go back to the main thread to display the picture</span></span>Dispatch_async (dispatch_get_main_queue (), ^<span style="color: #000000;"><span style="color: #000000;">{self.imageView.image</span></span>=<span style="color: #000000;"><span style="color: #000000;">fullimage; }); });}</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">) test2{</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Asynchronous Download</span></span>Dispatch_async (dispatch_get_global_queue (dispatch_queue_priority_default,<span style="color: #800080;"><span style="color: #800080;">0</span></span>), ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1. Download the 1th one</span></span>Nsurl *URL1 = [nsurl urlwithstring:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>*data1 =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithcontentsofurl:url1]; Self.image1</span></span>=<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithdata:data1]; [self bindimages]; }); Dispatch_async (dispatch_get_global_queue (dispatch_queue_priority_default,</span></span><span style="color: #800080;"><span style="color: #800080;">0</span></span>), ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">2. Download the 2nd one</span></span>Nsurl *url2 = [nsurl urlwithstring:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>*DATA2 =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithcontentsofurl:url2]; Self.image2</span></span>=<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithdata:data2]; [self bindimages]; });}</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">) bindimages{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(self.image1 = = Nil | | self.image2 = NIL)<span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3. Merging pictures</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">to <span style="color: #008000;">Open a bitmap context</span></span>Uigraphicsbeginimagecontextwithoptions (self.image1.size, NO,<span style="color: #800080;"><span style="color: #800080;">0.0</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">draw the 1th picture</span></span>CGFloat image1w =<span style="color: #000000;"><span style="color: #000000;">self.image1.size.width; CGFloat image1h</span></span>=<span style="color: #000000;"><span style="color: #000000;">self.image1.size.height; [self.image1 Drawinrect:cgrectmake (</span></span><span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">, image1w, image1h)]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">draw the 2nd picture</span></span>CGFloat image2w = Self.image2.size.width *<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; CGFloat image2h</span></span>= Self.image2.size.height *<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; CGFloat image2y</span></span>= image1h-<span style="color: #000000;"><span style="color: #000000;">image2h; [self.image2 Drawinrect:cgrectmake (</span></span><span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">, image2y, image2w, image2h)]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get the picture in context</span></span>UIImage *fullimage =<span style="color: #000000;"><span style="color: #000000;">Uigraphicsgetimagefromcurrentimagecontext (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">End Context</span></span><span style="color: #000000;"><span style="color: #000000;">Uigraphicsendimagecontext (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">4. Go back to the main thread to display the picture</span></span>Dispatch_async (dispatch_get_main_queue (), ^<span style="color: #000000;"><span style="color: #000000;">{self.imageView.image</span></span>=<span style="color: #000000;"><span style="color: #000000;">fullimage; });}</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">) test1{</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Asynchronous Download</span></span>Dispatch_async (dispatch_get_global_queue (dispatch_queue_priority_default,<span style="color: #800080;"><span style="color: #800080;">0</span></span>), ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1. Download the 1th one</span></span>Nsurl *URL1 = [nsurl urlwithstring:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>*data1 =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithcontentsofurl:url1]; UIImage</span></span>*image1 =<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithdata:data1]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">2. Download the 2nd one</span></span>Nsurl *url2 = [nsurl urlwithstring:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>*DATA2 =<span style="color: #000000;"><span style="color: #000000;">[nsdata datawithcontentsofurl:url2]; UIImage</span></span>*image2 =<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithdata:data2]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3. Merging pictures</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">to <span style="color: #008000;">Open a bitmap context</span></span>Uigraphicsbeginimagecontextwithoptions (image1.size, NO,<span style="color: #800080;"><span style="color: #800080;">0.0</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">draw the 1th picture</span></span>CGFloat image1w =<span style="color: #000000;"><span style="color: #000000;">image1.size.width; CGFloat image1h</span></span>=<span style="color: #000000;"><span style="color: #000000;">image1.size.height; [image1 Drawinrect:cgrectmake (</span></span><span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">, image1w, image1h)]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">draw the 2nd picture</span></span>CGFloat image2w = Image2.size.width *<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; CGFloat image2h</span></span>= Image2.size.height *<span style="color: #800080;"><span style="color: #800080;">0.5</span></span><span style="color: #000000;"><span style="color: #000000;">; CGFloat image2y</span></span>= image1h-<span style="color: #000000;"><span style="color: #000000;">image2h; [image2 Drawinrect:cgrectmake (</span></span><span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">, image2y, image2w, image2h)]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get the picture in context</span></span>UIImage *fullimage =<span style="color: #000000;"><span style="color: #000000;">Uigraphicsgetimagefromcurrentimagecontext (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">End Context</span></span><span style="color: #000000;"><span style="color: #000000;">Uigraphicsendimagecontext (); </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">4. Go back to the main thread to display the picture</span></span>Dispatch_async (dispatch_get_main_queue (), ^<span style="color: #000000;"><span style="color: #000000;">{self.imageView.image</span></span>=<span style="color: #000000;"><span style="color: #000000;">fullimage; }); });}</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">@end</span></span></span></pre><p><p></p></p><p><p>Ios-queue Group</p></p></span>