ios 手势识别
发布日期:2021-08-31 16:58:41 浏览次数:6 分类:技术文章

本文共 9830 字,大约阅读时间需要 32 分钟。

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 view184 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 *)recognizer189 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

 

转载地址:https://blog.csdn.net/weixin_34082789/article/details/85580779 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Sharded实现学习-我们到底能走多远系列(32)
下一篇:sql server 删除主键、外键、索引、约束的脚本

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年05月06日 12时37分42秒