Nobody outside RCTTouchHandler should treat it as UIGestureRecognizer subclass
Reviewed By: mmmulani Differential Revision: D4387821 fbshipit-source-id: 8060772a5de669eeaca159ceac13b995d7518a1b
This commit is contained in:
parent
2e4be1c2c9
commit
47f18bdb17
|
@ -380,7 +380,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:(NSCoder *)aDecoder)
|
|||
_bridge = bridge;
|
||||
self.reactTag = reactTag;
|
||||
_touchHandler = [[RCTTouchHandler alloc] initWithBridge:_bridge];
|
||||
[self addGestureRecognizer:_touchHandler];
|
||||
[_touchHandler attachToView:self];
|
||||
[_bridge.uiManager registerRootView:self withSizeFlexibility:sizeFlexibility];
|
||||
self.layer.backgroundColor = NULL;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,10 @@
|
|||
@interface RCTTouchHandler : UIGestureRecognizer
|
||||
|
||||
- (instancetype)initWithBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (void)attachToView:(UIView *)view;
|
||||
- (void)detachFromView:(UIView *)view;
|
||||
|
||||
- (void)cancel;
|
||||
|
||||
@end
|
||||
|
|
|
@ -64,6 +64,21 @@
|
|||
|
||||
RCT_NOT_IMPLEMENTED(- (instancetype)initWithTarget:(id)target action:(SEL)action)
|
||||
|
||||
- (void)attachToView:(UIView *)view
|
||||
{
|
||||
RCTAssert(self.view == nil, @"RCTTouchHandler already has attached view.");
|
||||
|
||||
[view addGestureRecognizer:self];
|
||||
}
|
||||
|
||||
- (void)detachFromView:(UIView *)view
|
||||
{
|
||||
RCTAssertParam(view);
|
||||
RCTAssert(self.view == view, @"RCTTouchHandler attached to another view.");
|
||||
|
||||
[view removeGestureRecognizer:self];
|
||||
}
|
||||
|
||||
typedef NS_ENUM(NSInteger, RCTTouchEventType) {
|
||||
RCTTouchEventTypeStart,
|
||||
RCTTouchEventTypeMove,
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
|
||||
#import "RCTModalHostView.h"
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import "RCTAssert.h"
|
||||
#import "RCTBridge.h"
|
||||
#import "RCTModalHostViewController.h"
|
||||
|
@ -16,8 +18,6 @@
|
|||
#import "RCTUIManager.h"
|
||||
#import "UIView+React.h"
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@implementation RCTModalHostView
|
||||
{
|
||||
__weak RCTBridge *_bridge;
|
||||
|
@ -87,7 +87,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:coder)
|
|||
{
|
||||
RCTAssert(_reactSubview == nil, @"Modal view can only have one subview");
|
||||
[super insertReactSubview:subview atIndex:atIndex];
|
||||
[subview addGestureRecognizer:_touchHandler];
|
||||
[_touchHandler attachToView:subview];
|
||||
subview.autoresizingMask = UIViewAutoresizingFlexibleHeight |
|
||||
UIViewAutoresizingFlexibleWidth;
|
||||
|
||||
|
@ -99,7 +99,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:coder)
|
|||
{
|
||||
RCTAssert(subview == _reactSubview, @"Cannot remove view other than modal view");
|
||||
[super removeReactSubview:subview];
|
||||
[subview removeGestureRecognizer:_touchHandler];
|
||||
[_touchHandler detachFromView:subview];
|
||||
_reactSubview = nil;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#import "RCTBridge.h"
|
||||
#import "RCTModalHostView.h"
|
||||
#import "RCTModalHostViewController.h"
|
||||
#import "RCTTouchHandler.h"
|
||||
#import "RCTShadowView.h"
|
||||
#import "RCTUtils.h"
|
||||
|
||||
|
|
Loading…
Reference in New Issue