IOS 手势学习(点击,长按,轻扫,拖拽,旋转,捏合缩放)

原创 2015年07月09日 16:03:54

IOS 手势学习(点击,长按,轻扫,拖拽,旋转,捏合缩放)


点击        UITapGestureRecognizer

长按        UILongPressGestureRecognizer

轻扫        UISwipeGestureRecognizer

拖拽        UIPanGestureRecognizer

旋转        UIRotationGestureRecognizer

捏合缩放 UIPinchGestureRecognizer



详细代码如下:


#import "ViewController.h"

@interface ViewController () <UIGestureRecognizerDelegate>
{
    UIView * _view;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //创建视图
    _view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
    _view.backgroundColor=[UIColor blueColor];
    _view.center=self.view.center;
    [self.view addSubview:_view];
    
    
//点击
    UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClick)];
    
    //当前需要点击次数
    tap.numberOfTapsRequired=2;
    //[tap setNumberOfTapsRequired:2];    //同上
    
    //设置当前出发时间需要的手指数
    tap.numberOfTouchesRequired=2;   // option键  模拟手指
    //[tap setNumberOfTouchesRequired:2];   //同上
    
    [_view addGestureRecognizer:tap];
    
//长按
    UILongPressGestureRecognizer * longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressClick)];
    
    //在长按过程中移动10个单位也算长按
    longPress.allowableMovement=10;
    //[longPress setAllowableMovement:10];     //同上
    
    //长按的最短时间
    longPress.minimumPressDuration=2;
    [_view addGestureRecognizer:longPress];
    
    
    
//轻扫
    UISwipeGestureRecognizer * swipe=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction)];
    
    //往右边的方向 ——>
    swipe.direction=UISwipeGestureRecognizerDirectionRight;
    [_view addGestureRecognizer:swipe];
   
    
//轻扫
    UISwipeGestureRecognizer * swipe2=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction2)];
    
    //往左边的方向 <——
    swipe2.direction=UISwipeGestureRecognizerDirectionLeft;
    [_view addGestureRecognizer:swipe2];
    
//轻扫
    UISwipeGestureRecognizer * swipe3=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction3)];
    
    //往上边的方向 ⬆️
    swipe3.direction=UISwipeGestureRecognizerDirectionUp;
    [_view addGestureRecognizer:swipe3];
    
    
//轻扫
    UISwipeGestureRecognizer * swipe4=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction4)];
    
    //往下边的方向 ⬇️
    swipe4.direction=UISwipeGestureRecognizerDirectionDown;
    [_view addGestureRecognizer:swipe4];
    
//拖拽
    UIPanGestureRecognizer * pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    
    [_view addGestureRecognizer:pan];
    
    
//旋转
    UIRotationGestureRecognizer * rotation=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotation:)];
    rotation.delegate=self;
    [_view addGestureRecognizer:rotation];
    
    
//捏合缩放
    UIPinchGestureRecognizer * pinch=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinch:)];
    pinch.delegate=self;
    [_view addGestureRecognizer:pinch];
   
}


#pragma mark - 点击
- (void) tapClick
{
    NSLog(@"点击");
}
#pragma mark - 长按
- (void)longPressClick
{
    NSLog(@"长按");
}

#pragma mark - 向右滑
- (void) swipeAction
{
    NSLog(@"right");
}
#pragma mark - 向左滑
- (void) swipeAction2
{
    NSLog(@"left");
}
#pragma mark - 向上滑
- (void) swipeAction3
{
    NSLog(@"up");
}
#pragma mark - 向下滑
- (void) swipeAction4
{
    NSLog(@"down");
}

#pragma mark - 拖拽移动
- (void) panAction:(UIPanGestureRecognizer *) pan
{
    //获取移动的大小
    CGPoint point=[pan translationInView:pan.view];
    
    //更改视图的中心点坐标
    CGPoint points=_view.center;
    points.x+=point.x;
    points.y+=point.y;
    _view.center=points;
    
    //每次都清空一下,消除坐标叠加
    [pan setTranslation:CGPointZero inView:pan.view];
}

#pragma mark - 旋转
- (void) rotation:(UIRotationGestureRecognizer *) rote
{
    //获取当前旋转的度数
    CGFloat rotation=rote.rotation;
    
    //通过仿射变换实现旋转
    _view.transform=CGAffineTransformRotate(_view.transform, rotation);
    //防止旋转叠加,清零
    rote.rotation=0;
    
}

#pragma mark - 缩放捏合
- (void) pinch:(UIPinchGestureRecognizer *) pinch
{
    //获取比例
    CGFloat scale=pinch.scale;
    
    //通过仿射变换实现缩放
    _view.transform=CGAffineTransformScale(_view.transform, scale, scale);
    
    //防止比例叠加
    pinch.scale=1;
    
    
}

#pragma mark - 代理方法实现旋转 + 缩放捏合 可同时进行
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end



需要注意点:

                    1.键盘上的option键模拟手指


             2.对同一个view来说,拖拽时,向左向右向上向下的手势失效。


相关文章推荐

iOS自定义长按手势,随意拖动Cell

iOS自定义长按手势,随意拖动Cell起因 最近在做一个项目,要对UITableViewCell进行拖动蹂躏,具体效果如下: 本来打算用UIRespon这几个方法来做,最后发现在UITableView...

IOS 实现Button长按放大 并且可以移动互换位置

IOS 实现Button长按放大 并且可以移动互换位置

iOS开发——手势识别器(用手势实现图片旋转和缩小放大)

iOS开发中,除了有关触摸的这组方法来控制用户的手指触控外,还可以用UIGestureRecognize的衍生类来进行判断,方便了开发。 UIGestureRecognize的子类类别有以下几种: ...

iOS 常用Category类别分享

iOS 常用Category类别分享 字数1340 阅读86 评论2 喜欢8 前言      各位都知道,类别是一种为现有的类添加新方法的方式,利用Objective-C的动态运...

PNChart iOS图表类第三方

1. 导入 1.1 pod导入相对简单,要手动导入这个库,先下载下来(https://github.com/kevinzhow/PNChart),解压后把PNChart文件夹拖入工程中 1.2 运行,...

iOS 手势的使用 六个手势 轻拍 长按 拖拽 捏合 轻扫 旋转

手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性。 iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类。...

IOS Gesture手势(点击、捏合、滑动、长按、旋转、拖动)

ViewController.h // //  ViewController.h //  GestureTest // //  Created by admin on 14-4-9. //...

常用手势(敲击)(拖拽)(长按)(轻扫)(捏合)(选转)

/***************************************************** * * 一、使用手势时,一定要开启 !!!!!!!!!!!!!!!! * 1 ....

iOS开发手势---拖动、捏合、旋转、点按、长按、轻扫

1、UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性。 iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestu...
  • iOSbird
  • iOSbird
  • 2016年03月02日 10:20
  • 461

iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义

1、UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性。 iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS 手势学习(点击,长按,轻扫,拖拽,旋转,捏合缩放)
举报原因:
原因补充:

(最多只允许输入30个字)