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)
     
  • 相关阅读:
    no route to host
    修改文件失败,提示E509: 无法创建备份文件 (请加 ! 强制执行)
    OAuth2.0的四种授权模式
    Django--JWT认证
    Django--数据库ORM操作
    DRF中限流、过滤、排序、分页
    Django框架中序列化与反序列化与字段验证
    21.Django三种风格的模型继承
    20.第三方微博登录Django+Vue
    博客园图片点击放大功能
  • 原文地址:https://www.cnblogs.com/shorfng/p/5133917.html
Copyright © 2011-2022 走看看