iOS

前言

	NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIGestureRecognizer : NSObject
	@available(iOS 3.2, *)		 public class UIGestureRecognizer : NSObject

	// 点击(轻点)
	NS_CLASS_AVAILABLE_IOS(3_2)  @interface UITapGestureRecognizer : UIGestureRecognizer
	@available(iOS 3.2, *)		 public class UITapGestureRecognizer : UIGestureRecognizer

	// 长按(按住不放)
	NS_CLASS_AVAILABLE_IOS(3_2)  @interface UILongPressGestureRecognizer : UIGestureRecognizer
	@available(iOS 3.2, *)		 public class UILongPressGestureRecognizer : UIGestureRecognizer

	// 旋转(两个手指进行旋转)
	NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIRotationGestureRecognizer : UIGestureRecognizer
	@available(iOS 3.2, *)      public class UIRotationGestureRecognizer : UIGestureRecognizer

	// 捏合(两个手指,缩放手势)
	NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIPinchGestureRecognizer : UIGestureRecognizer
	@available(iOS 3.2, *)      public class UIPinchGestureRecognizer : UIGestureRecognizer

	// 拖动(移动速度较慢)
	NS_CLASS_AVAILABLE_IOS(3_2)  @interface UIPanGestureRecognizer : UIGestureRecognizer
	@available(iOS 3.2, *)		 public class UIPanGestureRecognizer : UIGestureRecognizer

	// 滑动(快速移动)
	NS_CLASS_AVAILABLE_IOS(3_2)  @interface UISwipeGestureRecognizer : UIGestureRecognizer 
	@available(iOS 3.2, *)		 public class UISwipeGestureRecognizer : UIGestureRecognizer

1、tapGesture 点击手势

1.1 tapGesture 的创建

  • Objective-C

    	// 实例化点击手势对象
     	UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self 
     	                                                                             action:@selector(tapClick:)];
        
    	// 向 imageView 添加点击手势
     	[imageView addGestureRecognizer:tapGesture];
    
  • Swift

    	// 实例化点击手势对象
    	let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, 
    	                                                               action: #selector(UiGestureRecognizer.tapClick(_:)))   
    
    	// 向 imageView 添加点击手势
    	imageView?.addGestureRecognizer(tapGesture)
    

1.2 tapGesture 的设置

  • Objective-C

    	// 设置点击次数
    	/*
    		默认为 1:单击,为 2 时为双击
    	*/
    	singleTapGesture.numberOfTapsRequired = 1;
    
    	// 设置触摸点数
    	/*
    		默认为 1,单个手指触摸
    	*/
    	singleTapGesture.numberOfTouchesRequired = 1;
    
    	// 单双击共存
    	/*
    		设置单击手势与双击手势共存,当没有检测到双击手势或检测双击手势失败时单击手势才有效
    	*/
    	[singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];
    
    	// 获取点击的视图
    	/*
    		剪取点击的视图,附带点击手势一起剪取
    	*/
    	UIView *tapView = tapGesture.view;
    
    	// 获取点击的图片
    	/*
    		复制点击的图片,附带点击手势一起复制
    	*/
    	UIImage *tapImage = ((UIImageView *)tapGesture.view).image;
    
  • Swift

    	// 设置点击次数
    	/*
    		默认为 1:单击,为 2 时为双击
    	*/
    	singleTapGesture.numberOfTapsRequired = 1
        
    	// 设置触摸点数
    	/*
    		默认为 1,单个手指触摸
    	*/
    	singleTapGesture.numberOfTouchesRequired = 1
        
    	// 单双击共存
    	/*
    		设置单击手势与双击手势共存,当没有检测到双击手势或检测双击手势失败时单击手势才有效
    	*/
    	singleTapGesture.requireGestureRecognizerToFail(doubleTapGesture)
        
    	// 获取点击的视图
    	/*
    		剪取点击的视图,附带点击手势一起剪取
    	*/
    	let tapView:UIView = tapGesture.view!
        
    	// 获取点击的图片
    	/*
    		复制点击的图片,附带点击手势一起复制
    	*/
    	let tapImage:UIImage = (tapGesture.view! as! UIImageView).image!
    

1.3 自定义触摸响应事件处理

  • Objective-C

    	- (void)tapClick:(UITapGestureRecognizer *)tapGesture {
    
    	}
    
  • Swift

    	func tapClick(tapGesture:UITapGestureRecognizer) {
    
    	}
    

2、longPressGesture 长按手势

2.1 longPressGesture 的创建

  • Objective-C

    	// 实例化长按手势对象
    	UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self 
    	                                                                                               action:@selector(longPressClick:)];
    
    	// 向 imageView 添加长按手势
    	[imageView addGestureRecognizer:longPressGesture];
    
  • Swift

    	// 实例化长按手势对象
    	let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, 
    	                                                                                 action: #selector(UiGestureRecognizer.longPressClick(_:)))
    
    	// 向 imageView 添加长按手势
    	imageView?.addGestureRecognizer(longPressGesture)
    

2.2 longPressGesture 的设置

  • Objective-C

    	// 获取手势状态
    	UIGestureRecognizerState state = longPressGesture.state;
    
    	// 长按手势开始
    	if (longPressGesture.state == UIGestureRecognizerStateBegan) {
        	
    	}
    
    	// 长按手势触发结束
    	if (longPressGesture.state == UIGestureRecognizerStateEnded) {
        	
    	}
    
  • Swift

    	// 获取手势状态
    	let state:UIGestureRecognizerState = longPressGesture.state
      	
    	// 长按手势开始
    	if longPressGesture.state == UIGestureRecognizerState.Began {
            	
    	}
        
    	// 长按手势触发结束
    	if longPressGesture.state == UIGestureRecognizerState.Ended {
            	
    	}
    

2.3 自定义触摸响应事件处理

  • Objective-C

    	- (void)longPressClick:(UILongPressGestureRecognizer *)longPressGesture {
    	
    	}
    
  • Swift

    	func longPressClick(longPressGesture:UILongPressGestureRecognizer) {
    	
    	}
    

3、rotationGesture 旋转手势

3.1 rotationGesture 的创建

  • Objective-C

    	// 实例化旋转手势对象
    	UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self 
    	                                                                                            action:@selector(rotationClick:)];
    	
    	// 向 imageView 添加旋转手势
    	[imageView addGestureRecognizer:rotationGesture];
    
  • Swift

    	// 实例化旋转手势对象
    	let rotationGesture:UIRotationGestureRecognizer = UIRotationGestureRecognizer(target: self, 
    	                                                                              action: #selector(UiGestureRecognizer.rotationClick(_:)))
    	
    	// 向 imageView 添加旋转手势
    	imageView?.addGestureRecognizer(rotationGesture)
    

3.2 rotationGesture 的设置

  • Objective-C

    	// 获取旋转角度
    	/*
    		rotation 获取到的为弧度,1 度 = PI/180 弧度
    	*/
    	CGFloat rotation = rotationGesture.rotation  * 180 * M_1_PI;
    
    	// 图片旋转
    	/*
    		lastRotation 为之前的角度
    	*/
    	imageView.transform = CGAffineTransformMakeRotation(lastRotation + rotationGesture.rotation);
    
    	// 旋转手势触发结束
    	if (rotationGesture.state == UIGestureRecognizerStateEnded) {
        	
    		lastRotation += rotationGesture.rotation;
    	}
    
  • Swift

    	// 获取旋转角度
    	/*
    		rotation 获取到的为弧度,1 度 = PI/180 弧度
    	*/
    	let rotation:CGFloat = rotationGesture.rotation  * 180 * CGFloat(M_1_PI)
      	 
    	// 图片旋转
    	/*
    		lastRotation 为之前的角度
    	*/
    	imageView?.transform = CGAffineTransformMakeRotation(lastRotation + rotationGesture.rotation)
        
    	// 旋转手势触发结束
    	if rotationGesture.state == UIGestureRecognizerState.Ended {
            	
    		lastRotation += rotationGesture.rotation
    	}
    

3.3 自定义触摸响应事件处理

  • Objective-C

    	// 用模拟器时需按住 option 键
    	- (void)rotationClick:(UIRotationGestureRecognizer *)rotationGesture {
    	
    	}
    
  • Swift

    	// 用模拟器时需按住 option 键
    	func rotationClick(rotationGesture:UIRotationGestureRecognizer) {
    
    	}
    

4、pinchGesture 捏合手势

4.1 pinchGesture 的创建

  • Objective-C

    	// 实例化捏合手势对象
    	UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self 
    	                                                                                   action:@selector(pinchClick:)];
    	
    	// 向 imageView 添加捏合手势
    	[imageView addGestureRecognizer:pinchGesture];
    
  • Swift

    	// 实例化捏合手势对象
    	let pinchGesture:UIPinchGestureRecognizer = UIPinchGestureRecognizer(target: self, 
    	                                                                     action: #selector(UiGestureRecognizer.pinchClick(_:)))
    
    	// 向 imageView 添加捏合手势
    	imageView?.addGestureRecognizer(pinchGesture)
    

4.2 pinchGesture 的设置

  • Objective-C

    	// 获取缩放倍数
    	CGFloat scale = pinchGesture.scale;
    
    	// 图片缩放
    	imageView.transform = CGAffineTransformMakeScale(pinchGesture.scale, pinchGesture.scale);
    	imageView.bounds = CGRectMake(0, 0, imageView.bounds.size.width * pinchGesture.scale, 
    	                                    imageView.bounds.size.height * pinchGesture.scale);
    
    	// 还原缩放倍数
    	[pinchGesture setScale:1];
    
  • Swift

    	// 获取缩放倍数
    	let scale:CGFloat = pinchGesture.scale
       	
    	// 图片缩放
    	imageView?.transform = CGAffineTransformMakeScale(pinchGesture.scale, pinchGesture.scale)
    	imageView?.bounds = CGRectMake(0, 0, imageView!.bounds.size.width * pinchGesture.scale, 
    	                                     imageView!.bounds.size.height * pinchGesture.scale)
        
    	// 还原缩放倍数
    	pinchGesture.scale = 1
    

4.3 自定义触摸响应事件处理

  • Objective-C

    	// 用模拟器时需按住 option 键
    	- (void)pinchClick:(UIPinchGestureRecognizer *)pinchGesture {
    	
    	}
    
  • Swift

    	// 用模拟器时需按住 option 键
    	func pinchClick(pinchGesture:UIPinchGestureRecognizer) {
    
    	}
    

5、panGesture 拖动手势

5.1 panGesture 的创建

  • Objective-C

    	// 实例化拖拽手势对象
    	UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self 
    	                                                                             action:@selector(panClick:)];
    
    	// 向 imageView 添加拖拽手势
    	[imageView addGestureRecognizer:panGesture];
    
  • Swift

    	// 实例化拖拽手势对象
    	let panGesture:UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, 
    	                                                               action: #selector(UiGestureRecognizer.panClick(_:)))
    
    	// 向 imageView 添加拖拽手势
    	imageView?.addGestureRecognizer(panGesture)
    

5.2 panGesture 的设置

  • Objective-C

    	// 获取手势位置
    	CGPoint currentPoint = [panGesture locationInView:self.view];
    
    	// 图片移动
    	imageView.center = currentPoint;
    
  • Swift

    	// 获取手势位置
    	let currentPoint:CGPoint = panGesture.locationInView(self.view)
      	
    	// 图片移动
    	imageView?.center = currentPoint
    

5.3 自定义触摸响应事件处理

  • Objective-C

    	- (void)panClick:(UIPanGestureRecognizer *)panGesture {
    	
    	}
    
  • Swift

    	func panClick(panGesture:UIPanGestureRecognizer) {
    
    	}
    

6、swipeGesture 滑动手势

6.1 swipeGesture 的创建

  • Objective-C

    	// 实例化滑动手势对象
    	UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self 
    	                                                                                   action:@selector(swipeClick:)];
    
    	// 设置滑动方向,默认为 0:向右滑动
    	swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
    
    	// 向 imageView 添加拖拽手势
    	[imageView addGestureRecognizer:swipeGesture];
    
  • Swift

    	// 实例化滑动手势对象
    	let swipeGesture:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, 
    	                                                                     action: #selector(UiGestureRecognizer.swipeClick(_:)))
    
    	// 设置滑动方向,默认为 0:向右滑动
    	swipeGesture.direction = [.Left, .Right]
    	
    	// 向 imageView 添加拖拽手势
    	imageView?.addGestureRecognizer(swipeGesture)
    

6.2 swipeGesture 的设置

  • Objective-C

    	// 获取滑动方向
    	UISwipeGestureRecognizerDirection direction = swipeGesture.direction;
    
  • Swift

    	// 获取滑动方向
    	let direction:UISwipeGestureRecognizerDirection = swipeGesture.direction
    

6.3 自定义触摸响应事件处理

  • Objective-C

    	- (void)swipeClick:(UISwipeGestureRecognizer *)swipeGesture {
    	
    	}
    
  • Swift

    	func swipeClick(swipeGesture:UISwipeGestureRecognizer) {
    
    	}
    
原文地址:https://www.cnblogs.com/QianChia/p/5759089.html