diff options
Diffstat (limited to 'platform/darwin/src/MGLStyleLayer.mm')
-rw-r--r-- | platform/darwin/src/MGLStyleLayer.mm | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLStyleLayer.mm b/platform/darwin/src/MGLStyleLayer.mm index 47f41e0388..60226a6842 100644 --- a/platform/darwin/src/MGLStyleLayer.mm +++ b/platform/darwin/src/MGLStyleLayer.mm @@ -65,6 +65,55 @@ return self.rawLayer->getMinZoom(); } +- (void)setTransition:(MGLTransition)transition forKey:(NSString *)key +{ + SEL setPropertyTransitionSelector = [self mbx_selectorForKey:key]; + + 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]; + + 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 +{ + NSString *camelCaseKey; + if ([key length] > 1) { + camelCaseKey = [NSString stringWithFormat:@"%@%@", [[key substringToIndex:1] uppercaseString], [key substringFromIndex:1]]; + } else { + camelCaseKey = [key uppercaseString]; + } + NSString *setPropertyTransitionString = [NSString stringWithFormat:@"mbx_set%@Transition:", camelCaseKey]; + SEL propertyTransitionSelector = NSSelectorFromString(setPropertyTransitionString); + + return propertyTransitionSelector; +} + +- (NSArray *)transitionKeys +{ + // This is overridden by subclasses + return nil; +} + - (NSString *)description { return [NSString stringWithFormat:@"<%@: %p; identifier = %@; visible = %@>", |