Анимация RMPointAnnotation в RMMapView с помощью CAAnimation

Поэтому я использую MapBox SDK, который является форком SDK для RouteMe для iOS. Из того, что я могу сказать, аннотации могут быть здесь.

Я изменил код CAAnimation, который нашел здесь, чтобы попытаться достичь этого. Мой код ниже. Поскольку я достаточно новичок в CAAnimation, проблема может заключаться в этом или в самом коде RouteMe. Это просто анимация слоя, который оборачивает аннотация.

RMPointAnnotation *point = [[RMPointAnnotation alloc] initWithMapView:self.mapView coordinate:CLLocationCoordinate2DMake([location[@"lat"] floatValue], [location[@"lon"] floatValue]) andTitle:@"App open"];



        point.image = [UIImage imageNamed:@"mapPin.png"];

        [self.mapView addAnnotation:point];

        CGRect endFrame = point.layer.frame;

        // Move annotation out of view
        point.layer.frame = CGRectMake(point.layer.frame.origin.x, point.layer.frame.origin.y - self.mapView.frame.size.height, point.layer.frame.size.width, point.layer.frame.size.height);

        // Animate drop
        [UIView animateWithDuration:2.0 delay:0.04 options:UIViewAnimationOptionCurveLinear animations:^{

            point.layer.frame = endFrame;

            // Animate squash
        }completion:^(BOOL finished){
            if (finished) {
                [UIView animateWithDuration:0.05 animations:^{
                    point.layer.transform = CATransform3DMakeAffineTransform(CGAffineTransformMake(1.0, 0, 0, 0.8, 0, +  point.layer.frame.size.height*0.1));

                }completion:^(BOOL finished){
                    [UIView animateWithDuration:0.1 animations:^{
                        point.layer.transform = CATransform3DMakeAffineTransform(CGAffineTransformIdentity);
                    }];
                }];
            }
        }];

Есть идеи?

2 ответа

Решение

Вот ответ разработчиков об этой функции: https://github.com/mapbox/mapbox-ios-sdk/issues/185 Эта функция отсутствует в дорожной карте.

Я нашел обходной путь, используя поп-библиотеку Facebook [ОБНОВЛЕНО]:

@property (strong, nonatomic) RMAnnotation *annotation;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.annotation = [[RMAnnotation alloc] initWithMapView:self.mapView
                                                 coordinate:self.mapView.centerCoordinate
                                                   andTitle:@"Drop pin"];

    self.annotation.layer.hidden = YES;
    [self.mapView addAnnotation:self.annotation];

    POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionY];
    anim.fromValue = @(0);
    anim.toValue = @(self.view.center.y);
    anim.springSpeed = 8;
    anim.springBounciness = 4;
    anim.delegate = self;
    [self.annotation.layer pop_addAnimation:anim forKey:@"positionY"];
}

-(void)pop_animationDidStart:(POPAnimation *)anim
{
    self.annotation.layer.hidden = NO;
}

Идея состоит в том, что вы скрываете слои аннотаций, пока не начнется анимация.

Получается, что эти объекты Annotation имеют свойство layer, которое на самом деле является CALayer, что означает, что вы должны использовать CAAnimations на них, а не UIView анимации.

Другие вопросы по тегам