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

来源:互联网 发布:苹果免费打电话软件 编辑:程序博客网 时间:2024/05/16 12:39

           在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 {

    [superviewDidLoad];

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

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

    //打开交互

    self.Root_IMV.userInteractionEnabled =USERINTERACTION;

    // 给主角添加,美化、

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

    // 对图片简单处理

    self.Root_IMV.contentMode = UIViewContentModeScaleAspectFit;

    // 显示出来

    [self.viewaddSubview:_Root_IMV];

    // 开始添加手势

    [self start];

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

}

-(void)start{

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

    /*

     * UITapGestureRecognizer的其他参数

     *

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

     *

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

     *

     */

    UITapGestureRecognizer *  TapGestureRecognizer = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(TapGestureRecognizerClick:)];

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

    TapGestureRecognizer.numberOfTapsRequired =2 ;

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

    TapGestureRecognizer.numberOfTouchesRequired =1;

    // 将手势添加到图片上

    [_Root_IMV addGestureRecognizer:TapGestureRecognizer];

    

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

    /*

     *

     * UIPanGestureRecognizer 参数和方法的介绍

     *

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

     *

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

     *

     *

     *

     */

    UIPanGestureRecognizer *  PanGestureRecognizer = [[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(PanGestureRecognizerClick:)];

    // 最少,手指数

    PanGestureRecognizer.minimumNumberOfTouches =2;

    // 最多,手指数

    PanGestureRecognizer.maximumNumberOfTouches =3;

    // 添加到主角上

    [_Root_IMV addGestureRecognizer:PanGestureRecognizer];

    

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

    /*

     *   direction  是设置你轻扫的方向

     */

    UISwipeGestureRecognizer * SwipeGestureRecognizer = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(SwipeGestureRecognizerClick:)];

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

    SwipeGestureRecognizer.direction =UISwipeGestureRecognizerDirectionDown;

    [_Root_IMV addGestureRecognizer:SwipeGestureRecognizer];

    

    

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

    /*

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

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

     */

    UILongPressGestureRecognizer *  LongPressGestureRecognizer = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(LongPressGestureRecognizerClick:)];

    // 设置长按的最小时间

    LongPressGestureRecognizer.minimumPressDuration =3;

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

    LongPressGestureRecognizer.allowableMovement =15;

    // 添加手势

    [_Root_IMV addGestureRecognizer:LongPressGestureRecognizer];

    

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

    /*

     *  velocity  旋转的速度

     *

     *  rotation  旋转的角度

     *

     */

    UIRotationGestureRecognizer *  RotationGestureRecognizer = [[UIRotationGestureRecognizeralloc]initWithTarget:selfaction:@selector(RotationGestureRecognizerClick:)];

    [_Root_IMV addGestureRecognizer:RotationGestureRecognizer];

    

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

    /*

     * scale 捏合放大的比例

     *

     * velocity  捏合速度

     */

    UIPinchGestureRecognizer *  PinchGestureRecognizer = [[UIPinchGestureRecognizeralloc]initWithTarget:selfaction:@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 {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end




1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 系统b超照不到怎么办 思维彩超宝宝不动怎么办 怀孕七个月胎儿缺氧怎么办 怀孕29周小孩偏小怎么办 孕29周胎儿臀位怎么办 刚怀孕有囊肿该怎么办 食杏中毒怎么办吃什么 猫吃了扁桃仁怎么办 夏天来了??点狐臭怎么办? 我有一小点狐臭怎么办 淘客网站被微信屏蔽怎么办 微信老是屏蔽网站怎么办 华帝售后没人理怎么办 新开的网店没生意怎么办 淘小二介入买家举证不全怎么办 新股申购中签后钱不够怎么办 买的东西收不到怎么办? 拼多多按错收货怎么办 团购招生做到一半不如意怎么办 网购付款后卖家没有货怎么办 淘宝退货商家不同意退款怎么办 淘宝确认收货后卖家拒绝退款怎么办 淘宝卖家不同意退款怎么办 淘宝仅退款卖家不处理怎么办 淘宝申请退款卖家不处理怎么办 快递没收到货要退款怎么办 发票给了不给钱怎么办 付款后不给发票怎么办 供货商不给发票怎么办 刚生过孩子太胖买衣服怎么办 黑色牛仔裤洗的发白怎么办 蘑菇街手机丢了怎么办 黑衣服上全是白毛毛怎么办 支付宝注销了钱怎么办 网上买东西手机号写错了怎么办 二类工资卡过万怎么办 淘宝发货地址写错怎么办 淘宝发货地址写错了怎么办 淘宝不能代付了怎么办 支付宝付款码被盗刷怎么办 地方选举追究不到相关责任人怎么办