#import "DroppedPinAnnotation.h" #import "LocationCoordinate2DTransformer.h" #import "TimeIntervalTransformer.h" #import "NSValue+Additions.h" @implementation DroppedPinAnnotation { NSTimer *_timer; NSTimeInterval _priorShownTimeInterval; NSDate *_dateShown; NSValueTransformer *_coordinateTransformer; NSValueTransformer *_timeIntervalTransformer; } - (instancetype)init { if (self = [super init]) { _coordinateTransformer = [NSValueTransformer valueTransformerForName: NSStringFromClass([LocationCoordinate2DTransformer class])]; _timeIntervalTransformer = [NSValueTransformer valueTransformerForName: NSStringFromClass([TimeIntervalTransformer class])]; [self update:nil]; } return self; } - (void)dealloc { [self pause]; } - (void)setCoordinate:(CLLocationCoordinate2D)coordinate { super.coordinate = coordinate; [self update:nil]; } - (NSTimeInterval)elapsedShownTime { return _priorShownTimeInterval - _dateShown.timeIntervalSinceNow; } - (void)resume { _dateShown = [NSDate date]; _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(update:) userInfo:nil repeats:YES]; } - (void)pause { [_timer invalidate]; _timer = nil; _priorShownTimeInterval -= _dateShown.timeIntervalSinceNow; _dateShown = nil; } - (void)update:(NSTimer *)timer { NSString *coordinate = [_coordinateTransformer transformedValue: [NSValue valueWithCLLocationCoordinate2D:self.coordinate]]; NSString *elapsedTime = [_timeIntervalTransformer transformedValue:@(self.elapsedShownTime)]; self.subtitle = [NSString stringWithFormat:@"%@\nSelected for %@", coordinate, elapsedTime]; } @end