2014-11-17 3 views
2

Я пытаюсь оживить некоторые маркера инициализирован с изображением следующего RMMarker *marker = [[RMMarker alloc] initWithUIImage:lImage anchorPoint:lPoint];Оживляющие маркера аннотация на MapBox (IOS)

Я получаю статическое изображение на моей карте не проблемы. Теперь мне нужно, чтобы он был более заметным, чем другие аннотации, поэтому я хочу, чтобы он мигал.

Вот что я уже пробовал:

Создание шкалу анимации на аннотациях слое

[CATransaction begin]; 
[CATransaction setAnimationDuration:0.70]; 
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

CABasicAnimation *bounceAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; 
bounceAnimation.repeatCount = MAXFLOAT; 
bounceAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.1, 1.1, 1.0)]; 
bounceAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.8, 0.8, 1.0)]; 
bounceAnimation.removedOnCompletion = NO; 
bounceAnimation.autoreverses = YES; 

[layer addAnimation:bounceAnimation forKey:@"animateScale"]; 

[CATransaction commit]; 

Это работает хорошо, за исключением того, что мой взгляд выноски также мигает, как он разделяет тот же слой (и Mapbox помещается в анимацию во время режима отслеживания, что приводит к неправильной ориентации, так как при каждом изменении пользователя все равно перемещается).

Создание мигания анимации на аннотации слое

[CATransaction begin]; 
[CATransaction setAnimationDuration:0.60]; 
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
opacityAnimation.repeatCount = MAXFLOAT; 
opacityAnimation.fromValue = [NSNumber numberWithFloat:1.0]; 
opacityAnimation.toValue = [NSNumber numberWithFloat:0.3]; 
opacityAnimation.removedOnCompletion = NO; 
opacityAnimation.autoreverses = YES; 

[layer addAnimation:opacityAnimation forKey:@"animateOpacity"]; 

[CATransaction commit]; 

Это менее заметно, но ориентация аннотации правильно на этот раз. Тем не менее, у меня все еще есть мигающий вид на слое.

То, что я хочу сделать

я нужен способ, чтобы оживить изображение маркера, не затрагивая слой.

Лучшая анимация, которую я бы использовал, была бы первой, которую я пробовал, без проблемы вращения.

До сих пор я не мог анимировать UIImage, так как у него нет звонка addAnimation: forKey:.

Я никогда не играл с анимацией, поэтому любая помощь или руководство будут оценены.

ответ

0

Вы находитесь на правильном пути с CABasicAnimation, так как это то, что используется для анимированных аннотаций местоположения пользователя в SDK. Вы можете увидеть это здесь:

https://github.com/mapbox/mapbox-ios-sdk/blob/509fa7df46ebd654d130ab2f530a8e380bf2bd59/MapView/Map/RMMapView.m#L3593

Не могли бы вы подробнее остановиться на этом?

Это работает хорошо, за исключением того, что мой взгляд выноски также мигает, как он разделяет тот же слой (и MapBox напутает с анимацией в режиме слежения, что приводит к неправильной ориентации, как она сброшена с каждым движением пользователь в любом случае).

Вы действительно хорошо понимаете, что выноска представляет собой подуровень, поэтому он также будет мигать. Этот вариант использования не рассматривался - возможно ли отменить выбор аннотации и, таким образом, скрыть выноску?

Но что подразумевается под последней частью?

+0

Да, я был вдохновлен тем, как вы анимируете аннотацию пользователя, чтобы попробовать оживить мои собственные аннотации. К сожалению, мне нужна аннотация, чтобы иметь выноску (я оживляю ее, чтобы показать пользователю информацию здесь, о которой он может захотеть узнать больше). В последнем случае это связано с вопросом, на который вы ответили [здесь] (http: // stackoverflow.com/questions/21754379/mapbox-annotation-layer-rotation-resets-on-map-zoom-or-move) (но мне непонятно, что нужно изменить) – user2700551

Смежные вопросы