为什么我给UIImageVIew添加点击手势不行

为什么我给UIImageVIew添加点击手势不行,第1张

给的UIImageView增加点击事件 解决思路1:网友提示在该“button”上增加一个真正的透明button,这样就可以顺利执行点击事件了;但是本人尝试发现,如果我调整了button的透明度后,点击是没有效果的!可能是我 *** 作错误,待再次验证。 解决思路2:为的UIImageView增加手势 [ImageView的addGestureRecognizer:我们自己的手势识别 ] 如何创建一个手势?看看UITapGestureRecognizer的用法吧 //单指单击 UITapGestureRecognizer * singleFingerOne = [[UITapGestureRecognizer页头] initWithTarget:自 *** 作:@selector(handleSingleFingerEvent :)] singleFingerOne.numberOfTouchesRequired = 1 //手指数 singleFingerOne.numberOfTapsRequired = 1 //抽头次数 singleFingerOne 委托 =自我 //单指双击 UITapGestureRecognizer * singleFingerTwo = [[UITapGestureRecognizer页头] initWithTarget:自 *** 作:@selector(handleSingleFingerEvent :)] singleFingerTwo.numberOfTouchesRequired = 1 singleFingerTwo.numberOfTapsRequired = 2 。singleFingerTwo 委托 =自我//双指单击 UITapGestureRecognizer * doubleFingerOne = [[UITapGestureRecognizer页头] initWithTarget:自 *** 作:@selector(handleDoubleFingerEvent :)] doubleFingerOne.numberOfTouchesRequired = 2 doubleFingerOne.numberOfTapsRequired = 1 。doubleFingerOne 委托 =自我UITapGestureRecognizer * doubleFingerTwo = [[UITapGestureRecognizer页头] initWithTarget:自 *** 作:@selector(handleDoubleFingerEvent :)] doubleFingerTwo.numberOfTouchesRequired = 2 doubleFingerTwo.numberOfTapsRequired = 2 。doubleFingerTwo 委托 =自我 //如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理 [singleFingerOne requireGestureRecognizerToFail:singleFingerTwo] //同理双指亦是如此 [doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo] [self.view addGestureRecognizer:singleFingerOne] [self.view addGestureRecognizer:singleFingerTwo] [self.view addGestureRecognizer:doubleFingerOne] [self.view addGestureRecognizer:doubleFingerTwo] [singleFingerOne发布] [singleFingerTwo发布] [doubleFingerOne发布] [doubleFingerTwo发布] 处理事件的方法,代码: //处理单指事件 - (无效)handleSingleFingerEvent:(UITapGestureRecognizer *)发件人 { 如果(sender.numberOfTapsRequired == 1){ //单指单击 的NSLog(@“单指单击”) } 否则如果(sender.numberOfTapsRequired == 2){ //单指双击 的NSLog(@“单指双击”) } } //处理双指事件 - (无效)handleDoubleFingerEvent:(UITapGestureRecognizer *)发件人 { 如果(sender.numberOfTapsRequired == 1){ //双指单击 的NSLog(@“双指单击”) } 否则如果(sender.numberOfTapsRequired == 2){ //双指双击 的NSLog(@“双指双击”) } }

UIEvent代表iOS系统中的一个事件,可以分为三类:UIEventTypeTouches触摸事件、UIEventTypeMotion运动事件、UIEventTypeRemoteControl远程事件。

UIEventTypeTouches触摸事件,通过点击,拖拽,缩放等等触发。

UIEventTypeMotion运动事件,通过摇晃屏幕等触发。

UIEventTypeRemoteControl通过远程事件控制,或者耳机等触发。

UIEvent继承于NSObject.

在iOS当中,只有继承自UIResponder的类才能处理各种事件。

我们常用的UIView、UIViewController、UIApplication都继承自UIResponder,它们都能接收并处理事件。

@interface UIView : UIResponder <NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusEnvironment>

UIResponder中提供了处理上述三种UIEvent的方法,根据事件的类型有不同的处理方法。

当用户的一根手指触摸屏幕的时候会创建一个对应的UITouch,这个UITouch会记录手指运动的信息,比如说位置,时间,阶段等等。手指在屏幕的时候系统会更新同一个UITouch对象,如果手指离开了屏幕,这个UITouch对象就被销毁了。

我们可以发现处理点击事件的方法里有两个参数。

- (void)touchesBegan:(NSSet*)touches withEvent: (UIEvent*)event

⚠️:一次完整的触摸事件只会产生一个UIEvent对象,也就是说不管手指在屏幕上怎么移动都是一个UIEvent对象。

而touches这个NSSet里面,装着的是UITouch对象,从这个里面可以看出是单点触摸还是多点触摸。也就是说两个手指同时触摸屏幕,那么touches里就有两个UITouch对象。

⚠️: 如果有事件到来时,视图有附加的手势识别器,则手势识别器优先处理事件。如果手势识别器没有处理事件,则将事件交给视图处理,视图如果未处理则顺着响应者链继续向后传递。

也就是说手势识别器的优先级高于事件处理。如果手势在事件响应链中,那么手势会把这个响应链打断。

UIControl对于事件的处理会打破上面的规则。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/7905010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存