IOS 的 7 中手势的介绍 和详细使用(UIGestureRecognizer) UIScreenEdgePanGestureRecognizer

           在IOS的开发中,手势也是一个常常使用的,在上几年面试的时候,也会问到关于手势的问题。 IOS 开发有多少手势呢? 开发一共有 6 中手势(不包含,其他衍生手势 例如:UIScreenEdgePanGestureRecognizer 他们都是集成与 UIGestureRecognizer


第一步:效果图。



第二部:我们做变量和宏的定义。

//

//  Variable.h

//  Gesture_All

//

//  Created by 周双建 on 15/12/25.

//  Copyright © 2015 周双建. All rights reserved.

//


#define USERINTERACTION  YES

// 使用枚举

typedef enum {

    Tap = 0,

    Pan,

    Pin,

    Swip,

    LPG,

    Rota

} Which_Gesture;


#define ALERT  UIAlertController * Alerat_C = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"你敢戳我" preferredStyle:UIAlertControllerStyleAlert];\

UIAlertAction * Action = [UIAlertAction actionWithTitle:@"干掉你" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {\

    [Alerat_C dismissViewControllerAnimated:YES completion:nil];\

}];\

[Alerat_C addAction:Action];\

[self presentViewController:Alerat_C animated:YES completion:nil];



#define ALERT_DisMiss(Message) \

UIAlertController * Alerat_C = [UIAlertController alertControllerWithTitle:@"温馨提示" message:Message preferredStyle:UIAlertControllerStyleAlert];\

[self presentViewController:Alerat_C animated:YES completion:^{\

    dispatch_after(2, dispatch_get_main_queue(), ^{\

        [Alerat_C dismissViewControllerAnimated:YES completion:nil];\

    });\

}];


第三步:我们看代码。 代码共202行。

/* IOS 的手势集合和详细使用》*/

/*  

 *   IOS的开发中,手势也是一个常常使用的,在上几年面试的时候,也会问到关于手势的问题。

 *   IOS 开发有多少手势呢? 开发一共有 6 中手势(不包含,其他衍生手势 例如:UIScreenEdgePanGestureRecognizer 他们都是集成与 UIGestureRecognizer,分别是:

 *

 *   UITapGestureRecognizer    是单击(或者说是轻击手势)

 *

 *   UIPanGestureRecognizer    是拖拽手势

 *

 *   UIPinchGestureRecognizer  是捏合手势

 *

 *   UISwipeGestureRecognizer  是轻扫手势

 *

 *   UILongPressGestureRecognizer  是长安手势

 *

 *   UIRotationGestureRecognizer 是旋转手势

 *

 */

//  Created by 周双建 on 15/12/25.

//  Copyright © 2015 周双建. All rights reserved.

//


#import "ViewController.h"

#import "Variable.h"

// 设置所有手势的代理

@interface ViewController ()<UIGestureRecognizerDelegate>

//声明主要控件

@property(nonatomic,strong) UIImageView * Root_IMV;

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // 今天我们的主角是一个ImageView,初始化

    self.Root_IMV = [[UIImageView alloc]initWithFrame:CGRectMake(self.view.center.x-200, self.view.center.y-200, 400, 400)];

    //打开交互

    self.Root_IMV.userInteractionEnabled = USERINTERACTION;

    // 给主角添加,美化、

    self.Root_IMV.image = [UIImage imageNamed:@"u=3883044849,3921323255&fm=21&gp=0.jpg"];

    // 对图片简单处理

    self.Root_IMV.contentMode = UIViewContentModeScaleAspectFit;

    // 显示出来

    [self.view addSubview:_Root_IMV];

    // 开始添加手势

    [self start];

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

}

-(void)start{

    // 轻击手势 ,创建和初始化

    /*

     * UITapGestureRecognizer的其他参数

     *

     *  numberOfTapsRequired   是设置你连续点击几次,在发起响应(这个无论你允许几个手指点击)

     *

     *  numberOfTouchesRequired 是设置几个手指去点击才能响应

     *

     */

    UITapGestureRecognizer *  TapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(TapGestureRecognizerClick:)];

    // 设置连续点击几次,在发起响应

    TapGestureRecognizer.numberOfTapsRequired = 2 ;

    // 这个是设置几个手指去点击,才能发起响应 注意:模拟器不能检测手指数(电脑的触控板)

    TapGestureRecognizer.numberOfTouchesRequired = 1;

    // 将手势添加到图片上

    [_Root_IMV addGestureRecognizer:TapGestureRecognizer];

    

 /*************************************************************************/

    /*

     *

     * UIPanGestureRecognizer 参数和方法的介绍

     *

     * minimumNumberOfTouches 设置最少使用手指的个数 进行拖拽

     *

     * maximumNumberOfTouches 设置最大使用手指的个数 进行拖拽

     *

     *

     *

     */

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

    // 最少,手指数

    PanGestureRecognizer.minimumNumberOfTouches = 2;

    // 最多,手指数

    PanGestureRecognizer.maximumNumberOfTouches = 3;

    // 添加到主角上

    [_Root_IMV addGestureRecognizer:PanGestureRecognizer];

    

 /************************************************************************/

    /*

     *   direction  是设置你轻扫的方向

     */

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

    // 方向不设置,默认是向右

    SwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;

    [_Root_IMV addGestureRecognizer:SwipeGestureRecognizer];

    

    

 /************************************************************************/

    /*

     *  minimumPressDuration 设置你长按的最小时间

     *  allowableMovement    这是当长按时间 达到最小时间后,必须在移动15像素才能出发事件

     */

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

    // 设置长按的最小时间

    LongPressGestureRecognizer.minimumPressDuration = 3;

    // 这是当长按时间 达到最小时间后,必须在移动15像素才能出发事件 (默认 10

    LongPressGestureRecognizer.allowableMovement = 15;

    // 添加手势

    [_Root_IMV addGestureRecognizer:LongPressGestureRecognizer];

    

 /***************************************************************************/

    /*

     *  velocity  旋转的速度

     *

     *  rotation  旋转的角度

     *

     */

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

    [_Root_IMV addGestureRecognizer:RotationGestureRecognizer];

    

 /****************************************************************************/

    /*

     * scale 捏合放大的比例

     *

     * velocity  捏合速度

     */

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

    [_Root_IMV addGestureRecognizer:PinchGestureRecognizer];

    

    

    

 /*****************************************************************/

    // 还可以设置手势的响应顺序

    [PanGestureRecognizer requireGestureRecognizerToFail:SwipeGestureRecognizer];

    /*SwipeGestureRecognizer 必须失败后,PanGestureRecognizer 才能触发  */

}

// 实现轻击手势的响应

-(void)TapGestureRecognizerClick:(UITapGestureRecognizer*)Tap{

    ALERT;

}

// 实现拖拽的手势

-(void)PanGestureRecognizerClick:(UIPanGestureRecognizer*)Pan{

    

    CGPoint   P = [Pan translationInView:_Root_IMV];

    // translationInView 我做个解释

    /*

     * translationInView 是获取你拖拽的以你开始拖拽点为坐标圆点的点。

     * 它将以你开始拖拽点为原点,将可触动的区域划分为四个象限。 (坐标的正负和数学相同)

     */

    /*

     * Pan.view.center 是你开始可触动区域的中心点。(是以控制器为坐标圆点)

     *

     */

    CGFloat x = Pan.view.center.x + P.x;

    CGFloat y = Pan.view.center.y + P.y;

    // 计算出,拖拽后的中心点 (注意:坐标圆点)

    Pan.view.center = CGPointMake(x, y);

    // 设置拖拽后,结束点,否者对象已经跑道很远的地方了

    [Pan setTranslation:CGPointMake(0, 0) inView:_Root_IMV];

}

// 轻扫手势

-(void)SwipeGestureRecognizerClick:(UISwipeGestureRecognizer*)Swip{

    ALERT_DisMiss(Swip.description);

}

// 长按手势

-(void)LongPressGestureRecognizerClick:(UILongPressGestureRecognizer*)LPG{

    ALERT_DisMiss(@"压死宝宝了");

}

// 旋转手势

-(void)RotationGestureRecognizerClick:(UIRotationGestureRecognizer*)Rotation{

    

    ALERT_DisMiss(@"转起来");

    CGAffineTransform   Transform = CGAffineTransformMakeRotation(Rotation.rotation);

    _Root_IMV.transform = Transform;

}

// 捏合手势

-(void)PinchGestureRecognizerClick:(UIPinchGestureRecognizer*)pin{

    

    ALERT_DisMiss(@"我变大");

    CGAffineTransform   Transform = CGAffineTransformMakeScale(pin.scale, pin.scale);

    _Root_IMV.transform = Transform;

}

/****************************************************************************/

// 代理方法

// 是否允许当前手势失败,另一个手势响应

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    return YES;

}

// 手势开始之前就获得手势

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

    return YES;

}


//允许多个手势响应

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    return YES;

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值