summaryrefslogtreecommitdiff
path: root/platform/macos/app/DroppedPinAnnotation.m
blob: 5b19fd7401eab1862acb1b4e3ad7a34f5e6f1496 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#import "DroppedPinAnnotation.h"

#import "LocationCoordinate2DTransformer.h"
#import "TimeIntervalTransformer.h"

#import <Mapbox/Mapbox.h>

static MGLCoordinateFormatter *DroppedPinCoordinateFormatter;

@implementation DroppedPinAnnotation {
    NSTimer *_timer;
    NSTimeInterval _priorShownTimeInterval;
    NSDate *_dateShown;
    
    NSValueTransformer *_timeIntervalTransformer;
}

+ (void)initialize {
    if (self == [DroppedPinAnnotation class]) {
        DroppedPinCoordinateFormatter = [[MGLCoordinateFormatter alloc] init];
    }
}

- (instancetype)init {
    if (self = [super init]) {
        _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 = [DroppedPinCoordinateFormatter stringFromCoordinate:self.coordinate];
    NSString *elapsedTime = [_timeIntervalTransformer transformedValue:@(self.elapsedShownTime)];
    self.subtitle = [NSString stringWithFormat:@"%@\nSelected for %@", coordinate, elapsedTime];
}

@end