J'ai réalisé un projet de démonstration (à partir du démo Moving-MKAnnotationView sur github) pour déplacer une voiture sur une carte. Voici le lien :
https://github.com/pratikbhiyani/Moving-MKAnnotationView
J'ai modifié mon code en me basant sur la réponse donnée par vinaut mais le problème persiste. Lorsque nous zoomons ou faisons défiler la carte, l'animation est perturbée sous iOS 7 et sous iOS 6, lorsque nous zoomons ou faisons défiler la carte, l'annotation se remet à son angle d'origine pendant un moment.
Voici une capture d'écran de mon projet de démonstration :
Voici une partie du code que j'ai modifiée :
- (void) setPosition : (id) posValue;
{
NSLog(@"set position");
//extraire le point de la carte à partir de cette structure bidon (enveloppe) CGPoint
MKMapPoint mapPoint = *(MKMapPoint*)[(NSValue*)posValue pointerValue];
CLLocationCoordinate2D coord = MKCoordinateForMapPoint(mapPoint);
CGPoint toPos;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
toPos = [self.mapView convertCoordinate:coord toPointToView:self.mapView];
}
else
{
CGFloat zoomFactor = self.mapView.visibleMapRect.size.width / self.mapView.bounds.size.width;
toPos.x = mapPoint.x/zoomFactor;
toPos.y = mapPoint.y/zoomFactor;
}
[self setTransform:CGAffineTransformMakeRotation([self getHeadingForDirectionFromCoordinate:MKCoordinateForMapPoint(previousPoint) toCoordinate: MKCoordinateForMapPoint(mapPoint)])];
if (MKMapRectContainsPoint(self.mapView.visibleMapRect, mapPoint)) {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [NSValue valueWithCGPoint:self.center];
animation.toValue = [NSValue valueWithCGPoint:toPos];
animation.duration = 1.0;
animation.delegate = self;
animation.fillMode = kCAFillModeForwards;
//[self.layer removeAllAnimations];
[self.layer addAnimation:animation forKey:POSITIONKEY];
//NSLog(@"setPosition ANIMATED %x from (%f, %f) to (%f, %f)", self, self.center.x, self.center.y, toPos.x, toPos.y);
}
self.center = toPos;
previousPoint = mapPoint;
}
Mon objectif est de déplacer la voiture de la même manière que dans l'application Uber.