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来说,拖拽时,向左向右向上向下的手势失效。 
 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/3373.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论