blob: 87f6c18f334858cb4833e8770ae203877181565a (
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#import "MGLStyleLayer_Private.h"
#import "MGLMapView_Private.h"
#include <mbgl/style/layer.hpp>
@interface MGLStyleLayer ()
@property (nonatomic) mbgl::style::Layer *rawLayer;
@end
@implementation MGLStyleLayer
- (instancetype)initWithIdentifier:(NSString *)identifier
{
if (self = [super init]) {
_identifier = identifier;
}
return self;
}
- (void)setVisible:(BOOL)visible
{
MGLAssertStyleLayerIsValid();
mbgl::style::VisibilityType v = visible
? mbgl::style::VisibilityType::Visible
: mbgl::style::VisibilityType::None;
self.rawLayer->setVisibility(v);
}
- (BOOL)isVisible
{
MGLAssertStyleLayerIsValid();
mbgl::style::VisibilityType v = self.rawLayer->getVisibility();
return (v == mbgl::style::VisibilityType::Visible);
}
- (void)setMaximumZoomLevel:(float)maximumZoomLevel
{
MGLAssertStyleLayerIsValid();
self.rawLayer->setMaxZoom(maximumZoomLevel);
}
- (float)maximumZoomLevel
{
MGLAssertStyleLayerIsValid();
return self.rawLayer->getMaxZoom();
}
- (void)setMinimumZoomLevel:(float)minimumZoomLevel
{
MGLAssertStyleLayerIsValid();
self.rawLayer->setMinZoom(minimumZoomLevel);
}
- (float)minimumZoomLevel
{
MGLAssertStyleLayerIsValid();
return self.rawLayer->getMinZoom();
}
- (void)setTransition:(MGLTransition)transition forKey:(NSString *)key
{
SEL setPropertyTransitionSelector = [self mbx_selectorForKey:key type:@"set" hasParams:YES];
if ([self respondsToSelector:setPropertyTransitionSelector]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:setPropertyTransitionSelector withObject:[NSValue value:&transition withObjCType:@encode(MGLTransition)] ];
#pragma clang diagnostic pop
}
}
- (MGLTransition)transitionForKey:(NSString *)key
{
MGLTransition transition;
SEL getPropertyTransitionSelector = [self mbx_selectorForKey:key type:@"get" hasParams:NO];
if ([self respondsToSelector:getPropertyTransitionSelector]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
NSValue *transitionValue = [self performSelector:getPropertyTransitionSelector];
[transitionValue getValue:&transition];
#pragma clang diagnostic pop
}
return transition;
}
- (SEL)mbx_selectorForKey:(NSString *)key type:(NSString *)type hasParams:(BOOL)params
{
NSString *camelCaseKey;
NSString *parameters = params ? @":" : @"";
if ([key length] > 1) {
camelCaseKey = [NSString stringWithFormat:@"%@%@", [[key substringToIndex:1] uppercaseString], [key substringFromIndex:1]];
} else {
camelCaseKey = [key uppercaseString];
}
NSString *setPropertyTransitionString = [NSString stringWithFormat:@"mbx_%@%@Transition%@", type, camelCaseKey, parameters];
SEL propertyTransitionSelector = NSSelectorFromString(setPropertyTransitionString);
return propertyTransitionSelector;
}
+ (NSArray *)transitionKeys
{
// This is overridden by subclasses
[NSException raise:@"MGLAbstractClassException"
format:@"MGLStyleLayer is an abstract class"];
return nil;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p; identifier = %@; visible = %@>",
NSStringFromClass([self class]), (void *)self, self.identifier,
self.visible ? @"YES" : @"NO"];
}
@end
|