iOS私有API(二) UIGestureRecognizerDelegate的两个函数

简介: UIGestureRecognizerDelegate有两个没公开的函数,只要重载了就会被调用。 即所有的UIGestureRecognizer子类.delegate = someInstance; 经过set以后,只要这个delegate实例里有这两个函数,就会被调用进入。

UIGestureRecognizerDelegate有两个没公开的函数,只要重载了就会被调用。

即所有的UIGestureRecognizer子类.delegate = someInstance; 经过set以后,只要这个delegate实例里有这两个函数,就会被调用进入。经过验证,这两个api是可以通过apple审查上app store的。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer canBePreventedByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer  
{  
    BOOL result = YES; 
// something you do  
    return result;  
}  
 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer canPreventGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer   
{  
    BOOL result = YES; 
// something you do  
    return result;  
}  

实际上UIGestureRecognizerDelegate这个Protocol有7个函数,公开的只有3个,我目前发现UIWebView系统有使用5个。

@protocol UIGestureRecognizerDelegatePrivate <UIGestureRecognizerDelegate> 
 
@optional 
- (BOOL)_gestureRecognizer:(id)arg1 canBePreventedByGestureRecognizer:(id)arg2; 
- (BOOL)_gestureRecognizer:(id)arg1 canPreventGestureRecognizer:(id)arg2; 
- (BOOL)_gestureRecognizer:(id)arg1 shouldReceiveTouch:(id)arg2; 
- (BOOL)_gestureRecognizer:(id)arg1 shouldRecognizeSimultaneouslyWithGestureRecognizer:(id)arg2; 
- (BOOL)_gestureRecognizerShouldBegin:(id)arg1; 
- (BOOL)_gestureRecognizer:(id)arg1 shouldBeRequiredToFailByGestureRecognizer:(id)arg2; 
- (BOOL)_gestureRecognizer:(id)arg1 shouldRequireFailureOfGestureRecognizer:(id)arg2; 
@end 

使用场景:

一个view上以及其superview和subviews上有很多个gestureRecognizers时,可以使用这两个函数做手势间的互斥。如函数名那般顾名思义,返回值为第一个手势能否阻止或被阻止第二个手势的触发。

系统使用示例:

UIWebView的非公开子view,UIWebDocumentView有使用到,经反汇编,其部分实现为:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer canBePreventedByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    BOOL result = NO; 
//    有部分代码省略
    if (_longPressGestureRecognizer != gestureRecognizer && _highlightLongPressGestureRecognizer != gestureRecognizer) 
        result = YES; 
    return result; 
} 
 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer canPreventGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    BOOL result = YES; 
//    有部分代码省略
    if (_highlightLongPressGestureRecognizer == gestureRecognizer || _longPressGestureRecognizer == gestureRecognizer) 
    { 
        Class cls = NSClassFromString(@"UIScrollViewPanGestureRecognizer"); 
        result = [otherGestureRecognizer isKindOfClass:cls] == NO; 
    } 
    return result; 
} 

目录
相关文章
|
6月前
|
人工智能 缓存 自然语言处理
构建智能天气助手:基于大模型API与工具函数的调用实践
在人工智能快速发展的今天,大语言模型(LLM)已经成为构建智能应用的重要基础设施。本文将介绍如何利用大模型API和工具函数集成,构建一个能够理解自然语言并提供精准天气信息的智能助手。
576 11
|
机器学习/深度学习 API iOS开发
探索iOS开发中的SwiftUI框架深入理解RESTful API设计原则与最佳实践
【7月更文挑战第30天】本文深入探讨了SwiftUI框架在iOS开发中的应用,分析了其对用户界面构建的简化方法及性能优化。通过比较传统UI构建方式与SwiftUI的差异,揭示了SwiftUI如何提高开发效率和用户体验。文章还讨论了SwiftUI在实际项目中的集成策略,并展望了其未来的发展方向。 【7月更文挑战第30天】在数字时代的浪潮中,RESTful API如同一座桥梁,连接着不同的软件系统。本文将探讨RESTful API的核心设计原则,揭示其背后的哲学思想,并通过实例分析展示如何将这些原则应用于实际开发中。我们将从资源定位、接口一致性到HTTP方法的恰当使用,逐一剖析,旨在为开发者提供
161 1
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之API生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
118 3
|
存储 Android开发 iOS开发
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
434 0
|
JSON 前端开发 API
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
133 4
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
|
12月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
Linux API
Linux源码阅读笔记07-进程管理4大常用API函数
Linux源码阅读笔记07-进程管理4大常用API函数
|
12月前
|
存储 程序员 API
【收藏】非API函数检测操作系统类型
【收藏】非API函数检测操作系统类型
|
API 开发工具 图形学
PicoVR Unity SDK⭐️五、常用API接口函数一览
PicoVR Unity SDK⭐️五、常用API接口函数一览
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
170 7