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

在创建UIGestureRecognizer时,为什么它的操作使用#选择器?

在创建UIGestureRecognizer时,它的操作使用#选择器是因为#选择器可以方便地将手势识别器与特定的方法关联起来。#选择器是一种在Objective-C中使用的语法,用于指定一个方法的名称。通过使用#选择器,我们可以将手势识别器与我们自定义的方法进行绑定,当手势被触发时,系统会自动调用该方法。

使用#选择器的优势在于它提供了一种简洁而直观的方式来处理手势识别器的操作。通过将操作与特定的方法关联起来,我们可以在方法中编写相应的逻辑来处理手势的触发事件。这样,我们可以轻松地实现各种手势的响应,例如点击、拖动、缩放等。

在iOS开发中,UIGestureRecognizer是一个抽象基类,用于处理各种手势的识别和处理。它有多个子类,每个子类对应一种具体的手势,例如UITapGestureRecognizer、UIPanGestureRecognizer等。当我们创建一个手势识别器时,需要指定一个目标对象和一个方法来处理手势的触发事件。这个方法就是通过#选择器来指定的。

以下是一个示例代码,展示了如何使用#选择器创建一个UITapGestureRecognizer手势识别器,并将其与一个方法进行关联:

代码语言:swift
复制
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))

@objc func handleTap(_ gesture: UITapGestureRecognizer) {
    // 处理手势触发事件的逻辑
}

在上述代码中,我们创建了一个UITapGestureRecognizer手势识别器,并将其与名为handleTap的方法进行关联。当手势被触发时,系统会自动调用handleTap方法,并将手势对象作为参数传递给该方法。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),该产品提供了一套全面的移动应用数据分析解决方案,可帮助开发者深入了解用户行为、应用性能等信息,从而优化应用体验和运营策略。产品介绍链接地址:https://cloud.tencent.com/product/mta

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

相关·内容

iOS 中的事件响应

优先级 当我们在一个添加了手势的UIResponder上执行非连续的双击操作,触发的回调消息如下表所示。...手势之间的依赖关系 当触摸事件发生时,哪个 UIGestureRecognizer 先收到这个事件并没有固定的顺序,我们可以使用UIGestureRecognizer 提供的方法来控制它们之间的顺序和相互关系...: UITouch) -> Bool 上述两个方法都是用来决定是否允许 UIGestureRecognizer 响应触摸事件的,区别在于当触摸事件发生时, 使用第一个方法可以立即控制 UIGestureRecognizer...是否对其处理,且不会修改 UIGestureRecognizer 的状态机;(时机在 手势touchesBegan前) 使用二个方法会等待一段时间,在 UIGestureRecognizer 识别手势转换状态时调用...delegate 时,我们可以使用这个方法来使 UIGestureRecognizer 失效。

2.8K11
  • iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用

    iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 一、引言         在iOS系统中,手势是进行用户交互的重要方式,通过UIGestureRecognizer类,...我们可以轻松的创建出各种手势应用于app中。...二、手势的抽象类——UIGestureRecognizer         UIGestureRecognizer将一些和手势操作相关的方法抽象了出来,但它本身并不实现什么手势,因此,在开发中,我们一般不会直接使用... *)ges{     NSLog(@"第一个手势的触发方法"); } 上面我们使用了拖拽手势和touchesMoved两个触发方式,当我们把cancelTouchesInView设置为NO时,在屏幕上滑动...第二个手势的触发方法");           } 我们添加的两个手势都是单机手势,会产生冲突,触发是很随机的,如果我们想设置一下当手势互斥时要优先触发的手势,可以使用如下的方法: - (void)requireGestureRecognizerToFail

    2K20

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

    一、概念介绍 UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer(轻触,点按) UILongPressGestureRecognizer...只有在识别失败之后才会将触摸事件发给触摸到的控件,这种情况下控件view的响应会延迟约0.15ms。...: 1、 开始进行手势识别时调用的方法,返回NO则结束识别,不再触发手势,用处:可以在控件指定的位置使用手势识别 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer...*)gestureRecognizer; 2、手指触摸屏幕后回调的方法,返回NO则不再进行手势识别,方法触发等 此方法在window对象在有触摸事件发生时,调用gesture recognizer的...; 5、下面这个两个方法也是用来控制手势的互斥执行的 (1) 这个方法返回YES,第一个手势和第二个互斥时,第一个会失效 - (BOOL)gestureRecognizer:(UIGestureRecognizer

    3.1K81

    手势的抽象类——UIGestureRecognizer三. UIGestureRecogni

    利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势。...UIGestureRecognizer是一个抽象类,对iOS中的事件传递机制面向应用进行封装,将手势消息的传递抽象为了对象。其中定义了所有手势的基本行为,使用它的子类才能处理具体的手势。 二....手势的抽象类——UIGestureRecognizer UIGestureRecognizer将一些和手势操作相关的方法抽象了出来,但它本身并不实现什么手势,因此,在开发中,我们一般不会直接使用UIGestureRecognizer...初始化方法 UIGestureRecognizer类为其子类准备好了一个统一的初始化方法,无论什么样的手势动作,其执行的结果都是一样的:触发一个方法,可以使用下面的方法进行统一的初始化: - (instancetype...设置为NO时,在屏幕上滑动,两种方式都在触发,打印如下: ?

    2.6K50

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

    1 touchesBegan手势         iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式:     - (void)touchesBegan...2 UIGestureRecognizer         iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类。...的继承关系如下: 2.1 使用手势的步骤         使用手势很简单,分为两步:         创建手势实例。...当创建手势时,指定一个回调方法,当手势开始,改变、或结束时,回调方法被调用。         添加到需要识别的View中。...缩放和旋转有点问题,估计是因为在模拟器上的模拟的两个接触点距离在imageView的边界外了,所以操作无效果。建议在真机上运行这个手势。

    51740

    解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

    原文发表在我的博客 肘子的Swift记事本视图变化在前、状态变化在后在 SwiftUI 中,某些可编程控件在执行一定的操作时,会先更新视图,待视图变化完成后再修改与其对应的状态。...它的复现条件非常简单:在真机上测试( 模拟器上不容易复现 )点击 “GO” 按钮进入下一层视图点击 “Show Sheet” 按钮弹出 Sheet通过下滑手势取消 Sheet在 Sheet 取消后(动画结束时...SheetDetailView 的代码后,我们不再使用手势来取消 Sheet,而是通过点击 “Dismiss” 按钮来实现这一操作。...它的复现条件如下:iOS 16 系统,在真机或模拟器上测试点击视图列表中的按钮,可以进入下一级视图。...在我们遇到问题的两个场景中,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态。

    761110

    解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

    视图变化在前、状态变化在后 在 SwiftUI 中,某些可编程控件在执行一定的操作时,会先更新视图,待视图变化完成后再修改与其对应的状态。这些控件基本上都是对 UIkit(AppKit)的二次包装。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误的结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作时,状态更新的滞后会导致不可接受的后果。...SheetDetailView 的代码后,我们不再使用手势来取消 Sheet,而是通过点击 “Dismiss” 按钮来实现这一操作。...它的复现条件如下: iOS 16 系统,在真机或模拟器上测试 点击视图列表中的按钮,可以进入下一级视图。...在我们遇到问题的两个场景中,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态。

    37020

    iOS - 实现UINavigation全屏滑动返回(二)

    回顾 在 iOS - 实现UINavigation全屏滑�动返回(一) 中我们实现了滑动返回的功能,但不是全屏滑动返回,得在左侧边缘轻扫才能滑动返回~UINavigationController自带的只能在边缘轻扫才能滑动返回...思路 既然自带的滑动返回只能是在边缘,那我们能不能修改使它触摸范围变大甚至全屏呢?...action:@selector(handleNavigationTransition:)]; [self.view addGestureRecognizer:pan]; 添加一个拖动手势,让他执行系统手势的操作...,在UIGestureRecognizer提供的方法中我们可以推断出一定有target,而且还是强引用的私有属性!...向右滑动,接着点击Button 如图所示,在最后里回到根控制器界面后我再一次向右滑动,接着点击Button,它没有将FirstVC弹出,这就是传说中的bug,那我们现在在做的,就是在根控制器不让滑动返回生效

    1.3K40

    iOS14开发-触摸与手势识别

    属性 (1)window:触摸时所处的 UIWindow。 (2)view:触摸时所处的 UIView。 (3)tapCount:短时间内点按屏幕的次数。可据此判断单击和双击操作。...-> CGPoint UIEvent 一个完整的触摸操作是一个 UIEvent,它包含一组相关的 UITouch 对象,可以通过 UIEvent 的allTouches属性获得 UITouch 的集合。...遍历每一个子 UIView 时,都会重复上面的操作(判断能否响应触摸事件,能则继续遍历子 UIView,直到找到一个 UIView)直到找到最合适的 UIView。...使用步骤 创建手势实例,指定回调方法,当手势开始,改变、或结束时,回调方法被调用。 将手势添加到需要的 UIView 上。...每个手势只对应一个 UIView,当屏幕触摸在当前 UIView 里时,如果手势和预定的一样,回调方法就会调用。 手势可以通过 storyboard 或者纯代码使用。

    2.3K20

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

    iOS设备现如今大受欢迎的最重要原因之一就在于其开创了触控操作的潮流。发展到现在,无论是Android还是iPhone,现在APP与用户进行交互,基本上都是依赖于各种各样的触控事件。...系统这里的原则其实是越具体越好,也就是干活的肯定是最小的那个小兵兵。要是什么事情都让UIApplication或者UIWindow干,还不让它两儿累死啊,那系统效率要低成神马样子。...- iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度 3.1手势识别器(UIGestureRecognizer) 为了完成手势识别...,必须借助于手势识别器——UIGestureRecognizer 利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势 UIGestureRecognizer是一个抽象类...的使用步骤如下: //创建手势识别器对象 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; //设置手势识别器对象的具体属性

    2.3K40

    iOS_38_手势

    UITouch对象实时更新 一个UITouch对象,相应一根手指,记录着触摸时的全部信息 重要~常常使用UITouch的方法,取得触摸时的信息(如位置、所点对象) 事件对象UIEvent...,经常使用的属性是:事件类型 触摸的四个方法(即过程)具体解释:注意同一时候和一前一后触摸的情况 必须先找到事件的最合适的响应者(从父到子地找) 以下是寻找最合适的事件响应者详细样例:...NEXT RESPONDER) 传统监听事件的做法:(不再推荐使用) 六种手势识别器,后面会详细举例: 假设要同一时候监听两种以上的手势: 为每个手势设置delegate,而且实现以下的方法...:(UIGestureRecognizer *) 手势识别器的标准做法:三步曲(创建、设置、绑定) 重点关注三种手势识别的状态:開始\结束\取消 官方文档中关于手势识别的状态变化图...Tap手势识别器对象,同一时候绑定监听方法(识别到了相应的手势,就会调用监听方法) UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc

    93320

    iOS 小技能:响应者链的事件传递过程、手势识别器的使用步骤、抽屉效果的实现

    利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势。...是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 子类: UITapGestureRecognizer(敲击) UIPinchGestureRecognizer(捏合,用于缩放)...UIRotationGestureRecognizer(旋转) UILongPressGestureRecognizer(长按) 2、 UITapGestureRecognizer 1.2 手势识别器的使用步骤...每一个手势识别器的用法都差不多,比如UITapGestureRecognizer的使用步骤: //创建手势识别器对象 UITapGestureRecognizer *tap = [[UITapGestureRecognizer...:@selector(tapIconView:)]; 1.3 手势识别器的使用 // #import "ViewController.h" @interface ViewController

    90330

    ios 百度地图 获取拖动或缩放手势

    在项目中遇到一个问题,在拖动或者缩放百度地图的时候要请求数据。但是百度地图SDK中没有明确如何获取拖动和缩放手势 官方推荐使用如下两个方法,通过判断状态来获取,但是也没有明确怎么判断。...还有个问题就是如果在regionDidChangeAnimated请求数据的话,产品还有个需百度地图的中心点以最新一条数据的经纬度移动。...animated 是否动画 */ - (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated; 这里推荐使用自定义手势来判断...注意:加自定义手势时,必须设置UIGestureRecognizer的属性cancelsTouchesInView 和 delaysTouchesEnded 为NO,否则影响地图内部的手势处理。...addGestureRecognizer:mapPinchGesture]; /** 百度地图拖动手势 @param gesture 手势 */ - (void)mapPanGesture:(UIGestureRecognizer

    1.6K30

    iOS右滑返回的实现(interactivePopGestureRecognizer)

    引言 原理:利用系统的返回手势interactivePopGestureRecognizer进行实现 使用场景:返回按钮有点小,不好触发返回时,可借助右滑返回来提升用户体验 ?...,返回NO不允许右滑手势的激活 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if...,返回NO不允许右滑手势的激活 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if...,发生当前不可以手势返回,可先检查为什么当前状态,系统不允许你的手势返回,例如是否隐藏了 navigationBar,或者隐藏了系统的返回按钮?...方法将手势返回强制加回来 2.3 动态添加方法 使用场景: 在消息发送和消息转发时会用到动态添加方法 全局控制返回手势 下面的+addMethod方法有三个参数,第一个参数是要添加方法的类,第二个参数是方法的

    3.3K20

    非阻塞编程核心设计之Selector

    为什么使用 Selector? 使用选择器(selector),我们可以使用一个线程而不是多个线程,使用一个线程来管理多个通道(channel)。...创建一个Selector 创建一个Selector很简单,调用Selector类的静态open方法就可以创建一个选择器(Selector),该方法将使用系统默认的选择器(selector)的provider...注册已选通道 为了使选择器监视任何通道,我们必须让这些通道注册在选择器上。 我们通过调用已选通道register的方法来实现。 但在通道注册到选择器之前,它必须处于非阻塞模式: ?...它包含一些重要的属性,我们必须理解,以便能够使用通道上的选择器。 我们将在以下子节中查看这些属性。 6.1....start()方法是用来在单元测试的时候启动server的。 8.2. Client端代码 ? 客户端比服务器简单。 我们使用单例模式在静态start方法中实例化它。

    1.2K90
    领券