1// 2// RNGestureHandlerRegistry.m 3// RNGestureHandler 4// 5// Created by Krzysztof Magiera on 12/10/2017. 6// Copyright © 2017 Software Mansion. All rights reserved. 7// 8 9#import "RNGestureHandlerRegistry.h" 10 11#import <React/RCTAssert.h> 12 13@implementation RNGestureHandlerRegistry { 14 NSMutableDictionary<NSNumber *, RNGestureHandler *> *_handlers; 15} 16 17- (instancetype)init 18{ 19 if ((self = [super init])) { 20 _handlers = [NSMutableDictionary new]; 21 } 22 return self; 23} 24 25- (RNGestureHandler *)handlerWithTag:(NSNumber *)handlerTag 26{ 27 return _handlers[handlerTag]; 28} 29 30- (void)registerGestureHandler:(RNGestureHandler *)gestureHandler 31{ 32 _handlers[gestureHandler.tag] = gestureHandler; 33} 34 35- (void)attachHandlerWithTag:(NSNumber *)handlerTag 36 toView:(UIView *)view 37 withActionType:(RNGestureHandlerActionType)actionType 38{ 39 RNGestureHandler *handler = _handlers[handlerTag]; 40 RCTAssert(handler != nil, @"Handler for tag %@ does not exists", handlerTag); 41 [handler unbindFromView]; 42 handler.actionType = actionType; 43 [handler bindToView:view]; 44} 45 46- (void)dropHandlerWithTag:(NSNumber *)handlerTag 47{ 48 RNGestureHandler *handler = _handlers[handlerTag]; 49 [handler unbindFromView]; 50 [_handlers removeObjectForKey:handlerTag]; 51} 52 53- (void)dropAllHandlers 54{ 55 for (NSNumber *tag in _handlers) { 56 RNGestureHandler *handler = _handlers[tag]; 57 [handler unbindFromView]; 58 } 59 60 [_handlers removeAllObjects]; 61} 62 63@end 64