ios 手势识别

  1 //

  2 //  ViewController.m

  3 //  testGestures

  4 //

  5 //  Created by shawn li on 13-7-29.

  6 //  Copyright (c) 2013年 bigbellshawn. All rights reserved.

  7 //

  8 

  9 #import "ViewController.h"

 10 

 11 @interface ViewController ()

 12 @property (nonatomic, strong) UIImageView *imageView;

 13 @end

 14 

 15 @implementation ViewController

 16 

 17 @synthesize imageView = _imageView;

 18 

 19 - (void)viewDidLoad

 20 {

 21     [super viewDidLoad];

 22     /* step1: 声明和初始化一个手势识别器 */

 23     UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];

 24     UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];

 25     UITapGestureRecognizer *twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerTap:)];

 26     // 坑:selector不小心忘了写冒号,导致找不到handleSwipe */

 27     UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

 28     UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

 29     UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotation:)];

 30     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];

 31     UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];

 32     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];

 33     

 34     /* step2:对手势识别器进行属性设定 */

 35     [doubleTap setNumberOfTapsRequired:2];

 36     // 坑:twoFingerTap在模拟器上不灵敏,有时候会识别成singleTap

 37     [twoFingerTap setNumberOfTouchesRequired:2];

 38 

 39     [swipeLeft setNumberOfTouchesRequired:1];

 40     [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];

 41     [swipeRight setNumberOfTouchesRequired:1];

 42     [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];

 43     

 44     // 坑:此部分代码无用 注:left、right、up、down都是独立的手势,没法一个swipe全代替,如果只有一个swipe默认向右划

 45     /*

 46     UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

 47     [swipe setNumberOfTouchesRequired:1];

 48     [swipe setDirection:UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown];

 49      

 50     [self.view addGestureRecognizer:swipe];

 51      */

 52     

 53     

 54     /* step3:把手势识别器加到view中去 */

 55     [self.view addGestureRecognizer:singleTap];

 56     [self.view addGestureRecognizer:doubleTap];

 57     [self.view addGestureRecognizer:twoFingerTap];

 58     [self.view addGestureRecognizer:swipeLeft];

 59     [self.view addGestureRecognizer:swipeRight];

 60     [self.view addGestureRecognizer:rotation];

 61     [self.view addGestureRecognizer:pan];

 62     [self.view addGestureRecognizer:pinch];

 63     [self.view addGestureRecognizer:longPress];

 64     

 65     /* step4:出现冲突时,要设定优先识别顺序,目前只是doubleTap、swipe */

 66     [singleTap requireGestureRecognizerToFail:doubleTap];

 67     [singleTap requireGestureRecognizerToFail:twoFingerTap];

 68     [pan requireGestureRecognizerToFail:swipeRight];

 69     [pan requireGestureRecognizerToFail:swipeLeft];

 70     

 71     

 72     _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 120, 100, 40)];

 73     [self.view addSubview:_imageView];

 74     

 75 }

 76 

 77 - (void)didReceiveMemoryWarning

 78 {

 79     [super didReceiveMemoryWarning];

 80     // Dispose of any resources that can be recreated.

 81 }

 82 

 83 

 84 #pragma mark handle gestures methods

 85 

 86 /* step5:去实现处理扑捉到手势之后的动作 */

 87 

 88 /* 识别单击 */

 89 - (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer {

 90     CGPoint location = [gestureRecognizer locationInView:self.view];

 91     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:@"singleTap"];

 92     

 93     [UIView animateWithDuration:0.5 animations:^{

 94         self.imageView.alpha = 0.0;

 95     }];

 96 }

 97 

 98 /* 识别双击 */

 99 - (void)handleDoubleTap:(UITapGestureRecognizer *)gestureRecognizer {

100     CGPoint location = [gestureRecognizer locationInView:self.view];

101     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:@"doubleTap"];

102     

103     [UIView animateWithDuration:0.5 animations:^{

104         self.imageView.alpha = 0.0;

105     }];

106 }

107 

108 /* 识别两个手指击 */

109 - (void)handleTwoFingerTap:(UITapGestureRecognizer *)gestureRecognizer {

110     CGPoint location = [gestureRecognizer locationInView:self.view];

111     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:@"twoFingerTap"];

112     

113     [UIView animateWithDuration:0.5 animations:^{

114         self.imageView.alpha = 0.0;

115     }];

116 }

117 

118 /* 识别侧滑 */

119 - (void)handleSwipe:(UISwipeGestureRecognizer *)gestureRecognizer {

120     CGPoint location = [gestureRecognizer locationInView:self.view];

121     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:nil];

122     

123     if (gestureRecognizer.direction == UISwipeGestureRecognizerDirectionLeft) {

124         location.x -= 220.0;

125     }

126     else if (gestureRecognizer.direction == UISwipeGestureRecognizerDirectionUp) {

127         location.x -= 220.0;

128     }

129     else if (gestureRecognizer.direction == UISwipeGestureRecognizerDirectionDown) {

130         location.x -= 220.0;

131     }

132     else{

133         location.x += 220.0;

134     }

135     

136     [UIView animateWithDuration:0.5 animations:^{

137         self.imageView.alpha = 0.0;

138         self.imageView.center = location;

139     }];

140 }

141 

142 /* 识别翻转 */

143 - (void)handleRotation:(UIRotationGestureRecognizer *)gestureRecognizer {

144     

145     CGPoint location = [gestureRecognizer locationInView:self.view];

146     

147     CGAffineTransform transform = CGAffineTransformMakeRotation([gestureRecognizer rotation]);

148     self.imageView.transform = transform;

149     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:nil];

150     

151     if (([gestureRecognizer state] == UIGestureRecognizerStateEnded) || ([gestureRecognizer state] == UIGestureRecognizerStateCancelled)) {

152         [UIView animateWithDuration:0.5 animations:^{

153             self.imageView.alpha = 0.0;

154             self.imageView.transform = CGAffineTransformIdentity;

155         }];

156     }

157 

158 }

159 

160 /* 识别拖动 */

161 - (void)handlePan:(UIPanGestureRecognizer *)gestureRecognizer {

162     CGPoint location = [gestureRecognizer locationInView:self.view];

163     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:nil];

164     //gestureRecognizer.view.center = CGPointMake(gestureRecognizer.view.center.x + location.x, gestureRecognizer.view.center.y + location.y);

165     [gestureRecognizer setTranslation:location inView:self.view];

166 }

167 

168 /* 识别放大缩小 */

169 - (void)handlePinch:(UIPinchGestureRecognizer *)gestureRecognizer {

170     CGPoint location = [gestureRecognizer locationInView:self.view];

171     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:nil];

172     gestureRecognizer.view.transform = CGAffineTransformScale(gestureRecognizer.view.transform, gestureRecognizer.scale, gestureRecognizer.scale);  

173     gestureRecognizer.scale = 1;

174 }

175 

176 /* 识别长按 */

177 - (void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer {

178     CGPoint location = [gestureRecognizer locationInView:self.view];

179     [self drawImageForGestureRecognizer:gestureRecognizer atPoint:location underAdditionalSituation:nil];

180     

181 }

182 #pragma mark -

183 #pragma mark Drawing the image view

184 

185 /*

186  Set the appropriate image for the image view for the given gesture recognizer, move the image view to the given point, then dispay the image view by setting its alpha to 1.0.

187  */

188 - (void)drawImageForGestureRecognizer:(UIGestureRecognizer *)recognizer

189 atPoint:(CGPoint)centerPoint underAdditionalSituation:(NSString *)addtionalSituation{

190     

191     NSString *imageName;

192     

193     if ([recognizer isMemberOfClass:[UITapGestureRecognizer class]]) {

194         if ([addtionalSituation isEqualToString:@"singleTap"]) {

195             imageName = @"tap.gif";

196         }

197         else if ([addtionalSituation isEqualToString:@"doubleTap"]){

198             imageName = @"tap2.gif";

199         }

200         else if ([addtionalSituation isEqualToString:@"twoFingerTap"]){

201             imageName = @"twoFingerTap.gif";

202         }

203         else{

204             imageName = @"error.png";

205         }

206     }

207     else if ([recognizer isMemberOfClass:[UIRotationGestureRecognizer class]]) {

208         imageName = @"rotation.gif";

209     }

210     else if ([recognizer isMemberOfClass:[UISwipeGestureRecognizer class]]) {

211         imageName = @"swipe.gif";

212     }

213     else if ([recognizer isMemberOfClass:[UIPinchGestureRecognizer class]]) {

214         imageName = @"pinch.gif";

215     }

216     else if ([recognizer isMemberOfClass:[UIPanGestureRecognizer class]]) {

217         imageName = @"pan.gif";

218     }

219     else if ([recognizer isMemberOfClass:[UILongPressGestureRecognizer class]]) {

220         imageName = @"longPress.gif";

221     }

222     else {

223         imageName = @"error.png";

224     }

225     

226     self.imageView.image = [UIImage imageNamed:imageName];

227     self.imageView.center = centerPoint;

228     self.imageView.alpha = 1.0;

229 }

230 @end

 

你可能感兴趣的:(ios)