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

为什么touchesbegan:在使用UIPinchGestureRecognizer之后永远不会在UIView上被调用?

touchesbegan:在使用UIPinchGestureRecognizer之后永远不会在UIView上被调用的原因是因为UIPinchGestureRecognizer是一个手势识别器,它会拦截并处理触摸事件,而不会将事件传递给UIView。当使用UIPinchGestureRecognizer时,它会监测两个手指之间的捏合手势,并根据手势的变化来执行相应的操作,例如缩放视图。

在使用UIPinchGestureRecognizer时,它会优先处理触摸事件,并阻止touchesbegan:方法被调用。这是因为手势识别器的优先级高于触摸事件的处理。当手势识别器检测到捏合手势时,它会触发相应的回调方法,例如pinch:,而不会触发touchesbegan:方法。

如果您想要在使用UIPinchGestureRecognizer之后仍然能够调用touchesbegan:方法,您可以考虑以下几种方法:

  1. 使用手势识别器的代理方法:手势识别器提供了代理方法,您可以实现这些方法来处理触摸事件。例如,您可以实现gestureRecognizer:shouldReceiveTouch:方法来决定是否允许手势识别器处理触摸事件。在这个方法中,您可以返回NO来阻止手势识别器拦截触摸事件,从而使touchesbegan:方法能够被调用。
  2. 使用多个手势识别器:如果您需要同时处理触摸事件和捏合手势,您可以考虑使用多个手势识别器。您可以将一个手势识别器用于捏合手势的检测,另一个手势识别器用于处理其他触摸事件。这样,您就可以分别处理这两种事件,并且touchesbegan:方法可以被调用。

需要注意的是,以上方法仅适用于使用UIPinchGestureRecognizer的情况。对于其他手势识别器,可能会有类似的限制或行为。在使用手势识别器时,您应该了解其特定的行为和限制,并根据需要选择合适的方法来处理触摸事件。

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

相关·内容

iOS14开发-触摸与手势识别

方法 // 返回一个CGPoint类型的值,表示触摸view的位置。 // 返回的位置是针对view的坐标系。 // 调用时传入的view参数为空的话,返回的是触摸点在整个窗口的位置 。...(默认操作) (2)拦截,事件不再往上传递,重写touchesBegan方法,但不调用父类的touchesBegan方法。...(3)不拦截,事件继续往上传递,重写touchesBegan方法,并调用父类的touchesBegan方法,即super.touchesBegan(touches, with: event)。...使用步骤 创建手势实例,指定回调方法,当手势开始,改变、或结束时,回调方法调用。 将手势添加到需要的 UIView 。...每个手势只对应一个 UIView,当屏幕触摸在当前 UIView 里时,如果手势和预定的一样,回调方法就会调用。 手势可以通过 storyboard 或者纯代码使用

2.2K20

【IOS开发进阶系列】手势专题

1 touchesBegan手势         iPhone中处理触摸屏的操作,3.2之前是主要使用的是由UIResponder而来的如下4种方式:     - (void)touchesBegan...当创建手势时,指定一个回调方法,当手势开始,改变、或结束时,回调方法调用。         添加到需要识别的View中。...缩放和旋转有点问题,估计是因为模拟器的模拟的两个接触点距离imageView的边界外了,所以操作无效果。建议真机上运行这个手势。         ...模拟器缩放和选择的操作技巧:         可以把imageView的frame值设置大一点,按住alt键,按下触摸板(不按下不行),这样就可以旋转和缩放了。...如果速度向量小于200,那就会得到一个小于的小数,那么滑行会很短;     基于速度和速度因素计算一个终点;     确保终点不会跑出父View的边界;     使用UIView动画使view滑动到终点

37440

UIGestureRecognizer  手势识别一、概念介绍二、UIView 的分类三、UIGestureRecognizer 抽象类四、UIGestureRecognizerDelegate 代理

(捏合手势,缩放用) 使用步骤: (1)创建手势识别对象 (2)设置手势识别属性,例如手指数量,方向等 (3)将手势识别附加到指定的视图之上 (4)编写手势触发监听方法 ---- 二、UIView...只有识别失败之后才会将触摸事件发给触摸到的控件,这种情况下控件view的响应会延迟约0.15ms。...代理方法 处理一些同时进行的手势操作: 1、 开始进行手势识别时调用的方法,返回NO则结束识别,不再触发手势,用处:可以控件指定的位置使用手势识别 - (BOOL)gestureRecognizerShouldBegin...调用gesture recognizer的touchesBegan:withEvent:方法之前调用,如果返回NO,则gesture recognizer不会看到此触摸事件。...addGestureRecognizer:rotation]; // 旋转手势的监听方法 - (void)rotateAction:(UIRotationGestureRecognizer *)recognizer { // 原来的基础

2.8K80

手势的使用

最终找到这个干活的控件,我们学术就叫做第一响应者对象。找到了负责处理的按钮之后如何给出相应处理呢?大概过程就是这样: button尝试处理事件。如果它不能处理事件,则将事件传递给其父视图。...- iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),触摸事件处理方面,大大简化了开发者的开发难度 3.1手势识别器(UIGestureRecognizer) 为了完成手势识别...,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer(点按) UIPinchGestureRecognizer(捏合,用于缩放) UIPanGestureRecognizer...手势的使用 4.1 长按手势 长按手势一定要判断状态,否则方法会在手势开始和结束时分别调用!方法会被调用两次!...方法会被调用两次!

2.1K40

iOS-手势UIGestureRecognier详解一. 手势UIGestureRecognier简介二. 手势的抽象类——UIGestureRecognizer三. UIGestureRecogni

手势UIGestureRecognier简介 iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),触摸事件处理方面,大大简化了开发者的开发难度。...,当我们把cancelTouchesInView设置为NO时,屏幕滑动,两种方式都在触发,打印如下: ?...pan.cancelsTouchesInView = YES 我们发现touchesMoved的方法仍然调用了,这是为什么呢?...touchMoved方法调用,当识别出拖拽手势以后,就会终止touch事件的传递。...pan.delaysTouchesBegan = YES; 因为此时拖拽手势识别失败之前,都不会给时间传递链发送消息,所以就不会在调用touchesMoved触发事件了 而delaysTouchesEnded

2.5K50

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

*)view; 返回值表示触摸view的位置 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0)) 调用时传入的view参数为nil的话,返回的是触摸点在UIWindow...触摸点是否自己身上?...从后往前遍历子控件,重复前面的两个步骤 如果没有符合条件的子控件,那么就自己最适合处理 原理 // point:是方法调用者坐标系上的触摸点的位置 - (UIView *)hitTest:(CGPoint...2> 调用最合适控件的touches….方法 3> 如果调用了[super touches….]...是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer(敲击) UIPinchGestureRecognizer(捏合,用于缩放) UIPanGestureRecognizer

95270

iOS 事件传递和处理

UIKit会从UIWindow开始寻找目标视图,先调用UIWindow的hitTest方法询问是否有响应的视图,hitTest方法首先会先调用UIWindow的pointInside方法询问是否点击范围内...UIWindow是UIView的子类,UIView的hitTest方法实现和上述过程一致。 思考: UIView调用子视图hitTest时,是先调用哪些子视图?...接着UIApplication就会调用sendEvent:方法,接着UIWindowsendEvent:方法中会调用sendTouchesForEvent:方法,如下图: ?...: -touchesEnded:withEvent: -touchesCancelled:withEvent: 从上一步寻找到的目标视图开始,目标视图会首先调用touches方法,接着是目标视图的父视图...当手势的touchesBegan:withEvent:处理完成之后,便会触发目标视图的touchesBegan方法。

1.4K20

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

UIApplication UIViewController UIView 那么为什么继承自UIResponder的类就能够接收并处理事件呢?...// UIView是UIResponder的子类,可以覆盖下列4个方法处理不同的触摸事件 // 一根或者多根手指开始触摸view,系统会自动调用view的下面方法 - (void)touchesBegan...,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象 重写以上四个方法,如果是处理UIView的触摸事件。...对象,使之能够一直保存该手指在的触摸位置 当手指离开屏幕时,系统会销毁相应的UITouch对象 提 示:iPhone开发中,要避免使用双击事件!...*)view; // 返回值表示触摸view的位置 // 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0)) // 调用时传入的view参数为nil的话,返回的是触摸点在

10.7K70

iOS 中的事件响应

发送事件 寻找到第一响应者之后,UIApplication 便会调用sendEvent函数发送事件到 UIWindow,然后 UIWindow 调用sendEvent函数发送事件到第一响应者进行响应,...顺序如下: UIApplication -> UIWindow -> hit-tested view 我们可以touchesBegan函数中加入断点查看相关函数调用验证这一过程 发送事件-方法调用...拦截,继续往下分发事件,重写 touchesBegan 进行事件处理,同时调用父类的 touchesBegan 将事件往下传递; 如果最终没有响应者响应事件,则事件丢弃。...响应链-方法调用 ParentView是TapTestView的父 View,TapTestView没有重写touchesBegan 方法,ParentView的touchesBegan 方法中打上断点...UIGestureRecognizer 是否对其处理,且不会修改 UIGestureRecognizer 的状态机;(时机 手势touchesBegan前) 使用二个方法会等待一段时间, UIGestureRecognizer

2.6K11

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

如果两根手指同时触摸一个view,那么view只会调用一次 touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象。...如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象 根据touches...touches方法来作具体的事件处理 touchesBegan… touchesMoved… touchedEnded… 1.3 UIView不接收触摸事件的三种情况 不接收用户交互userInteractionEnabled...2.2 事件传递的完整过程 先将事件对象由往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件。 调用最合适控件的touches….方法 如果调用了[super touches….]...iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),触摸事件处理方面,大大简化了开发者的开发难度。

89530

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

; //一根或者多根手指在view移动时自动调用view的下面方法(随着手指的移动,会持续调用该方法) - (void)touchesMoved:(NSSet *)touches withEvent:...UITouch的常用方法 - (CGPoint)locationInView:(UIView *)view; //返回值表示触摸view的位置 //这里返回的位置是针对view的坐标系的(以view...touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象 如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent...(CGPoint)point withEvent:(nullable UIEvent *)event; // 用来判断当前这个点在不在方法调用,点必须在方法调用者的坐标系中,判断才会准确 -...因此iOS3.2之后我们日常开发中关于触摸事件处理方面一般使用手势识别功能Gesture Recognizer,简化开发难度。

1.6K60

IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】

4.2.2使用示例 接下来我们说正事了,假定我们现在有一个View是hitTestView,命名为STImageView,现在我们想让这个image处理一些事情,比如所有的图片点下之后加一个灰色的效果...我们需要在touchesBegan方法里面self.maskView.hidden = NO;然后touchesEnded/ Cancelled里面self.maskView.hidden = YES...如果中断了响应链,那么所有的nextResponder都不会得知有事件发生,iOS也提供了这个方法,其实很简单: 我们重写TouchesEvents的时候,如果不想让响应链继续传递,就不调用super...调用super的目的就是为了把事件传递给nextResponder,并且如果我们touchesBegan中没有调用super,则super不会响应其他的回掉(touchesMoved/touchesEnded...有关触摸事件响应链的分发,就差不多这么多东西,最重要的是大家可以看那几个touches方法,多做实验,就可以了解的更加深入。

60910

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

分别有多点触控、摇一摇以及远程操作(iOS之后新增了3DTouch事件类型)。一个用户点击事件处理过程中,UIEvent对象是唯一的。...其中涉及到了UIView中的两个方法(可以重写),当hitTest返回YES才会调用这个View的 Touch事件,因为如果返回NO,则当前View排除相应链之外了。 ?...,然后调用hitTest: withEvent:依次获取处理这个事件的所有视图对象,获取所有的可处理事件对象后,开始调用这些对象的touches回调方法 自定义View中重写 touchesBegan...view添加单击手势之后,原来的touchesEnded方法就无效了。touchesBegin 还是生效的。...我们使用UITextView和UITextField的时候,可以通过它们的inputAccessoryView属性给输入时呼出的键盘加一个附属视图,通常是UIToolBar,用于回收键盘。

2.4K30

iOS手势与变形

换句话说其他手势是连续型手势,而连续型手势的特点就是:会多次调用手势操作事件,而且连续手势识别后可以取消手势。...UIGestureRecognizerStateEnded, // 手势识别操作完成(此时已经松开手指) UIGestureRecognizerStateCancelled, // 手势取消...但是我们使用中,使用已经封装好的的API对控件进行变形处理。...0] 对比可以发现CGAffineTransformScale()与CGAffineTransformMakeScale()的区别在于,CGAffineTransformScale()实在原理的基础进行缩放操作...中添加手势 storyboard的控件栏中我们可以看到手势控件 使用方法: 直接将手势控件拖到要添加的视图上 关联手势事件 设置手势属性 注意:若想同时识别多个手势,方法和上面相同,遵循协议,实现方法

1.2K30

iOS学习——核心动画

核心动画和UIView动画的对比:UIView动画可以看成是对核心动画的封装,和UIView动画不同的是,通过核心动画改变layer的状态(比如position),动画执行完毕后实际是没有改变的(表面上看起来已改变...3)运行在后台线程中,动画过程中可以响应交互事件(UIView动画默认动画过程中不响应交互事件)。...设置CAAnmation的属性,不同的动画类别属性参数不一样的 调用CALayer的addAnimation:forKey:将CAAnimation对象添加到CALayer,就能执行动画 调用CALayer...那么你会疑惑为什么这不是默认的选择,实际上当使用UIView的动画方法时,他的确是默认的,但当创建CAAnimation的时候,就需要手动设置它了。...fillMode主要有四种类型: kCAFillModeForwards :动画开始之后layer的状态将保持动画的最后一帧,而removedOnCompletion的默认属性值是 YES,所以为了使动画结束之后

1.2K50
领券