zoukankan      html  css  js  c++  java
  • UITouch

    • 触摸事件基本都是发生在 viewController 中,首先触摸的对象是视图,而视图的类 UIView 继承了 UIRespnder 类,但是要对事件作出处理,还需要重写 UIResponder 类中定义的事件处理函数。根据不同的触摸状态,程序会调用相应的处理函数。

    1、touch 的创建

    // 获取任意一个触摸对象
    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];
    

    2、touch 的设置

    • 在系统触摸事件处理方法中实现
    // 设置接收多点触摸
    /*
    默认为 NO,即视图默认不接收多点触摸
    */
    self.view.multipleTouchEnabled = YES;
    

    3、touch 的获取

    • 在系统触摸事件处理方法中实现
    // 获取触摸窗口
    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;
    

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

    • 不用手动调用
    // 触摸开始,重写 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 {
    
    }
    

    5、视图随触摸移动

    // 触摸移动
    - (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;
    }
    

    6、单击/双击触摸

    // 触摸结束
    - (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];
    }
    
    
  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/CH520/p/9413505.html
Copyright © 2011-2022 走看看