# Import <uikit/uikit. h> <br/> # import <quartzcore/quartzcore. h> </P> <p> typedef Enum {<br/> uiimageexnormal = 0, <br/> uiimageexfull <br/>} uiimageexstate; </P> <p> @ interface uiimageviewex: uiimageview <uigesturerecognizerdelegate> <br/>{< br/> uiview * parentview; // parent window, that is, use the uiview added by uiimageex </P> <p> bool ispanenable; // whether it can be moved <br/> bool ispinchenable; // whether the image can be zoomed in or out <br/> bool isrotateenable; // whether the image can be rotated <br/> bool ISTAP; // can you click </P> <p> uiimageexstate imagestate; // The current image status </P> <p> cgfloat imagescale; // maximum zoom factor <br/> cgfloat imagesize; // record the cumulative zoom of the image <br/> cgfloat imagerotation; // record the original image angle <br/> cgpoint imagepoint; // record the original position of the image </P> <p> uitextview * textview; // dynamically pop-up text </P> <p >}</P> <p> @ property (nonatomic, retain) uiview * parentview; <br/> @ property (nonatomic) cgfloat imagesize; <br/> @ property (nonatomic) cgfloat imagerotation; <br/> @ property (nonatomic) cgpoint imagepoint; </P> <p> @ property bool ispanenable; <br/> @ property bool isrotateenable; <br/> @ property bool ispinchenable; <br/> @ property bool ISTAP; </P> <p>-(void) handlepan :( uipangesturerecognizer *) recognizer; <br/>-(void) handlepinch :( uipinchgesturerecognizer *) recognizer; <br/>-(void) handlerotate :( uirotationgesturerecognizer *) recognizer; <br/>-(void) handletap :( uitapgesturerecognizer *) recognizer; </P> <p> // required <br/>-(void) setscaleandrotation :( uiview *) imageview; <br/>-(void) setinfotext :( nsstring *) string; <br/>-(void) setshadow :( bool) isshadow; <br/> @ end <br/>
# Import "uiimageviewex. H "</P> <p> @ implementation uiimageviewex <br/> @ synthesize parentview; <br/> @ synthesize isrotateenable, ispanenable, ispinchenable, ISTAP; <br/> @ synthesize imagesize, imagerotation, imagepoint; </P> <p>/* <br/> * setscaleandrotation: enables gesture rotation and scaling of imageview, and move <br/> * @ parent uiview parent window <br/> */<br/>-(void) setscaleandrotation :( uiview *) parent <br/>{< br/> parentview = parent; <br/> Paren Tview. userinteractionenabled = yes; </P> <p> ispanenable = yes; <br/> ispinchenable = yes; <br/> isrotateenable = yes; <br/> ISTAP = yes; </P> <p> imagesize = 1; <br/> imagerotation = 0; </P> <p> imagescale = self. parentview. frame. size. width/self. frame. size. width; <br/> imagepoint = self. frame. origin; <br/> self. userinteractionenabled = yes; </P> <p> uipangesturerecognizer * panrcognize = [[uipangesturerecognizer alloc] init Withtarget: Self action: @ selector (handlepan :)]; <br/> panrcognize. delegate = self; <br/> [panrcognize setenabled: Yes]; <br/> [panrcognize delaystouchesended]; <br/> [panrcognize cancelstouchesinview]; </P> <p> comment * pinchrcognize = [[comment alloc] initwithtarget: Self action: @ selector (handlepinch :)]; <br/> [pinchrcognize setenabled: Yes]; <br/> [pinchrcognize delaystou Chesended]; <br/> [pinchrcognize cancelstouchesinview]; </P> <p> using * rotationrecognize = [[using alloc] initwithtarget: Self action: @ selector (handlerotate :)]; <br/> [rotationrecognize setenabled: Yes]; <br/> [rotationrecognize delaystouchesended]; <br/> [rotationrecognize cancelstouchesinview]; <br/> rotationrecognize. delegate = self; <br/> pinchrcognize. dele Gate = self; </P> <p> uitapgesturerecognizer * taprecognize = [[using alloc] initwithtarget: Self action: @ selector (handletap :)]; <br/> taprecognize. numberoftapsrequired = 1; <br/> taprecognize. delegate = self; <br/> [taprecognize setenabled: Yes]; <br/> [taprecognize delaystouchesbegan]; <br/> [taprecognize cancelstouchesinview]; </P> <p> [self addgesturerecognizer: rotationrecognize]; <br/> [Self addgesturerecognizer: panrcognize]; <br/> [self addgesturerecognizer: pinchrcognize]; <br/> [self addgesturerecognizer: taprecognize]; </P> <p >}< br/>/* <br/> * setinfotext Setting Description text <br/> * @ string nsstring display text <br/> */ <br/>-(void) setinfotext :( nsstring *) string <br/>{< br/> If (textview! = Nil) {<br/> [textview removefromsuperview]; <br/> textview = nil; <br/>}</P> <p> textview = [[uitextview alloc] initwithframe: cgrectmake (0, 0, 0, 30)]; <br/> textview. TEXT = string; <br/> textview. hidden = yes; <br/> textview. backgroundcolor = [uicolor bluecolor]; <br/> textview. textcolor = [uicolor whitecolor]; <br/> [self addsubview: textview]; <br/>}< br/>/* <br/> * set whether to enable shadow. <br/> *@ Isshadow bool Yes enabled, no disabled <br/> */<br/>-(void) setshadow :( bool) isshadow <br/>{< br/> If (! Isshadow) {<br/> [[self layer] setshadowoffset: cgsizemake (0, 0)]; <br/> [[self layer] setshadowradius: 0]; <br/> [[self layer] setshadowopacity: 1]; <br/> [self layer] setshadowcolor: [uicolor whitecolor]. cgcolor]; <br/> return; <br/>}< br/> [[self layer] setshadowoffset: cgsizemake (3, 3)]; <br/> [[self layer] setshadowradius: 3]; <br/> [[self layer] setshadowopacity: 0.5]; <br/> [[self layer] setshad Owcolor: [uicolor blackcolor]. cgcolor]; <br/>}</P> <p> # pragma uigesturerecognizer handles <br/>/* <br/> * function of mobile image processing <br/> * @ recognizer mobile gesture <br/> */<br/>-(void) handlepan :( uipangesturerecognizer *) recognizer {</P> <p> If (! Ispanenable) {<br/> return; <br/>}< br/> [self setshadow: Yes]; <br/> cgpoint translation = [recognizer translationinview: parentview]; <br/> recognizer. view. center = cgpointmake (recognizer. view. center. X + translation. x, <br/> recognizer. view. center. Y + translation. y); <br/> [recognizer settranslation: cgpointmake (0, 0) inview: parentview]; </P> <p> If (recognizer. state = uigesturerecognizerstateended) {<Br/> [uiview animatewithduration: 0.75 delay: 0 options: uiviewanimationoptioncurveeaseout animations: ^ {<br/> recognizer. view. center = cgpointmake (imagepoint. X + self. frame. size. width/2, imagepoint. Y + self. frame. size. height/2); <br/>}completion: Nil]; </P> <p> [self setshadow: No]; </P> <p >}< br/>/* <br/> * handpinch scaling function <br/> * @ recognizer uipinchgesturerecognizer gesture identification Tool <br/> */<br/>-(void) Handlepinch :( uipinchgesturerecognizer *) recognizer {<br/> If (! Ispinchenable) {<br/> return; <br/>}< br/> imagesize * = recognizer. scale; <br/> recognizer. view. transform = cgaffinetransformscale (recognizer. view. transform, recognizer. scale, recognizer. scale); <br/> If (recognizer. state = uigesturerecognizerstateended) {</P> <p> [uiview animatewithduration :. 35 animations: ^ {<br/> If (imagesize> = 1 & imagestate = uiimageexnormal) {<br/> recognizer. view. transform = Cgaffinetransformscale (recognizer. view. transform, imagescale/imagesize, imagescale/imagesize); <br/> imagestate = uiimageexfull; <br/>}< br/> else if (imagesize <1 & imagestate = uiimageexfull) <br/>{< br/> recognizer. view. transform = cgaffinetransformscale (recognizer. view. transform, 1/(imagescale * imagesize), 1/(imagescale * imagesize); <br/> imagestate = uiimageexnormal; <br/>} else {<br/> rec Ognizer. view. transform = cgaffinetransformscale (recognizer. view. transform, 1/imagesize, 1/imagesize); <br/>}</P> <p> [uiview animatewithduration: 0.35 delay: 0 options: uiviewanimationoptioncurveeaseout animations: ^ {<br/> recognizer. view. center = cgpointmake (imagepoint. X + self. frame. size. width/2, imagepoint. Y + self. frame. size. height/2); <br/>}completion: Nil]; <br/> recognizer. scale = 1; <br/> imagesize = 1; <br/>}]; </P> <p >}< br/> recognizer. scale = 1; </P> <p >}</P> <p>/* <br/> * handlerotate rotation function <br/> * recognizer uirotationgesturerecognizer <br/> */ <br/>-(void) handlerotate :( uirotationgesturerecognizer *) recognizer {<br/> If (! Isrotateenable) {<br/> return; <br/>}< br/> imagerotation + = recognizer. rotation; <br/> recognizer. view. transform = cgaffinetransformrotate (recognizer. view. transform, recognizer. rotation); <br/> If (recognizer. state = uigesturerecognizerstateended) {<br/> [uiview animatewithduration :. 35 animations: ^ {<br/> recognizer. view. transform = cgaffinetransformrotate (recognizer. view. transform,-imagerotation ); <Br/> recognizer. view. center = cgpointmake (imagepoint. X + self. frame. size. width/2, imagepoint. Y + self. frame. size. height/2); <br/>}]; </P> <p> imagerotation = 0; <br/>}< br/> recognizer. rotation = 0; <br/>}</P> <p>/* <br/> * handletap touch function <br/> * @ recognizer uitapgesturerecognizer touch reader <br/> */<br />-(void) handletap :( uitapgesturerecognizer *) recognizer <br/>{< br/> If (! ISTAP) {<br/> return; <br/>}< br/> If (textview. hidden) {<br/> [uiview animatewithduration: 0.35 delay: 0.15 options: uiviewanimationoptiontransitioncurlup animations: ^ {<br/> textview. hidden = no; <br/> textview. frame = cgrectmake (0, 0,120, 30); <br/>}completion: Nil]; <br/>}else {<br/> [uiview animatewithduration: 0.35 delay: 0.15 options: uiviewanimationoptiontransitioncurlup animations: ^ {</P> <p> textview. frame = cgrectmake (0, 0, 0, 30); <br/>} completion: ^ (bool finished) {<br/> If (finished) {<br/> textview. hidden = yes; <br/>}< br/>}]; <br/>}</P> <p> # pragma uigesturerecognizerdelegate <br/>/* <br/> * gesturerecognizer implements delegation, therefore, multiple gestures can be accepted simultaneously <br/> * @ return YES, no, you can only accept one gesture <br/> */<br/>-(bool) gesturerecognizer :( uigesturerecognizer *) gesturerecognizer runner :( uigesturerecognizer *) othergesturerecognizer {<br/> return yes; <br/>}</P> <p> @ end <br/>