首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当用户在UIView外部触摸时如何处理事件?

当用户在UIView外部触摸时,可以通过以下几种方式来处理事件:

  1. 忽略触摸事件:可以通过重写UIView的touchesBegan(_:with:)touchesMoved(_:with:)touchesEnded(_:with:)等方法,并不做任何处理,从而忽略触摸事件。
  2. 传递触摸事件给下一层视图:可以通过将UIViewuserInteractionEnabled属性设置为false,从而禁用当前视图的用户交互功能,并将触摸事件传递给下一层视图进行处理。
  3. 使用手势识别器(Gesture Recognizers):可以使用手势识别器来处理触摸事件。手势识别器是UIGestureRecognizer的子类,可以通过添加手势识别器到UIView上,并设置相应的手势识别器的代理方法来处理触摸事件。
  4. 使用Hit Testing(命中测试):可以通过重写UIView的hitTest(_:with:)方法来判断触摸事件是否发生在当前视图的范围内,如果不在范围内,则将触摸事件传递给下一层视图进行处理。
  5. 使用事件响应者链(Responder Chain):可以通过将触摸事件沿着事件响应者链传递给合适的对象来处理。事件响应者链是由UIResponder的子类组成的,可以通过重写touchesBegan(_:with:)touchesMoved(_:with:)touchesEnded(_:with:)等方法,并调用super方法将触摸事件传递给下一个响应者来处理。

需要注意的是,以上处理方式可以根据具体的需求和场景进行选择和组合使用。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

史上最详细的iOS之事件的传递和响应机制-原理篇

所以,还是那句话,想处理UIView触摸事件,必须自定义UIView子类继承自UIView。 2.1.UIView的拖拽 那么,如何实现UIView的拖拽呢?...UITouch对象 2.1.1.1.UITouch的作用 保存着跟手指相关的信息,比如触摸的位置、时间、阶段 手指移动,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置 手指离开屏幕...因为会存在这么一种情况:遍历子控件,如果触摸点不在子控件A自己身上而是子控件B身上,还要要求返回子控件A作为最合适的view,采用返回自己的方法可能会导致还没有来得及遍历A自己,就有可能已经遍历了点真正所在的...3.3.2.练习 屏幕上现在有一个viewA,viewA有一个subView叫做viewB,要求触摸viewB,viewB会响应事件,而触摸viewA本身,不会响应该事件如何实现?...4.1.触摸事件处理的整体过程 1>用户点击屏幕后产生的一个触摸事件,经过一系列的传递过程后,会找到最合适的视图控件来处理这个事件2>找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理

11.1K70

iOS-控件响应用户控制事件事件处理

事件处理 响应者对象 iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。...、时间、阶段 手指移动,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置 手指离开屏幕,系统会销毁相应的UITouch对象 UITouch的方法 - (CGPoint)locationInView...,那么子控件就不可能接收到触摸事件(掌握) 如何找到最合适的控件来处理事件?...自己是否能接收触摸事件触摸点是否自己身上?...1.必须得自定义view 由于是view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 不容易区分用户的具体手势行为 UIGestureRecognizer

97270
  • View编程指南(三)

    例如,view层次结构中的父子关系确定哪些对象可能处理特定的触摸事件。 同样,父子关系定义每个view如何响应界面方向的变化。...打电话,状态栏高度会增加,当用户结束通话,状态栏的大小会减小。 在运行时修改view 随着应用程序从用户接收输入,他们调整其用户界面以响应该输入。...其他方法: 触摸事件或手势发生,您的界面可能会通过加载一组新的view或更改当前的view来作出响应。有关处理事件的信息,请参阅iOS事件处理指南。...触摸事件发生,window将相应的事件对象分派到发生触摸的view。如果你的view对一个事件不感兴趣,它可以忽略它,或者把它传递给响应者链,由另一个对象处理。...处理触摸事件,UIKit使用UIView的hitTest:withEvent:和pointInside:withEvent:方法来确定触摸事件是否发生在给定view的边界内。

    1.7K30

    iOS-UITouch事件处理详解1. iOS中的事件基本介绍2.UITouch3.UIEvent4. 事件的产生和传递5. 通过UITouch方法监听View的触摸事件的缺点

    1. iOS中的事件基本介绍 iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。...UITouch的作用 UITouch保存着跟手指相关的信息,比如触摸的位置、时间、阶段等。 手指移动,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置。...手指离开屏幕,系统会销毁相应的UITouch对象。 3....方法来作具体的事件处理 4.2 那么主窗口如何找到最合适的控件来处理事件?...4.4 触摸事件处理的详细过程(响应者链的传递过程) 用户点击屏幕后产生的一个触摸事件,经过一系列的传递过程后,会找到最合适的视图控件来处理这个事件 找到最合适的视图控件后,就会调用控件的touches

    1.7K60

    IOS触摸事件分发机制详解

    前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,遇到以下几种情形的时候你很可能抓破头皮都找不到解决方案: 某个点击消息由父视图来处理,子视图怎么把消息传递给父视图 这个按钮不灵敏,怎么扩大点击响应区域...怎么一个页面处理手绘、表情拖动放缩、文本编辑三种消息 阅读本文,你会明白两个问题:IOS如何找到响应者、响应者是如何做出响应,明白这两个问题你就能解决类似上述的疑难杂症。...Hit-Testing就完美的解决了这个问题,通过检测触摸点是否相关的视图边界范围内,如果在,就继续递归检测该视图的所有子视图,离用户最近的那个视图的边界如果包含触摸点,那么它就是我们要找的Hit-Test...UIResponder UIResponder 类提供了一组接口专门用来响应用户的操作,处理各种事件,其中包括触摸事件(Touch Events)、运动事件(Motion Events)、远程控制事件(...响应链序列iOS确定一个事件并将它传递给initial object(通常是view)开始。所以initial view有处理事件的第一个机会。

    3.6K90

    UI篇-UIResponder之事件传递和响应精析

    对于触摸事件UIResponder内部提供了以下方法来处理事件事件对象UIEvent UIEvent.h文件中,我们可以看到有一个UIEventType类型的属性,这个属性表示了当前的响应事件类型...分别有多点触控、摇一摇以及远程操作(iOS之后新增了3DTouch事件类型)。一个用户点击事件处理过程中,UIEvent对象是唯一的。...其中涉及到了UIView中的两个方法(可以重写),hitTest返回YES才会调用这个View的 Touch事件,因为如果返回NO,则当前View被排除相应链之外了。 ?...响应者链:由一系列“下一个响应者”组成 其顺序如下: 1.iOS系统处理事件,通过UIApplication对象和每个UIWindow对象的sendEvent:方法将事件以消息的形式分发给具体处理事件的第一响应者...前一个方法使应用程序完全停止接收触摸事件消息,第二个方法则重启消息的接收。某些时候,您的代码正在执行动画,可能希望关闭事件的传递。

    2.5K30

    IOS开发系列——UIView专题之五:常用开发技巧篇

    ImageView尺寸,只有部分显示ImageView中。...5.1.4hitTest方法以及不规则区域内触摸事件处理方法 5.1.4.1hitTest:withEvent:方法流程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application...的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch...操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,称之为hit-test view。...UITouch对象触摸操作的过程中不断变化,所以使用UITouch对象,不能直接retain,而需要使用其他手段存储UITouch的内部信息。

    1.1K20

    touchesBegan 触摸事件

    一、概念介绍 1、在用户使用App过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 1)触摸事件 2)加速计事件 3)远程操控事件 响应者对象UIResponder iOS...中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。...UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能接收并处理事件。...,通过forin循环来遍历NSSet中的每一个元素,当用户用一根手指触摸屏幕,会创建一个与手指相关联的UITouch对象, 保存着跟本次手指触摸相关的信息,比如触摸的位置、时间、阶段, 手指离开屏幕...; 5)获取当前触摸事件所处的状态 触摸事件屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。

    82220

    iOS14开发-触摸与手势识别

    触摸事件传递与响应 触摸事件产生以后,App 里有很多的 UIView 或 UIViewController,到底应该谁去响应这个事件呢?...遍历每一个子 UIView ,都会重复上面的操作(判断能否响应触摸事件,能则继续遍历子 UIView,直到找到一个 UIView)直到找到最合适的 UIView。...响应者对于触摸事件的响应和传递都是touchesBegan方法中完成的。该方法默认是将事件顺着响应者链向上传递,即将事件交给上一个响应者进行处理。...使用步骤 创建手势实例,指定回调方法,手势开始,改变、或结束,回调方法被调用。 将手势添加到需要的 UIView 上。...每个手势只对应一个 UIView屏幕触摸在当前 UIView,如果手势和预定的一样,回调方法就会调用。 手势可以通过 storyboard 或者纯代码使用。

    2.3K20

    iOS 中的事件响应

    /// 正在触摸的对象对应的View /// hit-testing过程绑定上去 var view: UIView?...,区别在于触摸事件发生, 使用第一个方法可以立即控制 UIGestureRecognizer 是否对其处理,且不会修改 UIGestureRecognizer 的状态机;(时机 手势touchesBegan...当用户 UIScrollView 的一个子视图上按下,UIScrollView并不知道用户是想要滑动内容视图还是点击对应子视图,所以在按下的一瞬间, 事件 UIEvent 从 UIApplication...倒计时结束前,如果用户的手指发生了移动,直接滚动内容视图,不会将该事件传递给对应的子视图; 倒计时结束,如果用户的手指位置没有改变,则调用自身的 -touchesShouldBegin:withEvent..., in view: UIView) -> Bool // UIScrollView的子类中重写该方法,用于返回是否取消已经传递给子视图的事件,默认子视图是UIControl返回NO,否则返回YES

    2.7K11

    【IOS开发基础系列】UIView专题

    commitAnimations     结束一个动画块并开始动画块外。...4.2.2 (未解决)DrawRect如何清空之前内容 4.2.3 DrawRect之后注意用hitTest:withEvent:方法处理事件接收 //用户触摸第一间加载内容 - (UIView*...5.1.3 事件检测实现         Hit-Test的检查机制如上所示,确定了Hit-TestView,如果当前的application没有忽略触摸事件(UIApplication:isIgnoringInteractionEvents...Application的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent...UITouch对象触摸操作的过程中不断变化,所以使用UITouch对象,不能直接retain,而需要使用其他手段存储UITouch的内部信息。

    62830

    touchesBegan 触摸事件一、概念介绍二、方法介绍三、参数介绍:touches四、参数介绍:event

    一、概念介绍 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 事件类型.png 响应者对象UIResponder iOS中不是任何对象都能处理事件...,只有继承了UIResponder的对象才能接收并处理事件。...我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 一次完整的触摸过程中,...,通过forin循环来遍历NSSet中的每一个元素 当用户用一根手指触摸屏幕,会创建一个与手指相关联的UITouch对象, 保存着跟本次手指触摸相关的信息,比如触摸的位置、时间、阶段, 手指离开屏幕...timestamp; (5)获取当前触摸事件所处的状态 触摸事件屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。

    2.5K100

    iOS面试题-UI篇

    可以响应用户事件,Xcode6之后可以方便的通过视图调试功能查看图层之间的关系 UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。...drawRect方法依赖Core Graphics框架来进行自定义的绘制 缺点:它处理touch事件每次按钮被点击后,都会用setNeddsDisplay进行强制重绘;而且不止一次,每次单点事件触发两次执行...的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件如何找到最合适处理事件的控件: 首先,判断自己能否接收触摸事件 可以通过重写...,那么就自己处理 事件响应者链 如果当前view是控制器的view,那么就传递给控制器 如果控制器不存在,则将其传递给它的父控件 视图层次结构的最顶层视图也不能处理接收到的事件或消息,则将事件或消息传递给...UIWindow对象进行处理 如果UIWindow对象也不处理,则将事件或消息传递给UIApplication对象 如果UIApplication也不能处理事件或消息,则将其丢弃 补充:如何判断上一个响应者

    2K21

    iOS 小技能: Responder Chain(响应者链)【上篇】

    Responder Chain: I 响应者对象 iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”。...(void)remoteControlReceivedWithEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(4_0); II UItouch 当用户用一根手指触摸屏幕...2.1 UITouch的作用 保存着跟手指相关的信息,比如触摸的位置、时间、阶段。 1, 手指移动,系统会更新同一个UITouch对象,使之能够一直保存该手指的触摸位置。2....手指离开屏幕,系统会销毁相应的UITouch对象 提示:iPhone开发中,要避免使用双击事件!...触摸事件发生后,系统会将触摸事件以UIEvent的方式加入到UIApplication的事件队列中,UIApplication将事件分发给根部的UIWindow去处理,UIWindow则开始调用hitTest

    1.1K30

    事件传递、响应者链条

    一、事件 iOS里有三种事件触摸(touch)、加速(motion)、远程控制 UIResponder里,有以下事件处理 // 触摸事件 - (void)touchesBegan:(NSSet...的对象称之为响应者对象,能够处理touchesBegan等触摸事件 一个Touch事件产生,要先找到响应者,iOS通过Hit-Test机制来寻找响应者,每一个UIView(继承自UIResponder...UIApplication -> UIWindow -> Root View -> subview -> ··· -> initalView 系统检测到手指触摸(Touch)操作,将Touch 以UIEvent...UIApplication从事件队列中取出最新的触摸事件进行分发传递到UIWindow进行处理。...视图层次结构的最顶级视图,传递给ViewController ViewController将事件传递给window对象进行处理 window对象继续将事件或消息传递给UIApplication

    88310

    View编程指南

    view通过使用手势识别器或通过直接处理触摸事件来响应其矩形区域中的触摸事件view层次结构中,父view负责定位和调整其子view的大小,并且可以动态地执行。...每个应用程序至少有一个Window,应用程序的主屏幕上显示应用程序的用户界面。 如果外部显示器连接到设备,应用程序可以创建另一个Window来该屏幕上显示内容。...View层次结构中的排列也决定了应用程序如何响应事件。当在特定view内发生触摸,系统将带有触摸信息的事件对象直接发送到该view进行处理。...view的content mode确定如何使用view的可拉伸区域方面也起着重要作用。仅content mode会导致View的内容被缩放才使用可伸缩区域。...图显示了用户触摸屏幕开始的事件的基本顺序,以图形系统作为响应更新屏幕内容结束。 任何由程序启动的动作也会发生相同的事件序列。 用户触摸屏幕。 硬件将触摸事件报告给UIKit框架。

    2.3K20

    跟iOS UI的捉迷藏(如何获取用户点击行为的控件title)

    1.如何获取用户控件的点击行为 事实上,由于获取的“所见所得”点击view行为,所以,思路上应该是对uiview或者及其子类得某个事件方法hook到,这样触发点击(广义上是触摸)行为后,可以根据发送的事件确定点击的...根据上文可知,UIControl监听到需要处理的交互事件,会调用 sendAction:to:forEvent: 将target、action以及event对象发送给全局应用,Application...这里我们用第一个,sendAction:to:forEvent: 里面有三个参数,最后一个是event,可以通过allTouches方法,可以获得触摸点的集合,可以判断多点触摸事件 而touch.view...进行判断,并获取title了 触摸事件参考文章:https://www.cnblogs.com/syxchina/archive/2012/10/14/2723541.html 2.如何获取不同控件的title...先从简单的开始 一阶获取的控件:UIButton 响应的uiview是UIButton,即用户点击的是按钮,则立马获取(即一阶获取) NSString * title = [[button titleLabel

    1.4K10

    四类事件的主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用

    触摸事件.png 但是iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”。...用户点击屏幕之后,系统到底让谁来响应这个触摸事件吶?例如用户点了一个button,是应该让谁来处理呢?...找到了负责处理的按钮之后如何给出相应处理呢?大概过程就是这样: button尝试处理事件。如果它不能处理事件,则将事件传递给其父视图。 button的父视图(superview)尝试处理事件。...手势识别功能(Gesture Recognizer) 如果想监听一个view上面的触摸事件,之前的做法是 自定义一个view 实现view的touches方法,方法内部实现具体处理代码 通过touches...方法监听view触摸事件,有很明显的几个缺点 必须得自定义view 由于是view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 不容易区分用户的具体手势行为

    2.3K40

    iOS 事件体系知识及原理小记

    基本知识点: 0 UITouch 每一个指尖屏幕上触发一次触摸事件,系统就会生成对应一个UITouch对象,用于记录当前触摸的状态,主要包含运动相位、位置、大小、运动、力度(iOS9)等数据;...触摸事件发生变化时(指尖移动、压力变化),UITouch对象的相关信息也会跟着更新;每一次更新都是复用之前的UITouch对象,不会重新创建。...UIEvent对象代表着一个事件,有四种类型的事件触摸事件( UIEventTypeTouches)、运动事件( UIEventTypeMotion)、远程控制事件( UIEventTypeRemoteControl...,通常先发送事件给应用程序的主窗口(UIWindow); 主窗口会调用hitTest:withEvent:方法视图(UIView)层次结构中找到一个最合适的UIView处理触摸事件,并将UITouch...与UIEvent交给UIView处理(通过touchesBegan/touchesMoved/touchesEnded等方法传递) 看个例子: view 2是view 1的子view,一个点击落在view

    1.2K90
    领券