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

如何检测UIViewController外部的轻触/触摸

在iOS开发中,可以通过以下几种方式来检测UIViewController外部的轻触/触摸:

  1. UITapGestureRecognizer:可以通过给UIViewController的view添加一个UITapGestureRecognizer手势识别器来检测轻触事件。首先,创建一个UITapGestureRecognizer对象,并设置其回调方法。然后,将手势识别器添加到UIViewController的view上。当用户在UIViewController的view上进行轻触时,回调方法将被触发。

示例代码:

代码语言:txt
复制
// 创建手势识别器
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))

// 将手势识别器添加到view上
self.view.addGestureRecognizer(tapGesture)

// 手势回调方法
@objc func handleTap(_ gesture: UITapGestureRecognizer) {
    // 处理轻触事件
}
  1. UIResponder的touchesBegan方法:UIViewController是UIResponder的子类,可以重写UIResponder的touchesBegan方法来检测触摸事件。当用户在UIViewController的view上进行触摸时,touchesBegan方法将被调用。

示例代码:

代码语言:txt
复制
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)
    
    // 处理触摸事件
}
  1. UIWindow的hitTest方法:可以通过重写UIWindow的hitTest方法来检测触摸事件。首先,获取应用程序的主窗口(通常是UIApplication.shared.keyWindow)。然后,重写主窗口的hitTest方法,在方法中判断触摸点是否在UIViewController的view外部,并进行相应处理。

示例代码:

代码语言:txt
复制
class CustomWindow: UIWindow {
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let result = super.hitTest(point, with: event)
        
        if result == self.rootViewController?.view {
            // 触摸点在UIViewController的view外部
            // 处理触摸事件
        }
        
        return result
    }
}

// 在AppDelegate中设置自定义窗口
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    self.window = CustomWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = YourViewController()
    self.window?.makeKeyAndVisible()
    return true
}

以上是几种常见的检测UIViewController外部轻触/触摸的方法。根据具体需求和场景,选择适合的方法来实现相应的功能。

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

相关·内容

Android 手势识别应用:手把手教你学会 GestureDetector(含实例讲解)

用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开 / 拖动时onShowPress...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开

8.7K41

Carson带你学Android:手把手教你学会手势识别应用 GestureDetector

用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开 / 拖动时onShowPress...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开...用户轻触触摸屏,尚未松开或拖动 // 与onDown()区别:无松开 / 拖动 // 即:当用户点击时,onDown()就会执行,在按下瞬间没有松开

1.5K11

WPF 触摸底层 PenImc 是如何工作

在 WPF 里面有其他软件完全比不上超快速触摸,这个触摸是通过 PenImc 获取。...现在 WPF 开源了,本文就带大家来阅读触摸底层代码,阅读本文需要一点 C# 和 C++ 基础 现在 WPF 开源,所有源代码都可以在官方代码找到,本文只是让大家能够更快了解整个触摸代码和更快了解代码...,和知道对应功能在哪个代码 在WPF触摸 PenThreadWorker 调用 ThreadProc 方法,就通过 MS.Win32.Penimc.UnsafeNativeMethods.GetPenEvent...本文仅讨论在 PenThreadWorker 下层内容,在此上层内容,请看WPF 触摸到事件 那么在 PenImc 里面做了什么?...在 PenImc 原理里面,其实就是通过共享内存和 COM 方式通过 RealTimeStylus 方式快速获取触摸消息 先通过 WISPTIS_SM_SECTION_NAME 和 WISPTIS_SM_MUTEX_NAME

46510

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

5.1.4hitTest方法以及不规则区域内触摸事件处理方法 5.1.4.1hitTest:withEvent:方法流程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application...操作初始点所在视图(View),即需要将触摸事件传递给其处理视图,称之为hit-test view。...对于每个触摸操作都会有一个UITouch对象,UITouch对象用来表示一个触摸操作,即一个手指在屏幕上按下、移动、离开整个过程。...UITouch对象有一个view属性,表示此触摸操作初始发生所在视图,即上面检测hit-test view,此属性在UITouch生命周期不再改变,即使触摸操作后续移动到其他视图之上。...UIScrollView 5.1.5通过UIView对象获取其所属UIViewController 通过UIView对象获取该对象所属UIViewController可以使用UIResponder

1K20

断言和分段控制器1. 断言(Assertions)2. 分段控制器(UISegmentedControl)

例如:判断是否是UIViewController 字类 NSAssert([class isSubclassOfClass:[UIViewController class]], @"----...UIControlEventTouchDownRepeat: 多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指时候。...UIControlEventTouchDragEnter: 当触摸从控件窗口之外拖动到内部时。 UIControlEventTouchDragExit: 当触摸从控件窗口内部拖动到外部时。...UIControlEventTouchUpOutside: 所有在控件之外触摸抬起事件 UIControlEventTouchCancel: 所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,...UIControlEventAlltouchEvents: 通知所有触摸事件。 UIControlEventAllEditingEvents: 通知所有关于文本编辑事件。

78530

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

1.1 触摸事件 UIApplication、UIViewController、UIView都继承于UIResponder。...响应触摸事件都是屏幕上界面元素,而且必须是继承自UIResponder类界面类(包括各种常见视图类及其视图控制器类,如UIView和UIViewController)才可以响应触摸事件。...其中,前者用于递归寻找命中者,后者则是检测当前视图是否被命中,即触摸点坐标是否在视图内部。...方法进行迭代命中检测。...命中检测具体迭代过程为:如果触摸点在当前视图内,那么递归对当前视图内部所有的子视图进行命中检测;如果不在当前视图内,那么返回NO停止迭代。这样最终会确定屏幕上最顶部命中视图元素,即命中者。

1.1K30

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

一、概念介绍 UIGestureRecognizer是一个抽象类,定义了所有手势基本行为,使用它子类才能处理具体手势 UITapGestureRecognizer(轻触,点按) UILongPressGestureRecognizer...默认是NO,这种情况下当发生一个触摸时,手势识别器先捕捉到到触摸,然后发给触摸控件,两者各自做出响应。...只有在识别失败之后才会将触摸事件发给触摸控件,这种情况下控件view响应会延迟约0.15ms。...,点按) 1、 设置能识别到手势最少轻触次数(默认为1) @property (nonatomic) NSUInteger numberOfTapsRequired; 2、 设置能识别到手势最少手指个数...tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)]; // 设置能识别到手势最少轻触次数

2.8K80

iOS14开发-触摸与手势识别

记录了触摸事件产生或变化时时间。 (5)phase:触摸事件周期,即触摸开始、触摸点移动、触摸结束和中途取消。 方法 // 返回一个CGPoint类型值,表示触摸在view上位置。...AppDelegate、UIApplication、UIWindow、UIViewController、UIView 都继承自 UIResponder,因此它们都是响应者对象,都能够接收并处理触摸事件。...触摸事件传递与响应 当触摸事件产生以后,App 里有很多 UIView 或 UIViewController,到底应该谁去响应这个事件呢?...默认next对象为: (1)UIView:若当前响应者是 UIViewController view,则next是 UIViewController,否则上一个响应者是其父 UIView。...(2)UIViewController:若当前响应者是 UIWindow rootViewController,则next是 UIWindow;若是被 present 显示则next是presentingViewController

2.2K20

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

iOS中,hit-Testing作用就是找出这个触摸点下面的View是什么,HitTest会检测这个点击点是不是发生在这个View上,如果是的话,就会去遍历这个Viewsubviews,直到找到最小能够处理事件...来一个简单图说明一下 假设我们现在点击到了图中E,hit-testing将进行如下步骤检测(不包含重写hit-test并且返回非默认View情况) 1、触摸点在ViewA内,所以检查ViewA...Subview B、C; 2、触摸点不在ViewB内,触摸点在ViewC内部,所以检查ViewCSubview D、E; 3、触摸点不在ViewD内,触摸点发生在ViewE内部,并且ViewE没有...也是比较聪明检测过程中有这么一点,就是说如果点击没有发生在某View中,那么该事件就不可能发生在ViewSubview中,所以检测过程中发现该事件不在ViewB内,也直接就不会检测在不在ViewF...4.1.3事件检测实现 Hit-Test检查机制如上所示,当确定了Hit-TestView时,如果当前application没有忽略触摸事件(UIApplication:isIgnoringInteractionEvents

60810

如何设计一个安全外部接口?

0x02 安全需求 对接口功能设计、建模初期主要思考下列两个方面的问题: 如何保证数据在传输过程中安全性? 数据在到达服务端后,服务端如何识别数据,如何不被攻击?...但是我们要知道加密部分其实只是在客户端和服务端数据传输过程中,也就是说客户端和服务端是直接交互,假如客户端在本地安装了某个中间人代理证书,那么客户端与服务端通信就变成了“客户端->代理服务器”...3.4 AppID校验 对于部分业务功能来说,并不是谁都能使用,大部分网站基本都需要用户名和密码才能登录,这是一种有效验证请求合法性安全机制;对应对外提供接口其实也需要这么一种机制,并不是谁都可以调用...,需要使用接口用户需要在后台开通appid,提供给用户相关密钥;在调用接口中需要提供appid+密钥,服务器端会进行相关验证。...每个系统都有自己验证规则,当然也可能有一些常规性规则,比如参数长度、参数类型,参数业务场景合法性等。

1.4K60

iOS图片浏览器(功能强大性能优越)

不过这样并不优雅,意味着我们很多代码和类必须搞到同一文件,才能达到外部无法直接访问,而内部可以访问目的。...尽管我们将属性写在.m中隔离外部访问,实际上用户仍然可以用 KVC 方式读写,那么我们框架组件内部为何不使用 KVC 进行读写?...但是,有个容易忽略问题,在拖动时候我们希望看到效果是图片跟随手指移动并且缩小,上图左右两种状态下箭头指向正是手指拖动触摸点(理想状态),若写一个移动和缩放比例变化之间是线性动画,手指触摸点会是这种理想状态么...这里有一个点需要注意,若我们执行了预下载,而在图片浏览器打开时候,图片仍未预下载完成,而此刻又会执行正式下载,它们之间如何信息同步?...七、屏幕旋转UI适配 找到组件必然支持方向 组件支持了旋转功能,由于采用UIViewController 作为底类,理所当然是让组件内部子控件跟随 UIViewController 旋转而旋转

2.2K70

IOS触摸事件分发机制详解

怎么在一个页面处理手绘、表情拖动放缩、文本编辑三种消息 阅读本文,你会明白两个问题:IOS如何找到响应者、响应者是如何做出响应,明白这两个问题你就能解决类似上述疑难杂症。...通过控制Hit-test view 、人为干预响应者能否对这一事件作出响应最终来控制触摸事件分发机制。...Hit-Testing就完美的解决了这个问题,通过检测触摸点是否在相关视图边界范围内,如果在,就继续递归检测该视图所有子视图,离用户最近那个视图边界如果包含触摸点,那么它就是我们要找Hit-Test...以下图片很能说明响应链是如何传递。 ?...应用 扩大按钮点击区域 当视图调用 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 进行边界检测时候,重写该方法扩大视图检测边界值

3.5K90

MCU如何实现对外部脉冲信号计数功能?

有的传感器会输出脉冲信号,MCU需要统计脉冲输入个数,通常有如下实现方式: 1.GPIO中断 原理很简单,利用GPIO上升沿或者下降沿中断,进中断次数就是脉冲个数。...它原理和上述GPIO中断类似,只不过用是定时器输入捕获中断。...而计数器是对外部脉冲进行计数,即外部引脚每发生一次变化,计数器就计数一次。 可以将外部脉冲信号接入到MCUTIMx_ETR引脚,就可以使用MCU定时器来计数。...它使用也很简单,主要就是配置TIMx_SMCR寄存器(slave mode control register),具体可以参考芯片参考手册。 可以看到定时器CNT值就是脉冲个数。...总结: 1)尽量使用TIMER ETR引脚通过计数器方式来实现脉冲计数,如果条件不允许,外部脉冲输入频率不是很高,也可以使用GPIO中断来实现,不过还是要同时考虑高频中断对整体系统影响。

72920

如何配置一个无线旋转外部

大家都知道马达是可以没有任何限位进行无限制旋转,那么机器人是否可以配置这样外部轴呢?具体怎么操作呢?...BGM 无限旋转外部轴配置 配置一个外部轴 配置一个外部基本方法前面几篇也写过了,所以如果你基础还不太懂得话请你考古学习一下吧 配置无限旋转轴 在外部轴配置过程中有这样一个选项,“轴型号”...而外部轴也是通过一个指令来控制 当然如果这个选项不够选的话也是可以通过程序中指令来设置外部轴不同步。 另外还有一种方式配置无限旋转轴。...无限旋转指令 为了让外部轴无限旋转实际上我们采用是设置一个非常大角度让外部轴一直转。...ASYCANCEL {E1} 对了外部轴不同步的话,外部速度也不能同步了,必须单独设置外部速度 $OV_ASYNC 如此操作就可以实现一个外部无线旋转了。

66620

iOS14开发-入门知识

Cocoa Touch 层为应用程序开发提供了各种有用框架,并且大部分与用户界面有关,它负责用户在 iOS 设备上触摸交互操作以及一些其他关键功能。 创建第一个iOS项目 ?...UIView与UIViewController关系 UIViewController 中默认有一个和屏幕一样大 UIView,UIViewController 管理着它生命周期。...所有放在界面上 UI 控件都放在 UIViewController UIView 之上,在 UIViewController 代码中可以通过self.view属性获取它。...removeFromSuperview:将视图从父视图中移除(需提前讲解触摸方法)。 viewWithTag:根据 tag 值获取视图。 insertSubview:在指定视图上/下面插入视图。...@IBOutlet与@IBAction 引入 如何在代码中获取 Storyboard 中自定义 UIView?

2.8K40

WPF 如何确定应用程序开启了 Pointer 触摸消息支持

因为 WPF 在开启 Pointer 和没有开启基础表现几乎相同,因此从业务层很难了解到当前是否开启了 Pointer 消息。...本文从开发者角度,通过 Windows 消息判断当前是否开启 Pointer 支持 在 win10 支持默认把触摸提升 Pointer 消息 告诉大家如何在 Win10 下让 WPF 在 .NET 4.7...和以上框架支持 Pointer 消息 那么如何确定这个 WPF 程序我写对了,开启了 Pointer 消息?...可以通过监听 Window 消息,如果能收到 Pointer 消息,那么算开启成功 不需要在用户端判断,用户端只需要判断 运行系统是 Windows 10 Creators Update 1703...因此本文更多是给开发端,开发时候通过此方法可以确定是否开启了 Pointer 消息 在 WPF 添加窗口消息钩子方法 这篇博客告诉大家如何拿到窗口消息 在这个基础上,尝试在拿到消息判断是否 Pointer

62720
领券