zoukankan      html  css  js  c++  java
  • 2.0 触摸事件

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末
    如果觉得本文内容过长,请前往本人 “简书
     
    UIView不接收触摸事件的三种情况:
    1、不接收用户交互
    userInteractionEnabled = NO
    2、隐藏
    hidden = YES
    3、透明
    alpha = 0.0 ~ 0.01
    4. 如果子视图的位置超出了父视图的有效范围, 那么子视图也是无法与用户交互的, 即使设置了父视图的 clipsToBounds = NO, 可以看到, 但是也是无法与用户交互的
     
    提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的
     
     
    触摸事件中的方法:

     
     1 // 手指按下的时候调用
     2 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
     3 
     4 // 手指移动的时候调用
     5 - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullableUIEvent *)event;
     6 
     7 // 手指抬起的时候调用
     8 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullableUIEvent *)event;
     9 
    10 // 取消(非正常离开屏幕,意外中断事件)
    11 - (void)touchesCancelled:(nullableNSSet<UITouch *> *)touches withEvent:(nullableUIEvent *)event;
    1 // 3D Touch相关方法,当前触摸对象触摸时力量改变所触发的事件,返回值是UITouchPropertyie
    2 - (void)touchesEstimatedPropertiesUpdated:(NSSet * _Nonnull)touches NS_AVAILABLE_IOS(9_1);

    相关代码:

     1 #import “TDView.h"
     2 
     3 @implementation TDView
     4 
     5 // 手指触摸到这个view的时候调用
     6 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     7 
     8   UITouch *t = touches.anyObject;
     9 
    10   NSLog(@"%ld", t.tapCount); // 点击这个响应者对象的次数
    11 
    12   NSLog(@"%@", t.window); // 点击这个响应者对象所在的window
    13   NSLog(@"%@", self.window);
    14   NSLog(@"%@", [UIApplication sharedApplication].keyWindow);
    15 
    16   NSLog(@"%s", __func__);
    17 }
    18 
    19 // 手指在这个view上移动的时候调用
    20 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    21   // 获取触摸对象
    22   UITouch *t = touches.anyObject;
    23 
    24   // 获取上一个点的位置
    25   CGPoint lastP = [t previousLocationInView:self.superview];
    26   NSLog(@"%@----上一个点的位置", NSStringFromCGPoint(lastP));
    27 
    28   // 获取当前点的位置
    29   CGPoint p = [t locationInView:self.superview];
    30   NSLog(@"%@----当前点的位置", NSStringFromCGPoint(p));
    31 }
    32 
    33 // 手指离开这个view的时候调用
    34 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    35       NSLog(@"%s", __func__);
    36 }
    37 
    38 // 取消(非正常离开屏幕)
    39 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    40       NSLog(@"%s", __func__);
    41 }
    42 
    43 @end
    补充:关于NSSet和 NSArray
     
     
    如何访问
    如何取值
    如何遍历
    效率
                       应用场景
     
     
    NSSet
    集合
    无序访问,不重复的。
     
    存放到 NSSet 中的内容并不会排序与添加顺序也没有关系
    取集合里面任意一个元素 anyObject
     
    通过 anyObject 来访问单个元素
    for in  效率高
    (1)比如重用 Cell 的时候, 从缓存池中随便获取一个就可以了, 无需按照指定顺序来获取
     
    (2)当需要把数据存放到一个集合中, 然后判断集合中是否有某个对象的时候
     
     
    NSArray
    数组
    有序访问,可以有重复对象。
     
    对象的顺序是按照添加的顺序来保存的
     
    通过下标来访问
    for 
     
    forin
     
     
    当需要把数据存放到一个集合中, 然后判断集合中是否有某个对象的时候
     
     


    如有疑问,请发送邮件至 shorfng@126.com 联系我。
     
    By:蓝田(Loto)
     
  • 相关阅读:
    在Ubuntu11.10中安装OpenCV2.3.1的详细步骤
    基于二元语法模型的中文分词
    相似图片搜索的原理
    基于GPU的KMeans聚类算法
    Windows下Eclipse和PyDev搭建完美Python开发环境
    Ubuntu 11.10+win7双系统启动项管理及配置方法
    主题爬虫
    vue定义全局过滤器
    element elimage 放多张图片,显示大图
    element UI的form 禁止浏览器自动填充用户名或密码
  • 原文地址:https://www.cnblogs.com/shorfng/p/5133917.html
Copyright © 2011-2022 走看看