首页 > 系统 > iOS > 正文

iOS手势的实现方法

2020-07-26 02:53:57
字体:
来源:转载
供稿:网友

本文实例为大家分享了iOS手势的具体实现代码,供大家参考,具体内容如下

效果

细节

1.UITouch

#import "ViewController_0.h"@interface ViewController_0 ()@property (nonatomic, strong)UILabel *label;@end@implementation ViewController_0- (void)viewDidLoad {    [super viewDidLoad];    self.label          = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];  self.label.backgroundColor  = [UIColor yellowColor];  self.label.layer.borderWidth = 1;  [self.view addSubview:self.label];    UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];  textlabel.text   = @"拖动方块";  [textlabel sizeToFit];  textlabel.font   = [UIFont systemFontOfSize:12];  [self.view addSubview:textlabel];}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {  //1.拿到手势  UITouch *touch = [touches anyObject];    //2.拿到touch 所在view的坐标  CGPoint point = [touch locationInView:self.view];    //3.让label拿到坐标  self.label.center = point;    NSLog(@"1.手指接触到了屏幕");}- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {  //1.拿到手势  UITouch *touch = [touches anyObject];    //2.拿到touch 所在view的坐标  CGPoint point = [touch locationInView:self.view];    //3.让label拿到坐标  self.label.center = point;    NSLog(@"2.手指在屏幕上移动");}- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {   NSLog(@"3.手指刚离开屏幕");}- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {  NSLog(@"4.手势失效了");}@end

2.UITapGestureRecognizer

#import "ViewController_1.h"@interface ViewController_1 ()@property (nonatomic, strong) UILabel *label;@end@implementation ViewController_1- (void)viewDidLoad {    [super viewDidLoad];  UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];  textlabel.text   = @"电脑上操作tap手势 alt +shift 需要连续点击次数2次";  [textlabel sizeToFit];  textlabel.font   = [UIFont systemFontOfSize:12];  [self.view addSubview:textlabel];    self.label            = [[UILabel alloc] initWithFrame:CGRectMake(100, 150, 100, 100)];  self.label.backgroundColor    = [UIColor orangeColor];  self.label.userInteractionEnabled = YES;  self.label.text          = @"0";  self.label.textAlignment     = NSTextAlignmentCenter;  [self.view addSubview:self.label];    // 1.创建tap手势  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap:)];  tap.numberOfTapsRequired  = 2; //需要轻轻点击的次数  tap.numberOfTouchesRequired = 2;//需要的手指数量 :2根手指alt +shift 需要匹配点击次数2次(其实直接用默认的就好)  [self.label addGestureRecognizer:tap];}- (void)labelTap:(UITapGestureRecognizer *)tap {  int num = [self.label.text intValue];  num++;  self.label.text = [NSString stringWithFormat:@"%d",num ];}@end

3.UILongPressGestureRecognizer

#import "ViewController_2.h"@interface ViewController_2 () <UIGestureRecognizerDelegate>@property (nonatomic, strong) UILabel *label;@end@implementation ViewController_2- (void)viewDidLoad {    [super viewDidLoad];    UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];  textlabel.text   = @"long长按手势";  [textlabel sizeToFit];  textlabel.font   = [UIFont systemFontOfSize:12];  [self.view addSubview:textlabel];    self.label            = [[UILabel alloc] initWithFrame:CGRectMake(40, 150, 200, 150)];  self.label.backgroundColor    = [UIColor grayColor];  self.label.userInteractionEnabled = YES;  self.label.text          = @"0";  self.label.textAlignment     = NSTextAlignmentCenter;  [self.view addSubview:self.label];    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];  longPress.numberOfTapsRequired     = 1;  longPress.numberOfTouchesRequired    = 1;  longPress.minimumPressDuration     = 1.0;  longPress.delegate  = self;  [self.label addGestureRecognizer:longPress];}- (void)longPressAction:(UILongPressGestureRecognizer *)longPress {  if(longPress.state == UIGestureRecognizerStateBegan) {        NSLog(@"手势状态开始");      } else if(longPress.state == UIGestureRecognizerStateEnded) {        NSLog(@"手势状态结束");    } else if(longPress.state == UIGestureRecognizerStateChanged) {        NSLog(@"手势状态改变");        NSInteger num = [self.label.text integerValue];    num ++;    self.label.text = [NSString stringWithFormat:@"%ld",(long)num];  }}@end 

4.UISwipeGestureRecognizer

#import "ViewController_3.h"@interface ViewController_3 ()@property (nonatomic, strong) UILabel *label;@end@implementation ViewController_3- (void)viewDidLoad {    [super viewDidLoad];   UILabel *textlabel   = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];  textlabel.text     = @"swipe手势 向右滑动➕1,你也可以设置左划上划下划";  textlabel.numberOfLines = 0;  textlabel.font     = [UIFont systemFontOfSize:12];  [self.view addSubview:textlabel];    self.label            = [[UILabel alloc] initWithFrame:CGRectMake(100, 150, 100, 100)];  self.label.backgroundColor    = [UIColor grayColor];  self.label.userInteractionEnabled = YES;  self.label.text          = @"0";  self.label.textAlignment     = NSTextAlignmentCenter;  [self.view addSubview:self.label];  UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];  swipeGesture.direction         = UISwipeGestureRecognizerDirectionRight;//默认就是向右划  [self.label addGestureRecognizer:swipeGesture];}-(void)swipeAction:(UISwipeGestureRecognizer *)swipe {  if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {        NSLog(@"现在响应左划手势");      } else if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {        NSLog(@"现在响应右划手势");        NSInteger num  = [self.label.text integerValue];    num ++;    self.label.text = [NSString stringWithFormat:@"%ld",(long)num];      } else if (swipe.direction == UISwipeGestureRecognizerDirectionUp) {        NSLog(@"现在响应上划手势");      } else if (swipe.direction == UISwipeGestureRecognizerDirectionDown) {        NSLog(@"现在响应下划手势");  }}@end

 5.UIPanGestureRecognizer

#import "ViewController_4.h"@interface ViewController_4 ()@property (nonatomic, strong) UILabel *label;@end@implementation ViewController_4- (void)viewDidLoad {    [super viewDidLoad];    UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];  textlabel.text   = @"pan手势,拖动方块";  [textlabel sizeToFit];  textlabel.font   = [UIFont systemFontOfSize:12];  [self.view addSubview:textlabel];  self.label            = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];  self.label.backgroundColor    = [UIColor grayColor];  self.label.userInteractionEnabled = YES;  self.label.text          = @"0";  self.label.textAlignment     = NSTextAlignmentCenter;  [self.view addSubview:self.label];  UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];  [self.label addGestureRecognizer:pan];}- (void)panAction:(UIPanGestureRecognizer *)pan {    CGPoint offset  = [pan locationInView:self.view];  self.label.center = offset;}@end

6.UIRotationGestureRecognizer

#import "ViewController_5.h"@interface ViewController_5 ()@property (nonatomic, strong) UILabel *label;@end@implementation ViewController_5- (void)viewDidLoad {    [super viewDidLoad];    UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];  textlabel.text   = @"模拟器测试旋转手势时,按住 option键,再用触摸板或鼠标操作";  textlabel.font   = [UIFont systemFontOfSize:12];  textlabel.numberOfLines = 0;  [self.view addSubview:textlabel];  self.label            = [[UILabel alloc] initWithFrame:CGRectMake(40, 200, 200, 50)];  self.label.backgroundColor    = [UIColor grayColor];  self.label.userInteractionEnabled = YES;  self.label.text          = @"we are friends";  self.label.textAlignment     = NSTextAlignmentCenter;  [self.view addSubview:self.label];    //(模拟器测试捏合和旋转手势时,按住 option 键,再用触摸板或鼠标操作)  UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];  [self.view addGestureRecognizer:rotation];}- (void)rotationAction:(UIRotationGestureRecognizer *)rotation {    self.label.transform = CGAffineTransformRotate(self.label.transform, rotation.rotation);  rotation.rotation = 0; // 这个很重要!!!!!//  static float orginState;//  //  self.label.transform = CGAffineTransformMakeRotation(rotation.rotation + orginState);//  //  if (rotation.state == UIGestureRecognizerStateEnded) {//    //    orginState = orginState + rotation.state;//    self.label.transform = CGAffineTransformMakeRotation(rotation.rotation);//  }}@end

7.UIPinchGestureRecognizer

#import "ViewController_6.h"@interface ViewController_6 ()@property (nonatomic, strong) UILabel *label;@end@implementation ViewController_6- (void)viewDidLoad {    [super viewDidLoad];   UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];  textlabel.text   = @"模拟器测试捏合手势时,按住 option键,再用触摸板或鼠标操作";  textlabel.font   = [UIFont systemFontOfSize:12];  textlabel.numberOfLines = 0;  [self.view addSubview:textlabel];    self.label            = [[UILabel alloc] initWithFrame:CGRectMake(100, 250, 80, 80)];  self.label.backgroundColor    = [UIColor grayColor];  self.label.userInteractionEnabled = YES;  self.label.text          = @"0";  self.label.textAlignment     = NSTextAlignmentCenter;  [self.view addSubview:self.label];  //  (模拟器测试捏合和旋转手势时,按住 option 键,再用触摸板或鼠标操作)  UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pichGesture:)];  [self.view addGestureRecognizer:pinch];}- (void)pichGesture:(UIPinchGestureRecognizer *)pinch {    static float originScale = 1;    //手势缩放返回的scale 是相对于上一次的  self.label.transform = CGAffineTransformMakeScale(pinch.scale * originScale , pinch.scale*originScale);    if (pinch.state == UIGestureRecognizerStateEnded) {        originScale = originScale * pinch.scale;  }}@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表