UIView hitTest的原理】的更多相关文章

[转自:http://blog.sina.com.cn/s/blog_59fb90df0101ab26.html] UIView 两个方法: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 网上对这两个方法的讲解很多,但是大部分是纯文字的描述,我不再赘述,需要可以自己百度“UIView hitTes…
在有全屏侧滑的情况下,页面上有个slider需要左右滑动的时候,经常在滑动slider的时候页面也跟着滑动                解决办法一:关闭当前页面的全屏侧滑,开启系统侧滑   self.fd_interactivePopDisabled = YES; //关闭全屏侧滑 self.navigationController.interactivePopGestureRecognizer.enabled = YES; //开启系统侧滑  解决办法二:if (点击事件在slider上)…
当UIView调用setNeedDisplay之后, 系统会调用view对应layer的 setNeedsDisplay, 在当前runloop即将结束的时候调用CALayer的display方法. CALayer的display方法的内部实现,首先会判断layer的delegete是否响应display方法,如果代理不响应就会进入到系统的绘制流程当中,如果响应,实际上就为我们提供了异步绘制的接口,这样就构成了UIView的绘制原理   系统绘制流程: CALayer会在内部创建一个backin…
要理解这两个方法.先了解一下用户触摸屏幕后的事件传递过程. 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的subviews.遍历的过程中,如果第一个遍历的view1可以响应,那就遍历这个view1的subviews(依次这样不停地查找,直至查找到合适的响应事件view).如果view1不可以响应,那就开始对view2进行判断和子视图的遍历.依次类推view3,view4……  如果最后没有找到合适的响应vi…
闲来无事 观摩别人的项目 常常发现对UIView的hitTest:withEvent:方法的重写,以前也查过这个方法的用法作用,但是时间一长又忘记了.今天再次看到,就记录一下. 用户触摸屏幕后事件的传递过程 当用户点击屏幕后,UIApplication先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的subViews.遍历的过程中,如果第一个遍历的View1可以响应,那就遍历View1的SubViews.(依次这样不停地查找,直至查找到合适的响应事件vie…
绘制原理 首先看一幅流程图 UIView调用setNeedsDisplay方法后,实际上并没有发生当前视图的绘制工作,而是在之后的某一时机进行绘制工作,为什么会在之后的某一时机进行绘制工作呢? 当UIView调用setNeedDisplay之后,系统会调用view对应layer的 setNeedsDisplay方法,相当于在当前layer上打上了一个脏标记,然后会在当前runloop即将结束的时候调用CALayer的display方法,才会真正的进入当前视图的绘制流程当中,所以视图的绘制时机,是…
在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? (1)UITouch 对象的简介 当用户用一根手指触摸屏幕时,会创建一个与手指相关联的 UITouch 对象 一根手指对应一个 UITouch 对象 UITouch 的作用 保存着根手指相关的信息,比如触摸的位置.时间.阶段 当手指移动时,系统会更新同一个 UITouch 对象,使之能够一直保持该手指…
转自:http://blog.csdn.net/mengtnt/article/details/6716289 前面说过UIViewController,但是UIView也是在MVC中非常重要的一层 .正是因为UIView是Iphone下所有界面的基 础,所以官方专门写了一个文档“View Programming Guide for iOS”.通过这个可以很好的了解UIView的功能. 先来看看官方API的解释:The UIView class defines a rectangular are…
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c91b13 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c32275 } p.p4 { margin:…
最近又看了遍苹果的官方文档<Event Handling Guide for iOS>,对事件响应链中的hit-test view 又多了些理解,个人觉的官方文档对这块讲的非常简单,很多东西都是点到为止,hit-test view的知识在项目的任何地方都用到了,但自己反而感知不到,接下来我会给大家讲hit-test view的项目中能解决痛点的三个应用 . 什么叫 hit-test view?文档说:The lowest view in the view hierarchy that cont…
如图: 悬浮的三个按钮下方有一个可以点击的灰色区域,但是点击按钮之间的透明区域, 这三个按钮的contentView会响应这个点击事件,这时候需要让这个contentView不响应这个点击事件. 解决方法如下(将此方法增加到这个contentView类中即可): - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *hitView = [super hitTest:point withEvent:event];…
/** *  在父视图中重写该方法,这样可使超出部分响应事件. */ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {    UIView *view = [super hitTest:point withEvent:event];    if (view == nil) {        for (UIView *subView in self.subviews) {            CGPoint tp =…
一:首先查看一下关于UIView的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIView : UIResponder <NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace> + (Class)layerClass; // 默认为 [CALayer class].用于创建视图的底层时使用. - (instan…
概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不得不面对这样一种比较严苛的需求,比如要求程序只对某个圆形.五角形等非常规区域的点击事件进行处理,这就需要花点功夫了.本文以圆形为例子来介绍此类场景的处理方法. 先看下面一张图(附图1),我们的目标是实现如下自定义tabbar.中间带突起圆形的自定义tabbar曾一度流行,今天我们来粗糙地实现一下.…
iOS中的触摸事件总是由最顶层的View首先得到的,当这个View得到该触摸事件的时候可以选择通过 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { return YES; } 方法来决定是否由当前控件来消费掉触摸事件,YES代表由当前控件消费,事件则不再向下传递;No代表事件继续向下传递.与android里面的onTouchEvent返回布尔值类似. 当我们决定由当前控件来消费掉此事件时,还可以进一步决定由当前控件的…
***hitTest 获取最合适的点 @implementation HMGreenView - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"%s",__func__); } // 获取 最合适的 点的view //- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event //{ // // 把自己的点转换按钮的坐标系上…
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute…
addSubview: 添加一个子视图到接收者并让它在最上面显示出来.- (void)addSubview:(UIView *)view[讨论]这方法同样设置了接收者为下一个视图响应对象.接收者保留视图.如果你使用removeFromSuperview方法用来把视图移除他的显示列表,那么视图将会被释放.如果你想要在视图移除显示列表後保留并使用这个视图(如果,举个例子,你想要交换一些视图的位置.),你不许保留那个视图在他调用removeFromSuperview前. bringSubviewToF…
  今天上班遇到一种情况,需要局部响应点击事件,比如在一个UIImageView中设置一个小圆圈图片,要求点击圆圈里面不响应点击,点击小圆圈外面的部分响应点击.可以通过重写hitTest:withEvent: 和 pointInside: withEvent:方法来做到. 看一下hitTest:withEvent*touch事件发生,创建UIEvent对象 *按照Application的view层次结构,逐层调用每个view的hitTest:withEvent:方法,并传入该event对象,vi…
简介: 以前UITabbar使用中间有一个凸起按钮时,常常就需要用到hitTest来处理可点击的范围. 示例代码: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *hitView = nil; //NSLog(@"point:%@", NSStringFromCGPoint(point)); UIButton *roundBtn = (UIButton *)[self viewWithTag…
关于响应者链部分的基础内容 参考http://www.cnblogs.com/wendingding/p/3795171.html 这里我要说明的是 关于- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; 这个方法的使用 响应者链中的响应过程如下: UIApplication -> Window ->递归找到处理事件的控件->控件调用touches方法 -> 判断是否实现了touch 方法 ->如果没有…
bringSubviewToFront: 把指定的子视图移动到顶层 - (void)bringSubviewToFront:(UIView *)view 参数 view 需要移到顶层的视图 convertPoint:fromView: 把一个点从一个坐标系转换到接收者的坐标系 - (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view 参数 point 一个视图中坐标系上的点 view 一个视图包含了点和他自身坐标系.如果是图是n…
此方法可实现点击穿透.点击下层视图功能 一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApplication会 从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的 视图(View),即需要将触摸事件传递给其处理的视图,称之为hit-test view. win…
很多app中TabBar中间会有个凸起超出部分,为了点击超出父视图但是还想让按钮响应 //重写hitTest方法,去监听发布按钮的点击,目的是为了让凸出的部分点击也有反应- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { //这一个判断是关键,不判断的话push到其他页面,点击发布按钮的位置也是会有反应的,这样就不好了    //self.isHidden == NO 说明当前页面是有tabbar的,那么肯定是在导航控制…
此方法可实现点击穿透.点击下层视图功能. 一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,称之为hit-test view. wind…
UIView翻译 (参考) 2011年04月12日 星期二 10:09 转载于:http://blog.csdn.net/tracylife/archive/2010/08/27/5842723.aspx addSubview: 添加一个子视图到接收者并让它在最上面显示出来. - (void)addSubview:(UIView *)view 讨论 这方法同样设置了接收者为下一个视图响应对象.接收者保留视图.如果你使用removeFromSuperview方法用来把视图移除他的显示列表,那么视图…
在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要.在iOS学习——iOS 整体框架及类继承框架图中列出了iOS中所有类的继承框架图,其中下面这张图就是iOS开发中的界面相关类的继承框架图. 下面主要通过学习UIView.h文件来了解UIView主要提供了那些方法和属性,从UIView.h的源码来看,UIView.h的结构主要分为4个部分: 常用枚举类型的…
需求的TabBar是这样的:5个 tabItem, 中间的那个 item 部分超出系统默认TabBar的上边界. 那么实现的关键点就是如何在点击它突出的部分的时候,也可以正常获得响应.我来把问题简化,我把下图中的红色的视图(类型为RedView,继承自UIView)称为 redview,蓝色的视图(类型为BlueView,继承自UIView)称为 blueview.redview 添加在试图控制器的视图上,blueview 添加在 redview上. 在 RedView 和 BlueView 的…
ios找到被点击的view的过程是从根view开始递归地调用hitTest方法,直到有一个子view的hitTest方法返回自身:如果所有一级子view的hitTest方法都返回nil,那么根view就返回自己. 应用hitTest方法,hitTest方法的作用是返回被点击的view,只返回一个. 每个view都会有hitTest方法,hitTest方法里面会去调用pointInside方法来判断点击的点是否在自己的view范围内,hitTest返回自身view的条件是自身的hitTest方法被…
下面这些都是UIView一些基本的东西,具体的可以参考UIKit 框架之UIView一博客 一.自定义一个View // // MyView.m // UIView // // Created by cyw on 15-5-17. // Copyright (c) 2015年 cyw. All rights reserved. // #import "MyView.h" @implementation MyView - (id)initWithFrame:(CGRect)frame {…