1 2 3// 4// RNPinchHandler.m 5// RNGestureHandler 6// 7// Created by Krzysztof Magiera on 12/10/2017. 8// Copyright © 2017 Software Mansion. All rights reserved. 9// 10 11#import "RNPinchHandler.h" 12 13#if !TARGET_OS_TV 14@interface RNBetterPinchRecognizer : UIPinchGestureRecognizer 15 16- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler; 17 18@end 19 20@implementation RNBetterPinchRecognizer { 21 __weak RNGestureHandler *_gestureHandler; 22} 23 24- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler 25{ 26 if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) { 27 _gestureHandler = gestureHandler; 28 } 29 return self; 30} 31 32- (void)handleGesture:(UIGestureRecognizer *)recognizer 33{ 34 if (self.state == UIGestureRecognizerStateBegan) { 35 self.scale = 1; 36 } 37 [_gestureHandler handleGesture:recognizer]; 38} 39 40- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 41{ 42 [super touchesBegan:touches withEvent:event]; 43 [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event]; 44} 45 46- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 47{ 48 [super touchesMoved:touches withEvent:event]; 49 [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event]; 50} 51 52- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 53{ 54 [super touchesEnded:touches withEvent:event]; 55 [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event]; 56} 57 58- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 59{ 60 [super touchesCancelled:touches withEvent:event]; 61 [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event]; 62} 63 64- (void)reset 65{ 66 [_gestureHandler.pointerTracker reset]; 67 [super reset]; 68} 69 70@end 71#endif 72 73@implementation RNPinchGestureHandler 74 75- (instancetype)initWithTag:(NSNumber *)tag 76{ 77 if ((self = [super initWithTag:tag])) { 78#if !TARGET_OS_TV 79 _recognizer = [[RNBetterPinchRecognizer alloc] initWithGestureHandler:self]; 80#endif 81 } 82 return self; 83} 84 85#if !TARGET_OS_TV 86- (RNGestureHandlerEventExtraData *)eventExtraData:(UIPinchGestureRecognizer *)recognizer 87{ 88 return [RNGestureHandlerEventExtraData forPinch:recognizer.scale 89 withFocalPoint:[recognizer locationInView:recognizer.view] 90 withVelocity:recognizer.velocity 91 withNumberOfTouches:recognizer.numberOfTouches]; 92} 93#endif 94 95@end 96