iOS私有API(二) UIGestureRecognizerDelegate的两个函数
2013-03-18 20:30
573 查看
UIGestureRecognizerDelegate有两个没公开的函数,只要重载了就会被调用。
即所有的UIGestureRecognizer子类.delegate = someInstance; 经过set以后,只要这个delegate实例里有这两个函数,就会被调用进入。经过验证,这两个api是可以通过apple审查上app store的。
实际上UIGestureRecognizerDelegate这个Protocol有7个函数,公开的只有3个,我目前发现UIWebView系统有使用5个。
使用场景:
一个view上以及其superview和subviews上有很多个gestureRecognizers时,可以使用这两个函数做手势间的互斥。如函数名那般顾名思义,返回值为第一个手势能否阻止或被阻止第二个手势的触发。
系统使用示例:
UIWebView的非公开子view,UIWebDocumentView有使用到,经反汇编,其部分实现为:
即所有的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; }
相关文章推荐
- ios开发(十九)利用 UIGestureRecognizerDelegate 移动的控件
- IOS 手势、手势响应器UIGestureRecognizer
- ios私有API各种坑
- UIGestureRecognizerDelegate设置响应事件优先级
- iOS学习之—— UIGestureRecognizerState的简单了解
- IOS应用加载本地WebView禁止进行缓存(使用私有api)
- IOS delegate 委托 使用 两个View之间传数据
- iOS私有API(一) -[UIApplication _cancelAllTouches]
- ios使用私有api被拒
- iOS开发之私有API No.1 私有API的查找和生成
- iOS私有API 以及api与sdk的解释
- UIGestureRecognizerDelegate
- IOS监听通话状态(私有API)
- class-dump获取iOS私有api
- IOS-AppDelegate中de每个函数的作用及回调机制
- IOS应用加载本地WebView禁止进行缓存(使用私有api)
- IOS私有API的使用(转)
- RuntimeBrowser查看iOS系统私有API
- iOS使用privateframework(私有api)开启蓝牙教程
- iOS手势学习UIGestureRecognizer & cocos2d 手势推荐