zoukankan      html  css  js  c++  java
  • iOS触摸事件应用举例

    1. 触摸事件的类型
     
     触摸事件的类型一共有四个,一次完整的触摸,至少包括开始和结束两个事件
     
     1> 触摸开始,用手指(一根或者多根)按在屏幕上
     2> 触摸移动,手指在屏幕上发生移动(有可能会发生)
     3> 触摸结束,手指从屏幕上离开
     4> 触摸被取消,因为系统事件(例如电话呼叫)一次触摸事件被取消

    #pragma mark ***触摸开始

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    
    

    #pragma mark 触摸移动

    
    

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

    
    

    #pragma mark 触摸完成

    
    

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

    
    

    #pragma mark 触摸取消(来电)

    
    

    - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

    
    

    #pragma mark - 常用方法

    
    

    #pragma mark 获取触摸集合中任意一个触摸对象,对于单点触摸,直接用就可以

    
    

    UITouch *touch = [touches anyObject];

    
    

    #pragma mark 获取触摸在当前视图的位置

    
    

    CGPoint location = [touch locationInView:self.view];

    
    

    #pragma mark 获取触摸在当前视图的前一点位置

    
    

    CGPoint preLocation = [touch previousLocationInView:self.view];

    
    
    2. 触摸对象UITouch的属性及方法
    
     属性:
     1> view:       检测到触摸事件的视图,在开发中使用最为频繁的属性
     2> window:     窗口,发生触摸事件的窗口
     
     3> phase:      相位属性,开发中极少使用,一般用户自定义手势识别
     4> timestamp:  发生触摸的时间
        以上两个属性,通常用户开发自定义手势识别,日常开发中不需要使用。
     
     5> tapCount:   发生触摸时,在短时间内,手指点按的次数,通常用于判断单击还是双击
        提示:在iOS开发中,尽量少用双击事件!
        如果要使用双击,需要有图形化的界面提示用户,某一个控件上是允许双击操作的。
     
     方法:
     1> locationInView:             发生触摸事件相对视图的位置(坐标点)
     2> previousLocationInView:     发生触摸事件前一次手指所在的位置(坐标点)
     
     3. 对于单点触摸,经常使用
     
        UITouch *touch = [touches anyObject];
     
        从touches集合中获取到用户的触摸对象
     
        通常,在应用程序开发中,为了简化程序的复杂度,一般只是用单点触摸,
        而如果需要支持多点触摸,通常是使用手势识别来处理。
    
     4. hitTest方法,用于检测具体响应用户触摸点视图的方法
     
        - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
        与
        - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
        在视图内部返回YES,否则返回NO
     
        联合使用来判断用户触摸点的位置是否在指定的视图内部,如果是,表示该视图可以接收用户交互。
     
        以上两个方法会被循环递归,多次调用!直至找到最适合响应用户请求的视图!
     
        提示:一般情况下,不要轻易重写这两个方法,因为一旦方法内部使用了消耗量大的代码,会严重影响系统的性能!
        窍门:一旦出现示例中需要拦截触摸事件的情况,可以与美工或者策划人员沟通,调整界面!
     
        1) 如果返回nil,表示没有响应的视图
        2) 如果返回视图,表示该视图接收用户的响应
     
        接收用户触摸响应的几个条件
        1) self.userInteractionEnabled = YES;   允许接收用户响应
        2) self.hidden = NO;                    只有现实的视图才能接收用户触摸
        3) self.alpha > 0.01;                   视图的透明度一定要可见
     
        提示:并不是所有的控件都默认接收用户交互的,譬如:UIImageView,UILabel等
     
        参数说明
        
        point   用户触摸的点,相对于当前视图坐标系的坐标点
        event   用户触摸事件,开发中一般程序员不使用,该事件用于在响应者链条上传递
  • 相关阅读:
    day09_request&response学习笔记
    为什么浏览器User-agent(浏览器类型)总是有Mozilla字样?
    无效类字符串:ProgID: Excel.Application
    django2.0升级日记
    Kali Linux信息收集工具
    Kali Linux 工具使用中文说明书
    人手一份核武器
    五大常用算法【转发】
    ACCA AI来袭会议笔记
    2017 Gartner数据科学魔力象限出炉,16位上榜公司花落谁家?
  • 原文地址:https://www.cnblogs.com/ranger-jlu/p/3981364.html
Copyright © 2011-2022 走看看