iOS手势事件

什么是手势?

用过苹果手机的朋友都知道,我们的屏幕上有个"小圆点","小圆点"当你对它做出不同动作的时候会有不同的响应事件,拖拽平移来移动它的位置,点击实现各种按键功能的实现,这样大大为用户提供了便利,并且可以有效地保护按键.

那么类似这种手势事件在我们的开发中是怎么实现的?

UIGestureRecognizer

UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,我们在开发中使用的是UIGestureRecognizer的子类:
UITapGestureRecognizer

    UIPinchGestureRecognizer

    UIRotationGestureRecognizer

    UISwipeGestureRecognizer

    UIPanGestureRecognizer

    UILongPressGestureRecognizer

见名知意,Tap(轻拍),Pinch(捏合),Rotation(旋转),Swipe(滑动,快速移动,是用于监测滑动的方向的),Pan(拖移,慢速移动,是用于监测偏移的量的),以及LongPress(长按)

下面来介绍一下这些手势最基本的使用方法:

@interface RootViewController ()
@property(nonatomic,strong)UIView *greenView;

@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];

self.view.backgroundColor =[ UIColor whiteColor];
    
    self.greenView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    _greenView.backgroundColor = [UIColor greenColor];
    [self.view addSubview:_greenView];
    
#pragma mark ---tap手势
    
    //创建手势,并初始化,使用initWithTarget: action:方法创建
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapView:)];
    
    //设置属性
    tap.numberOfTapsRequired = 2;//次数
    tap.numberOfTouchesRequired = 2;//手指数
    
    //添加到视图上
//    [_greenView addGestureRecognizer:tap];
    
#pragma mark ----swipe手势
    
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeView:)];
    //属性
    swipe.direction = 0;
    
    
//    [_greenView addGestureRecognizer:swipe];
    
#pragma mark ----longPress手势
    
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressView:)];
    
    longPress.minimumPressDuration = 2;
    
//    [_greenView addGestureRecognizer:longPress];
    
#pragma mark ----- pan平移手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
//    [_greenView addGestureRecognizer:pan];
    
    #pragma mark  ----- pinch捏合手势
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
//    [_greenView addGestureRecognizer:pinch];
    
#pragma mark ----- Rotation旋转手势
    
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationView:)];
//    [_greenView addGestureRecognizer:rotation];

}

//旋转手势事件
-(void)rotationView:(UIRotationGestureRecognizer *)sender{
    
    //rotation 旋转角度
    
    sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);
    
    //清除增量
    sender.rotation = 0.0;
    
}

//平移手势事件
-(void)panView:(UIPanGestureRecognizer *)sender{
    
    CGPoint point = [sender translationInView:_greenView];
//    sender.view.transform = CGAffineTransformMake(1, 0, 0, 1, point.x, point.y);
    
    //每次移动都是从原来的位置移动
//    sender.view.transform = CGAffineTransformMakeTranslation(point.x, point.y);
    
    //以上次的位置为标准
    sender.view.transform = CGAffineTransformTranslate(sender.view.transform, point.x, point.y);
    //增量置为0
    [sender setTranslation:CGPointZero inView:_greenView];
}

//长按手势事件
-(void)longPressView:(UILongPressGestureRecognizer *)sender{
    
    
    if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"长按状态!");
    }    
    
}

//捏合手势事件
-(void)pinchView:(UIPinchGestureRecognizer *)sender{
    
    //以上一次所方位标准
    sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
    
    //重新设置缩放比例,1是正常缩放,小于1是缩小,大于1是放大
    sender.scale = 1;
}


-(void)swipeView:(UISwipeGestureRecognizer *)sender{
    //randomColor是自己写的一个UIColor的类目方法(随机色)
    _greenView.backgroundColor = [UIColor randomColor];
}

-(void)tapView:(UITapGestureRecognizer *)sender{
    
    _greenView.backgroundColor = [UIColor randomColor];
}

这就是开发中最基本的手势用法,大家都会了吗?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容