2014 snapchat source code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // SCLongPressGestureRecognizer.m // SCCamera // // Created by Pavlo Antonenko on 4/28/15. // Copyright (c) 2015 Snapchat, Inc. All rights reserved. //
#import "SCLongPressGestureRecognizer.h"
#import <SCFoundation/SCLog.h>
#import <UIKit/UIGestureRecognizerSubclass.h>
@implementation SCLongPressGestureRecognizer { CGPoint _initialPoint; CGFloat _initialTime; }
- (instancetype)initWithTarget:(id)target action:(SEL)action { self = [super initWithTarget:target action:action]; if (self) { _allowableMovementAfterBegan = FLT_MAX; _timeBeforeUnlimitedMovementAllowed = 0.0; } return self; }
- (void)reset { [super reset]; _initialPoint = CGPointZero; _initialTime = 0; _forceOfAllTouches = 1.0; _maximumPossibleForceOfAllTouches = 1.0; self.failedByMovement = NO; }
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; _initialPoint = [self locationInView:self.view]; _initialTime = CACurrentMediaTime(); _forceOfAllTouches = 1.0; for (UITouch *touch in touches) { _maximumPossibleForceOfAllTouches = MAX(touch.maximumPossibleForce, _maximumPossibleForceOfAllTouches); _forceOfAllTouches = MAX(touch.force, _forceOfAllTouches); } }
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [super touchesMoved:touches withEvent:event];
_forceOfAllTouches = 1.0; for (UITouch *touch in touches) { _maximumPossibleForceOfAllTouches = MAX(touch.maximumPossibleForce, _maximumPossibleForceOfAllTouches); _forceOfAllTouches = MAX(touch.force, _forceOfAllTouches); }
if (!CGPointEqualToPoint(_initialPoint, CGPointZero)) { CGPoint currentPoint = [self locationInView:self.view];
CGFloat distance = hypot(_initialPoint.x - currentPoint.x, _initialPoint.y - currentPoint.y); CGFloat timeDifference = CACurrentMediaTime() - _initialTime;
if (distance > self.allowableMovementAfterBegan && timeDifference < self.timeBeforeUnlimitedMovementAllowed) { SCLogGeneralInfo(@"Long press moved %.2f > %.2f after %.3f < %.3f seconds, and is cancelled", distance, self.allowableMovementAfterBegan, timeDifference, self.timeBeforeUnlimitedMovementAllowed); self.state = UIGestureRecognizerStateFailed; self.failedByMovement = YES; } } }
- (void)setEnabled:(BOOL)enabled { SCLogGeneralInfo(@"Setting enabled: %d for %@", enabled, self); [super setEnabled:enabled]; }
- (BOOL)isUnlimitedMovementAllowed { return CACurrentMediaTime() - _initialTime > self.timeBeforeUnlimitedMovementAllowed; }
@end
|