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. jQuery轮播图(一)轮播实现并封装

    利用面向对象自己动手写了一个封装好的jquery轮播组件,可满足一般需求,不仅使用简单且复用性高. demo:点此预览 代码地址:https://github.com/zsqosos/componen ...

  2. C# 按部门拆分excel文件

    按照所属部门不同将excel文件拆分成多个文件 string excel_path = @"G:\zhyue\backup\2018-08-01 读取腾讯邮箱接口-获取一个月内未接收到外部邮 ...

  3. 学习使用PRINCE2能带来什么益处?

    使用PRINCE2有许多好处.它除了可重复使用.可升级.非常灵活之外,是在成百上千名有经验的项目经理们的帮助下,总结他们多年积累的实践经验和专业技术建立的. PRINCE2 开发于1989年并从此不断 ...

  4. python 待关注库

    Python待关注库 GUI 图形 Tkinter/wxPython/PyGTK/PyQt/PySide Web框架 django/web2py/flask/bottle/tornadoweb/web ...

  5. Emacs快捷键(较全)

    C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...

  6. Python初学者第十六天 文件处理操作练习

    16day 练习:模拟登陆 1.用户输入账号密码进行登陆: 2.用户信息保存在文件内: 3.用户密码输入错误三次后,锁定用户,下次登陆,检测到这个用户再也登陆不了 #获取用户名及密码f_user = ...

  7. Python学习---生成器的学习1210

    在Python中,这种一边循环一边计算的机制,称为生成器: 结论: 生成器本质是一个函数,不同于函数的是它生成的是一个对象,不执行函数内的代码 1.1. 列表生成器 列表生成器: 列表是直接生成数字在 ...

  8. 给腾讯云Linux主机创建Swap文件

    新买的腾讯云主机没有提供Swap分区 理由是由于主机经常因为内存使用率过高,频繁使用Swap,导致磁盘IO过高,服务器整体性能反而下降. 不过用户依然可以使用Swap文件的方式添加Swap. 方法如下 ...

  9. unity3d项目版本管理设置

    unity3d老是有一堆乱七八糟的文件,好像不提交也不行,特别是那烦人的meta文件,哪到底unity项目提交到版本管理哪些东西可以忽略呢?应该设置些什么东西呢? 菜单,Edit => Proj ...

  10. 深入浅出SharePoint——定制保存Item按钮

    <script type="text/javascript" src="/_layouts/style/jquery-1.4.4.min.js">& ...