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
|