hitTest练习
业务逻辑1:
底部一个按钮, 按钮的上面有一个View,遮挡在按钮的上面.
点击View时, View接收事件,当发现点击的点在按钮的位置时, 让底部的按钮处理事件.
实现思路:
实现View的touchBegain方法,先坚听UIView的点击.
并去实现UIView的HitTest方法, 在hitTest方法当中通过把当前点转换成按钮所在的坐标系
CGPoint btnP = [self convertPoint:point toView:self.btn];
转换过后查看当前点在不在按钮上,如果在按钮上,就直接返回按钮.
如果有在按钮上,保持系统默认做法.
实现代码:
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
判断当前点在不在按钮上.
把当前点转换成按钮所在的坐标系
CGPoint btnP = [self convertPoint:point toView:self.btn];
if ([self.btn pointInside:btnP withEvent:event]) {
return self.btn;
}else{
return [super hitTest:point withEvent:event];
}
}
业务逻辑2:
按钮可以随着手指拖动而拖动.拖动过程当中,按钮当中的子控件也跟着拖动.
让超过按钮的子控件也能够响应事件,一般情况下,当一个控件超过他的父控件的时候,是不能够接收事件的.
现在要做的事情就让超过父控件的按钮也能够响应事件.
实现思路:
先办到让按钮能够跟随着手指移动而移动.
实现按钮的touchesMoved方法,在touchesMoved方法当中,获得当前手指所在的点.以前上一个点.
分别计算X轴的偏移量以及Y轴的偏移量.
然后修改当前按钮的transform让按钮办到能够跟随着手指移动而移动.
第二步, 实现按钮的hitTest方法.
在该方法当中去判断当前的点在不在按钮的子控件上.
如果在按钮的子控件上.就返回按钮的子控件如果不在的话, 就保持系统的默认做法.
实现代码:
第一步,让按钮能够跟随着手指移动而移动
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
获取当前的手指
UITouch *touch = [touches anyObject];
获取当前手指所在的点
CGPoint curP = [touch locationInView:self];
获取当前手指的上一个点
CGPoint preP = [touch previousLocationInView:self];
计算X轴的偏移量
CGFloat offsetX = curP.x - preP.x;
计算Y轴的偏移量
CGFloat offsetY = curP.y - preP.y;
修改按钮的形变,让按钮能够移动.
self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);
}
第二步,实现hitTest方法,判断手指当前所在的点在不在按钮的子控件上.
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
把当前所在的点转换成按钮子控件上面的点
CGPoint chatP = [self convertPoint:point toView:self.chatBtn];
判断转换后的点在不在按钮的控件上.
if ([self.chatBtn pointInside:chatP withEvent:event]) {如果在
直接返回,也就意味着,当前最适合的View,就是这个按钮
return self.chatBtn;
}else{如果不在,那么就保持系统原有做法.
return [super hitTest:point withEvent:event];
}
}
hitTest练习的更多相关文章
- iOS Hit-Test应用
最近又看了遍苹果的官方文档<Event Handling Guide for iOS>,对事件响应链中的hit-test view 又多了些理解,个人觉的官方文档对这块讲的非常简单,很多东 ...
- 【原】ios的hitTest方法以及不规则区域内触摸事件处理方法
概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不 ...
- 新浪微博客户端(59)-hitTest withEvent方法的使用说明
iOS中的触摸事件总是由最顶层的View首先得到的,当这个View得到该触摸事件的时候可以选择通过 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEv ...
- IOS第15天(2,事件处理hitTest练习)
***hitTest 获取最合适的点 @implementation HMGreenView - (void)touchesBegan:(NSSet *)touches withEvent:(UIEv ...
- 设置完在Canvas的位置后,控件HitTest不响应的问题
have a Canvas with a couple of elements on it like Line, Path and Text Box. In the MouseOver event o ...
- hitTest:WithEvent 和Responder Chain
这个方法是找到那个View被touch,当找到后就成为响应链的第一个了,如果他不能处理这个Event,那么就找nextResponder 直至application 如果不能处理,那就会丢弃掉. ht ...
- hitTest方法与PointInside方法
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
在有全屏侧滑的情况下,页面上有个slider需要左右滑动的时候,经常在滑动slider的时候页面也跟着滑动 解决办法一:关闭当前页面的全屏侧滑,开启系统侧滑 self ...
- 消息点击事件的响应链---hitTest:withEvent:方法
*当用户点击屏幕时,会产生一个触摸事件,系统会将触摸事件加入到 UIApplication管理事件队里中 *UIApplication 会从事件队列中取出最前面的事件进行分发以便处理,通常,先发送事件 ...
- 第七篇、hitTest UITabbar中间突出按钮额外增加可点击区域
简介: 以前UITabbar使用中间有一个凸起按钮时,常常就需要用到hitTest来处理可点击的范围. 示例代码: - (UIView *)hitTest:(CGPoint)point withEve ...
随机推荐
- <学习opencv>绘画和注释
/*=========================================================================*/ // 绘画 和 注释 /*========= ...
- Two pointer方法
I.何为Two pointer 用两个哨兵指向两个序列,通过利用序列本身的性质减少遍历次数,来更快得解决一些归并问题 基本问题 给定一个正整数递增序列和一个正整数M,求序列中两个不同位置的a,b使得a ...
- python+pytest,通过自定义命令行参数,实现浏览器兼容性跑用例
场景拓展: UI自动化可能需要指定浏览器进行测试,为了做成自定义配置浏览器,可以通过动态添加pytest的命令行参数,在执行的时候,获取命令行传入的参数,在对应的浏览器执行用例. 1.自动化用例需要支 ...
- VirtualBox 虚拟机怎样设置共享文件夹
首次在VirtualBox装完系统后,很经常用到的操作就是:想将主机的东西拉倒虚拟机进行使用或安装,那怎么将主机的文件拿到虚拟机呢? 1.在虚拟机 > 设置中选择 >安装增强功能,经过这个 ...
- Java 私有接口 【类中嵌套接口】
1.前言 接口十分常用,能规范实现类的命名 和 实现多个实现类的向上转型成统一类型 ,但是接口的修饰符只能是 public吗? 当然不是,可以是private , 难道是像这样? 显然不可以,已经报错 ...
- 详谈 Java工厂 --- 静态工厂 【简单工厂模式】
1.前言 什么是工厂模式? 就是为了尽可能将代码的耦合度降低而产生的设计模式. 这篇随笔讲解静态工厂的思路和具体操作. 2.总结 (1)静态工厂又称 简单 工厂模式 ,是最最简单的工厂模式. (2)优 ...
- antd递归渲染左侧菜单
- 第10组 Beta冲刺 (1/5)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14012521.html ·作业博客:https://edu.cnblogs.co ...
- PPT2010制作图片玻璃磨砂效果
原文链接: https://www.toutiao.com/i6488928834799272462/ 选择"插入"选项卡,"图像"功能组,"图片&q ...
- Python爬虫脚本 ,Uni-APP复选框做出双向绑定 ,Net5工作流建模 。的一点经验
从业C#开发多年,现在也经常用到Python 做网络爬虫 ,用Uni-app做手机前端.攒了一点经验.供其他多语言开发程序员借鉴吧. Python做爬虫和其他的方式做爬虫最大的区别应该在于. Pyth ...