zoukankan      html  css  js  c++  java
  • iOS

    前言

    	NS_CLASS_AVAILABLE_IOS(2_0)  @interface UITouch : NSObject
    	@available(iOS 2.0, *)		 public class UITouch : NSObject
    
    • 触摸事件基本都是发生在 viewController 中,首先触摸的对象是视图,而视图的类 UIView 继承了 UIRespnder 类,但是要对事件作出处理,还需要重写 UIResponder 类中定义的事件处理函数。根据不同的触摸状态,程序会调用相应的处理函数。

    1、touch 的创建

    • 在系统触摸事件处理方法中实现

    • Objective-C

      	// 获取任意一个触摸对象
       	UITouch *touch = [touches anyObject];
      
      	// 获取任意一个触摸对象
      	UITouch *touch = [[event allTouches] anyObject];
      
      	// 获取指定的 view 触摸对象
      	UITouch *touch = [[event touchesForView:myView] anyObject];
      
      	// 获取指定的 window 触摸对象
      	UITouch *touch = [[event touchesForWindow:self.view.window] anyObject];
      
    • Swift

      	// 获取任意一个触摸对象
      	let touch:UITouch = touches.first! as UITouch
      
      	// 获取任意一个触摸对象
      	let touch2:UITouch = (event?.allTouches()?.first!)! as UITouch
      
      	// 获取指定的 view 触摸对象
      	let touch3:UITouch = (event!.touchesForView(myView!)?.first)! as UITouch
      
      	// 获取指定的 window 触摸对象
      	let touch4:UITouch = (event!.touchesForWindow(self.view.window!)?.first)! as UITouch
      

    2、touch 的设置

    • 在系统触摸事件处理方法中实现

    • Objective-C

      	// 设置接收多点触摸
      	/*
      		默认为 NO,即视图默认不接收多点触摸
      	*/
      	self.view.multipleTouchEnabled = YES;
      
    • Swift

      	// 设置接收多点触摸
      	/*
      		默认为 NO,即视图默认不接收多点触摸
      	*/
      	self.view.multipleTouchEnabled = true
      

    3、touch 的获取

    • 在系统触摸事件处理方法中实现

    • Objective-C

      	// 获取触摸窗口
      	UIWindow *touchWindow = touch.window;
         	
      	// 获取触摸视图
      	UIView *touchView = touch.view;
         	
      	// 获取触摸手势
      	NSArray *touchGesture = touch.gestureRecognizers;
         	
      	// 获取触摸次数
      	NSUInteger tapCount = touch.tapCount;
         	
      	// 获取触摸时间
      	NSTimeInterval timestamp = touch.timestamp;
          	
      	// 获取触摸状态
      	/*
      		UITouchPhaseBegan,    	   // whenever a finger touches the surface.     触摸开始
      		UITouchPhaseMoved,    	   // whenever a finger moves on the surface.    接触点移动
      		UITouchPhaseStationary,    // whenever a finger is touching the surface but hasn't moved 
      		                           // since the previous event.                  接触点无移动
      		UITouchPhaseEnded,    	   // whenever a finger leaves the surface.      触摸结束
      		UITouchPhaseCancelled,     // whenever a touch doesn't end but we need to stop tracking 
      		                           // (e.g. putting device to face)              触摸取消
      	*/
      	UITouchPhase touchPhase = touch.phase;
         	
      	// 获取触摸位置
      	
      		// 上次触摸点的位置
      		CGPoint lastPoint = [touch previousLocationInView:self.view];
      
      		// 当前触摸点的位置
      		CGPoint currentPoint = [touch locationInView:self.view];
         	
      	// 获取触摸半径
      	CGFloat majorRadius = touch.majorRadius;
      	CGFloat majorRadiusTolerance = touch.majorRadiusTolerance;
      
    • Swift

      	// 获取触摸窗口
      	let touchWindow:UIWindow = touch.window!
        	
      	// 获取触摸视图
      	let touchView:UIView = touch.view!
         	
      	// 获取触摸手势
      	let touchGesture:[AnyObject] = touch.gestureRecognizers!
         	
      	// 获取触摸次数
      	let tapCount:Int = touch.tapCount
         	
      	// 获取触摸时间
      	let timestamp:NSTimeInterval = touch.timestamp
         	
      	// 获取触摸状态
      	/*
      		case Began,        // whenever a finger touches the surface.     触摸开始
      		case Moved,        // whenever a finger moves on the surface.    接触点移动
      		case Stationary,   // whenever a finger is touching the surface but hasn't moved since 
      		                   // the previous event.                        接触点无移动
      		case Ended,        // whenever a finger leaves the surface.      触摸结束
      		case Cancelled,    // whenever a touch doesn't end but we need to stop tracking 
      		                   // (e.g. putting device to face)              触摸取消
      	*/
      	let touchPhase:UITouchPhase = touch.phase
         	
      	// 获取触摸位置
      
      		// 上次触摸点的位置
          	let lastPoint:CGPoint = touch.previousLocationInView(self.view)
      		
      		// 当前触摸点的位置
          	let currentPoint:CGPoint = touch.locationInView(self.view)
        	
      	// 获取触摸半径
      	let majorRadius:CGFloat = touch.majorRadius
       	let majorRadiusTolerance:CGFloat = touch.majorRadiusTolerance
      

    4、系统触摸事件处理方法

    • 不用手动调用

    • Objective-C

      	// 触摸开始,重写 UIResponder 中定义的方法
      	- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
      
      	}
      
      	// 触摸移动,重写 UIResponder 中定义的方法
      	- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
      
      	}
      
      	// 触摸结束,重写 UIResponder 中定义的方法
      	- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
      
      	}
      
      	// 触摸取消,重写 UIResponder 中定义的方法
      	- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
      
      	}
      
    • Swift

      	// 触摸开始,重写 UIResponder 中定义的方法
      	override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
      
      	}
      
      	// 触摸移动,重写 UIResponder 中定义的方法
      	override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
      
      	}
      
      	// 触摸结束,重写 UIResponder 中定义的方法
      	override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
      
      	}
      
      	// 触摸取消,重写 UIResponder 中定义的方法
      	override func touchesCancelled(touches: Set<UITouch>!, withEvent event: UIEvent!) {
          	
      	}
      

    5、视图随触摸移动

    • Objective-C

      	// 触摸移动
      	- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
          
          	// 获取触摸对象
          	UITouch *touch = [touches anyObject];
          	UIView *tapView = touch.view;
          
          	// 获取触摸点位置
          	CGPoint lastPoint = [touch previousLocationInView:self.view];
          	CGPoint currentPoint = [touch locationInView:self.view];
          
          	// 改变视图中心坐标
          	CGPoint tapViewCenter = tapView.center;
          
          	tapViewCenter.x += currentPoint.x - lastPoint.x;
          	tapViewCenter.y += currentPoint.y - lastPoint.y;
          
          	tapView.center = tapViewCenter;
      	}
      
    • Swift

      	// 触摸移动
      	override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
          
          	// 获取触摸对象
          	let touch:UITouch = touches.first! as UITouch
          	let tapView = touch.view
          
          	// 获取触摸点位置
          	let lastPoint:CGPoint = touch.previousLocationInView(self.view)
          	let currentPoint:CGPoint = touch.locationInView(self.view)
          
          	// 改变视图中心坐标
          	var tapViewCenter = tapView!.center
          
          	tapViewCenter.x += currentPoint.x - lastPoint.x
          	tapViewCenter.y += currentPoint.y - lastPoint.y
          
          	tapView!.center = tapViewCenter
      	}
      

    6、单击/双击触摸

    • Objective-C

      	// 触摸结束
      	- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
      
          	UITouch *touch = [touches anyObject];
      
          	// 单击
          	if (touch.tapCount == 1) {
      
      			 // 响应单击触摸事件
              	[self performSelector:@selector(singleTapClick) withObject:nil afterDelay:0];
          	}
          	// 双击
          	else if (touch.tapCount == 2) {
      
      			// 取消单击触摸响应事件
              	[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTapClick) object:nil];
              	
      			// 响应双击触摸事件
              	[self performSelector:@selector(doubleTapClick) withObject:nil afterDelay:0];
          	}
      	}
      
      	// 单击触摸响应事件处理
      	- (void)singleTapClick {
      
          	self.view.backgroundColor = [UIColor greenColor];
      	}
      
      	// 双击触摸响应事件处理
      	- (void)doubleTapClick {
      
          	self.view.backgroundColor = [UIColor orangeColor];
      	}
      
    • Swift

      	// 触摸结束
      	override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
      
      		let touch = touches.first! as UITouch
      
      		// 单击
          	if touch.tapCount == 1 {
      
      			// 响应单击触摸事件
             	self.performSelector(#selector(singleTapClick), withObject: nil, afterDelay: 0)
          	}
      
          	// 双击
          	if touch.tapCount == 2 {
              
              	// 取消单击触摸响应事件
              	NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: #selector(singleTapClick), object: nil)
              
              	// 响应双击触摸事件
              	self.performSelector(#selector(doubleTapClick), withObject: nil, afterDelay: 0)
          	}
      	}
      
      	// 单击触摸响应事件处理
      	func singleTapClick() {
      
          	self.view.backgroundColor = UIColor.greenColor()
      	}
      
      	// 双击触摸响应事件处理
      	func doubleTapClick() {
      
          	self.view.backgroundColor = UIColor.orangeColor()
      	}
      
  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/QianChia/p/5759175.html
Copyright © 2011-2022 走看看