Auto (Annotation) animation (wie uber-app) funktioniert nicht
Machte ich ein demo-Projekt (von Moving-MKAnnotationView demo auf github) für fahrenden Auto auf der folgenden Karte ist die Verknüpfung
https://github.com/pratikbhiyani/Moving-MKAnnotationView
Bearbeite ich meine code auf der Grundlage der gegebenen Antwort durch vinaut aber noch problem ist, dass, wenn wir uns vergrößern oder die Karte zu scrollen animation erhalten ablenken in ios 7 und in ios 6, wenn wir den zoom oder das scrollen der map-annotation festgelegt, um die ursprünglichen Winkel für eine Weile.
Unten ist ein Screenshot von meinem Demo-Projekt
Hier ist etwas code, den ich ändern
- (void) setPosition : (id) posValue;
{
NSLog(@"set position");
//extract the mapPoint from this dummy (wrapper) CGPoint struct
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;
}
Mein Ziel ist es, sich zu bewegen Auto der gleiche wie in uber-app.
- Was ist also das problem? Ihre Anmerkungen verschwinden, wenn Sie die Karte verschieben?
- ja. und seine nicht zeigen glatte animation, wie es zeigt in ios 6;
- Versuchen Sie, zu verwenden, übersetzung-Transformation anstelle der Neupositionierung...
- Ok , ich werde versuchen
- können Sie veröffentlichen Sie Ihren code in der animation? und wie erkennen Sie, dass Auto drehen müssen, wie am Rande der Straße ?
- github.com/pratikbhiyani/Moving-MKAnnotationView
- es läuft auf VORGEGEBENE Koordinaten...
- können Sie die Idee, sich zu bewegen-pin mit lat lang, die bekomme ich aus der api-instand-pre Koordinaten? für swift
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dass etwas geändert mit den Funktionen für die Typkonvertierung für CLCoordinate2D/MKMapPoint/CGPoint...
Die Erkennung von einem Punkt in einem MKPolygon brach mit iOS7 (CGPathContainsPoint)
Die Anmerkung verschwindet, weil der Konvertierung zwischen MkMapPoints und CGIPoints funktioniert nicht mehr, wenn Sie sich die "position" des CALayer erhalten Sie Punkte außerhalb der Ansicht. Keine Ahnung, warum es funktioniert, wenn dabei die touch-Ereignisse.
Wenn Sie ändern Sie die Funktion :
Sollte es wieder funktionieren.
Bin ich den ursprünglichen Beitrag zu Verschieben-MKAnnotationView (https://github.com/100grams/Moving-MKAnnotationView.git). Diese Komponente wurde ursprünglich geschrieben, mit iOS4.3 und es hat sich viel verändert seit dem. 🙂
Die Ursache hier war die Umstellung von MKMapPoint zu CGPoint (Bildschirmkoordinaten). Obwohl der code vorher funktioniert, bricht es auf iOS7 und ich habe es behoben durch die Nutzung dieser zu konvertieren, die lat/lon-Koordinate auf Bildschirm-Koordinaten:
Ich habe den Fehler behoben, mit ein paar anderen updates, um https://github.com/100grams/Moving-MKAnnotationView.git so es funktioniert jetzt auch auf iOS7/Xcode5.
Das problem der ablenkenden ein Auto beim Zoomen/scrollen der Karte. Eigentlich ist es nicht erreicht werden kann, durch hinzufügen einer animation zu kommentieren. Ich habe herausgefunden, das Interpolieren Sie die Funktion, durch die ich mit den Orten, zwischen "Von" und "Bis" Koordinaten und legen Sie es auf die annotation(Einstellung Anmerkung Koordinate in Millisekunden) sieht wie eine animation.
Es ist nicht ein Problem von iOS oder Anzeigen, wenn Sie hinzufügen, animation annotation werden zur annotation layer nicht bezüglich der Karte zeigen.