1、矩形、点运算

  1、获取当前的View在Window的frame

  2、包含判断

  3、获取点击在响应者 touchesBegan 的位置

  4、UIScrollView、UITableView 实时 位置 相关

2、手势

  1、点击(UITapGestureRecognizer)

  2、拖移(UIPanGestureRecognizer)、轻扫(UISwipeGestureRecognizer)

  3、长按(UILongPressGestureRecognizer)

  4、旋转(UIRotationGestureRecognizer)

  5、捏合(UIPinchGestureRecognizer)

3、触摸

  

0、写在前面

  可通过 NSStringFromCGPoint 等方法,用"%@"调试输出,不用再 point.x、point.y 列出来。rect 方法同。

1、矩形、点运算

  1、获取当前的View在Window的frame

UIWindow * window=[[[UIApplication sharedApplication] delegate] window];
CGRect rect=[_myButton convertRect:_myButton.bounds toView:window];

  后续补充:

    toView:nil 。参数置空,相当于默认window。

    相关的(layer 也有类似):

      - (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;

      - (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;

      - (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;

      - (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)view;

      toView,当前的点,是调用者的坐标系,想切换到view的坐标系。

      fromView,当前的点,是fromView的坐标系,想切换到调用者的坐标系。

  2、包含判断

// 矩形 包含 该矩形
CGRectContainsRect
// 矩形 包含 该点?
CGRectContainsPoint

  3、获取点击在响应者 touchesBegan 的位置

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
NSLog(@"%@",NSStringFromCGPoint(point));
}

  4、UIScrollView、UITableView 实时 位置 相关

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// scrollView 的偏移量
scrollView.contentOffset
// 当前手指在 windows 的位置
[scrollView.panGestureRecognizer locationInView:nil];
// 相对 手指按下时 的位移
[scrollView.panGestureRecognizer translationInView:nil];
// 移动的加速度
[scrollView.panGestureRecognizer velocityInView:nil];
}

  

2、手势

  1、点击(UITapGestureRecognizer)

//单击
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
[self.view addGestureRecognizer:tapGesture]; //双击
UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTapAction:)];
doubleTapGesture.numberOfTapsRequired = 2; //设置次数
[self.view addGestureRecognizer:doubleTapGesture]; //双击优先
[tapGesture requireGestureRecognizerToFail:doubleTapGesture]; -(void)doubleTapAction:(UITapGestureRecognizer*)gesture
{
NSLog(@"双击了");
} -(void)tapAction:(UITapGestureRecognizer*)gesture
{
NSLog(@"单击了");
}

  2、拖移(UIPanGestureRecognizer)、轻扫(UISwipeGestureRecognizer)

//拖移
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
[self.view addGestureRecognizer:panGesture]; //轻扫
UISwipeGestureRecognizer *swipGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipAciton:)];
swipGesture.direction = UISwipeGestureRecognizerDirectionLeft; //设置方向
[self.view addGestureRecognizer:swipGesture]; //轻扫优先
[panGesture requireGestureRecognizerToFail:swipGesture]; -(void)swipAciton:(UISwipeGestureRecognizer*)gesture
{
NSLog(@"轻扫");
} -(void)panAction:(UIPanGestureRecognizer*)gesture
{
CGPoint point = [gesture locationInView:self.view];
NSLog(@"%@",NSStringFromCGPoint(point));
}

    后续补充:轻扫想要识别向左还是向右,需要建2个轻扫的手势!

         如果只建1个,设(左 | 右)方向,那么响应的函数,会显示(左 | 右)触发,无法辨别!

  3、长按(UILongPressGestureRecognizer)

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
longPress.minimumPressDuration = 2.0; //最短时间
[self.view addGestureRecognizer:longPress]; -(void)longPressAction:(UILongPressGestureRecognizer*)longAction
{
if (longAction.state == UIGestureRecognizerStateBegan) {
NSLog(@"长按开始");
}else if(longAction.state == UIGestureRecognizerStateChanged)
{
NSLog(@"长按位置改变");
return; }else if(longAction.state == UIGestureRecognizerStateEnded)
{
NSLog(@"长按结束");
return;
}
}

  4、旋转(UIRotationGestureRecognizer)

UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateAction:)];
[self.view addGestureRecognizer:rotateGesture]; -(void)rotateAction:(UIRotationGestureRecognizer*)gesture
{
NSLog(@"%f",gesture.rotation*(180/M_PI));
}

  5、捏合(UIPinchGestureRecognizer)

UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
[self.view addGestureRecognizer:pinchGesture]; CGFloat _lastValue; -(void)pinchAction:(UIPinchGestureRecognizer *)pinch
{
if (_lastValue > pinch.scale) {
_imageView.transform = CGAffineTransformScale(_imageView.transform, 0.8, 0.8);
}else{
_imageView.transform = CGAffineTransformScale(_imageView.transform, 1.2, 1.2);
}
_lastValue = pinch.scale;
}

  

3、触摸

//触摸开始
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"开始触摸"); [self.view endEditing:YES]; UITouch *touch = [touches anyObject];
if (touch.tapCount == 1)
{
[self performSelector:@selector(singleClick) withObject:nil afterDelay:0.3];
}
else if(touch.tapCount == 2)
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleClick) object:nil];
NSLog(@"双击");
} //locationInView 在视图上的定位
CGPoint point = [touch locationInView:self];
NSLog(@"%@",NSStringFromCGPoint(point));
} -(void)singleClick
{
NSLog(@"单击");
} -(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"触摸结束");
} -(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"触摸移动");
} -(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//电话呼入
NSLog(@"取消触摸");
}

  

iOS:手势与矩形、点运算相关(18-01-24更)的更多相关文章

  1. ios手势

    iOS 手势操作:拖动.捏合.旋转.点按.长按.轻扫.自定义 大 中 小   1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. i ...

  2. iOS手势学习UIGestureRecognizer & cocos2d 手势推荐

    iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer  // 长按UIPanGestur ...

  3. Wed Jul 04 18:01:38 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended

    Wed Jul 04 18:01:38 CST 2018 WARN: Establishing SSL connection without server's identity verificatio ...

  4. iOS手势处理

    iOS手势处理 iOS手势有着如下几种: UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UIS ...

  5. iOS 手势识别器概述

    手势识别器 iOS 手势识别器(UIGestureRecognizer) 点击手势(UITapGestureRecognizer) 滑动手势(UISwipeGestureRecognizer) 旋转手 ...

  6. swift 实现iOS手势密码、指纹密码、faceID

    本博客包含了如何实现iOS手势密码.指纹密码.faceID全步骤,包括了完整的代码. 先附上demo地址https://github.com/Liuyubao/LYBTouchID,支持swift3. ...

  7. 嵌入式:UCOSIII的使用(17.01.24补充)

    0.一些移植.系统相关 OS_CFG_APP.H /* --------------------- MISCELLANEOUS ------------------ */ #define OS_CFG ...

  8. iOS手势操作,拖动,轻击,捏合,旋转,长按,自定义(http://www.cnblogs.com/huangjianwu/p/4675648.html)

    1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureReco ...

  9. 【IOS开发笔记03-视图相关】简单计算器的实现

    UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...

随机推荐

  1. drupal7 STMP邮件模块配置

    drupal7.54 STMP  version = "7.x-1.6" 配置:   注意:上面的“用户名”需要和“站点信息”页面的电子邮件地址保持一致,邮件发送才能成功 ---- ...

  2. vue2 入门 教程 单页应用最佳实战[*****]

    推荐 vue2 入门 教程 -------- 看过其他的,再看作者的,很赞 vue2 入门 教程 单页应用最佳实战 :  具体在 https://github.com/MeCKodo/vue-tuto ...

  3. (C#) 多线程访问探讨,如果保证线程安全?

    先抛出几点疑问: 1. 多个线程同时访问同一个“值类型变量“(value type, stored in stack), 如果保证安全访问? 2. 多个线程同时访问同一个“引用类型变量“(refere ...

  4. VC++中如何将字符串转换成整型数字

    原文:http://blog.csdn.net/yongf2014/article/details/47071663 注意: atoi函数是c的函数,它的输入参数是char *类型. 你声明了stri ...

  5. Android实现图片下载并保存SD卡

    一.首先获取图片 //第一种获取图片的方法 String filePath = downloadUrl; //以下是取得图片的方法 取得的是InputStream,直接从InputStream生成bi ...

  6. 【QT】在子窗体中控制父窗体

    [背景说明]我的主窗体的名字叫做MainWindow,其子窗口是一个叫subDialog的类.我现在想做的是在子窗口的函数中调用父窗口. 在父窗口中打开子窗口 //弹出对话框确定变换的参数 subDi ...

  7. 笔记:Xen虚拟机如何迁移到KVM上?

    众所周知如果是在Linux上使用虚拟化技术的话,就会有基于Xen Hypervisor部署一个系统的机会.因为基于内核的虚拟机(KVM:Kernel-Based Virtual Machine)已经逐 ...

  8. ASP.NET错误处理的方式(二)

    要创建页中的全局处理程序,请创建 Page_Error 事件的处理程序.要创建应用程序范围的错误处理程序,请在 Global.asax 文件中将代码添加到 Application_Error 方法.只 ...

  9. 低版本兼容使用Fragment (转)

    Fragment框架开发东西确实很方便,但是恼人的是从4.0才开始支持.以前的版本必须用兼容模式开发,本人在网上找了大量资料,终于找到些线索正常运行于2.1版本的安卓系统.现在浅说一下兼容版本使用Fr ...

  10. codeforces 549F Yura and Developers(分治、启发式合并)

    codeforces 549F Yura and Developers 题意 给定一个数组,问有多少区间满足:去掉最大值之后,和是k的倍数. 题解 分治,对于一个区间,找出最大值之后,分成两个区间. ...