1// 2// RNRotationHandler.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 "RNRotationHandler.h" 10 11#if !TARGET_OS_TV 12@interface RNBetterRotationRecognizer : UIRotationGestureRecognizer 13 14- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler; 15 16@end 17 18@implementation RNBetterRotationRecognizer { 19 __weak RNGestureHandler *_gestureHandler; 20} 21 22- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler 23{ 24 if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) { 25 _gestureHandler = gestureHandler; 26 } 27 return self; 28} 29 30- (void)handleGesture:(UIGestureRecognizer *)recognizer 31{ 32 if (self.state == UIGestureRecognizerStateBegan) { 33 self.rotation = 0; 34 } 35 [_gestureHandler handleGesture:recognizer]; 36} 37 38- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 39{ 40 [super touchesBegan:touches withEvent:event]; 41 [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event]; 42} 43 44- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 45{ 46 [super touchesMoved:touches withEvent:event]; 47 [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event]; 48} 49 50- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 51{ 52 [super touchesEnded:touches withEvent:event]; 53 [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event]; 54} 55 56- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 57{ 58 [super touchesCancelled:touches withEvent:event]; 59 [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event]; 60} 61 62- (void)reset 63{ 64 [_gestureHandler.pointerTracker reset]; 65 [super reset]; 66} 67 68@end 69#endif 70 71@implementation RNRotationGestureHandler 72 73- (instancetype)initWithTag:(NSNumber *)tag 74{ 75 if ((self = [super initWithTag:tag])) { 76#if !TARGET_OS_TV 77 _recognizer = [[RNBetterRotationRecognizer alloc] initWithGestureHandler:self]; 78#endif 79 } 80 return self; 81} 82 83#if !TARGET_OS_TV 84- (RNGestureHandlerEventExtraData *)eventExtraData:(UIRotationGestureRecognizer *)recognizer 85{ 86 return [RNGestureHandlerEventExtraData forRotation:recognizer.rotation 87 withAnchorPoint:[recognizer locationInView:recognizer.view] 88 withVelocity:recognizer.velocity 89 withNumberOfTouches:recognizer.numberOfTouches]; 90} 91#endif 92 93@end 94