iOS手势

作者: 小星星灬 | 来源:发表于2017-08-22 15:23 被阅读25次

    七种手势,下面就是我的项目中写的,直接往ViewController.m里粘贴就行了,可以自己看运行结果。


    //

    //  ViewController.m

    //  手势

    //

    //  Created by zxx on 16-7-27.

    //  Copyright (c) 2016年 123. All rights reserved.

    //

    #import "ViewController.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //一个控件可以绑定多个手势,但有些时候手势会右冲突。比如点击一次和点击二次

    //手势 苹果封装好的一些事件类型,方便我们进行不同事件的处理

    //Gesture手势    Recognizer识别

    //UIGestureRecognizer手势父类是一个抽象类,需要子类完成一些功能

    //    UITapGestureRecognizer;点击手势

    //    UIPanGestureRecognizer;滑动

    //    UIRotationGestureRecognizer;旋转

    //    UIPinchGestureRecognizer;缩放

    //    UILongPressGestureRecognizer;长按

    //    UIScreenEdgePanGestureRecognizer;边缘滑动

    //    UISwipeGestureRecognizer;轻扫

    //可以给指定的控件添加手势,而不像touchbegan 事件的处理方式

    UIView *bgView=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 150, 200)];

    bgView.backgroundColor=[UIColor redColor];

    [self.view addSubview:bgView];

    //点击手势

    //创建点击手势并且绑定触发事件

    UITapGestureRecognizer *tapgestureRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGesture:)];

    //双击事件  连点2次

    //tapgestureRecognizer.numberOfTapsRequired=2;

    //触摸手指的个数

    //tapgestureRecognizer.numberOfTouchesRequired=2;

    //给bgView添加手势对象

    [bgView addGestureRecognizer:tapgestureRecognizer];

    //双击

    UITapGestureRecognizer *tapgestureRecognizer2=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGesture2:)];

    tapgestureRecognizer2.numberOfTapsRequired=2;

    [bgView addGestureRecognizer:tapgestureRecognizer2];

    //单击 等待双击失败 才执行

    [tapgestureRecognizer requireGestureRecognizerToFail:tapgestureRecognizer2];

    //滑动手势 手指一直在屏幕上触摸移动

    UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGesture:)];

    [bgView addGestureRecognizer:panGesture];

    //旋转手势

    UIRotationGestureRecognizer *rotationGesture=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGesture:)];

    [bgView addGestureRecognizer:rotationGesture];

    //缩放

    UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGesture:)];

    [bgView addGestureRecognizer:pinchGesture];

    //长按

    UILongPressGestureRecognizer *longGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longGesture:)];

    [bgView addGestureRecognizer:longGesture];

    //边缘滑动

    UIScreenEdgePanGestureRecognizer *screenGesture=[[UIScreenEdgePanGestureRecognizer alloc]initWithTarget:self action:@selector(screenGesture:)];

    screenGesture.edges=UIRectEdgeLeft;

    [self.view addGestureRecognizer:screenGesture];

    //轻扫

    UISwipeGestureRecognizer *swipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGesture:)];

    //默认往右轻扫

    swipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;

    [bgView addGestureRecognizer:swipeGesture];

    }

    //所有事件都有状态 比如:开始 变化 结束 失败

    /*

    UIGestureRecognizerStatePossible, 默认状态:手势在未识别时的状态

    UIGestureRecognizerStateBegan,    开始:手势触发时

    UIGestureRecognizerStateChanged,  改变:手势变化时

    UIGestureRecognizerStateEnded,    结束

    UIGestureRecognizerStateCancelled,取消

    UIGestureRecognizerStateFailed,  失败

    */

    #pragma mark- 点击手势

    - (void)tapGesture:(UITapGestureRecognizer *)tapGesture{

    NSLog(@"点击手势");

    }

    - (void)tapGesture2:(UITapGestureRecognizer *)tapGesture2{

    NSLog(@"点击2次");

    }

    #pragma mark- 滑动手势

    - (void)panGesture:(UIPanGestureRecognizer *)panGesture{

    //NSLog(@"滑动手势");

    switch (panGesture.state) {

    case UIGestureRecognizerStatePossible:

    NSLog(@"默认状态:手势在未识别时的状态");

    break;

    case UIGestureRecognizerStateBegan:

    NSLog(@"滑动开始");

    break;

    case UIGestureRecognizerStateChanged:

    {

    NSLog(@"滑动进行中");

    //获得添加手势的对象

    //panGesture.view

    //获得滑动的距离  包含x,y移动的距离

    //NO1:添加移动的视图

    CGPoint point=[panGesture translationInView:panGesture.view];

    NSLog(@"---%@",NSStringFromCGPoint(point));

    //CGRectOffset是以视图的原点为起始移动,dx x移动,dy y移动

    panGesture.view.frame=CGRectOffset(panGesture.view.frame, point.x, point.y);

    //清空每次移动的距离 因为每次移动,它的距离会累加

    [panGesture setTranslation:CGPointZero inView:panGesture.view];

    }

    break;

    case UIGestureRecognizerStateEnded:

    NSLog(@"滑动结束");

    break;

    default:

    break;

    }

    }

    #pragma mark- 旋转手势

    - (void)rotationGesture:(UIRotationGestureRecognizer *)rotationGesture{

    switch (rotationGesture.state) {

    case UIGestureRecognizerStateBegan:

    break;

    case UIGestureRecognizerStateChanged:

    rotationGesture.view.transform=CGAffineTransformMakeRotation(rotationGesture.rotation);

    break;

    case UIGestureRecognizerStateEnded:

    //回到初始的位置

    rotationGesture.view.transform=CGAffineTransformIdentity;

    break;

    default:

    break;

    }

    }

    #pragma mark- 缩放手势

    - (void)pinchGesture:(UIPinchGestureRecognizer *)pinchGesture{

    switch (pinchGesture.state) {

    case UIGestureRecognizerStateBegan:

    break;

    case UIGestureRecognizerStateChanged:

    {

    //起始的缩放比例

    CGFloat scale=pinchGesture.scale;

    //比例缩放后的宽度和高度

    CGFloat height=pinchGesture.view.frame.size.height*(1-scale);

    CGFloat width=pinchGesture.view.frame.size.width*(1-scale);

    //根据视图的中心点缩放

    pinchGesture.view.frame=CGRectInset(pinchGesture.view.frame, width/2, height/2);

    //比例的缩放也要回到初始

    pinchGesture.scale=1.0;

    }

    break;

    case UIGestureRecognizerStateEnded:

    break;

    default:

    break;

    }

    }

    #pragma mark- 长按手势

    - (void)longGesture:(UILongPressGestureRecognizer *)longGesture{

    NSLog(@"长按");

    }

    #pragma mark- 边缘滑动

    - (void)screenGesture:(UIScreenEdgePanGestureRecognizer *)screenGesture{

    NSLog(@"边缘滑动");

    }

    #pragma mark- 轻扫

    - (void)swipeGesture:(UISwipeGestureRecognizer *)swipeGesture{

    NSLog(@"轻扫");

    }

    @end

    相关文章

      网友评论

          本文标题:iOS手势

          本文链接:https://www.haomeiwen.com/subject/bbjldxtx.html