触摸手势

触摸

  • UIView不接收触摸事件的三种情况

    1. 不接收用户交互
      • userInteractionEnableed = NO;
    2. 隐藏
      • hidden = YES;
    3. 透明
      • alpha = 0.0~0.01
  • 提示:UIImageView的userInteractionEnableed默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的。

  • 如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸时间

手势

UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势

UITapGestureRecognizer(敲击)

可以通过number…属性调整触发事件的点击次数

UIPinchGestureRecognizer(捏合,用于缩放)

scale缩放比例。比例是相对于最开始。注意清零

UIPanGestureRecognizer(拖拽)

注意清零。[pan translationInView:self.imageView]获取的是手指移动了多少。

[pan locatonInView:]获取的是手势的触摸点

UISwipeGestureRecognizer(轻扫)

默认向右滑,可以通过direction属性修改触发事件的滑动方向。如果想要一个控件支持多个方向的轻扫,必须创建多个清扫手势,一个轻扫手势只支持一个方向。

UIRotationGestureRecognizer(旋转)

注意复位问题。totation属性控制角度。旋转角度是相对于最原始状态。注意清零

UILongPressGestureRecognizer(长按)

默认会触发两次,按下一次,手指抬起一次,一般会判断一下状态,把手势传到需要调用的方法里。手势.state=UIGestureRecognizerState…表示状态

默认情况下只允许一个手势在执行,如果要同时触发多个手势,需要把shouldRecognizeSimultaneouslyWithGestureRecognizer代理方法的返回值设为YES,需要设置允许同时的那俩手势的delegate为self

自动提示宏

  • 宏的操作原理,每输入一个字母就会直接把宏右边的拷贝,并且会自动补齐前面的内容

  • 宏里面的#,会自动把后面的参数变成c语言的字符串

  • 逗号表达式,只取右边的值

  • 什么情况下需要用到自动提示宏
    例如
    [_mainView addObserver:self forKeyPath:_mainView.frame options:NSKeyValueObservingOptionNew context:nil];
    但是里面是不能用_mainView.frame的
  • 宏的操作原理,每输入一个字母就会直接把宏右边的拷贝,并且会自动补齐前面的内容
    #define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPath))
  • 宏里面的#,会自动把后面的参数变成C语言的字符串
    NSLog(@"%s",keyPath(_mainView, frame)); 打印结果:frame
    NSLog(@"%@", [keyPath(_mainView, frame) class]); 打印结果:NSTaggedPointerString
  • 如何把c语言字符串转OC字符串
    char *c = "act";
    nslog(@"%@",@(c));
    [_mainView addObserver:self forKeyPath:keyPath(_mainView, frame) options:NSKeyValueObservingOptionNew context:nil];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值