Steuerung der Animationsgeschwindigkeit von MKMapView in iOS6

8

Ich versuche einem Auto auf einer Kartenansicht zu folgen.

Dieser Code sollte das Auto und die Karte mit der gleichen Geschwindigkeit animieren, so dass die Anmerkungsansicht immer in der Mitte erscheint:

%Vor%

In iOS 5 hat es funktioniert. In iOS 6 wird die Karte nicht mehr animiert, aber das Auto animiert.

Ich habe [mapView setCenterCoordinate:co animated:YES] versucht, aber dann kann ich die Animationsgeschwindigkeit nicht kontrollieren. Es wird immer mit der Standarddauer (0.2s) animiert.

    
Felix 08.10.2012, 16:18
quelle

3 Antworten

4

Es scheint, dass es nicht möglich ist, die Animationsgeschwindigkeit in iOS 6 zu kontrollieren, wenn Sie diese Methoden in MKMapView verwenden:

%Vor%

Ich habe jedoch eine private Methode gefunden, die einen duration-Parameter hat. Also habe ich mein Problem gelöst, indem ich MKMapView abgegrenzt und die private Methode überschrieben habe (die nur in iOS6 existiert):

MyMapView.h

%Vor%

MyMapView.m

%Vor%

Ich habe zwei Eigenschaften hinzugefügt, mit denen Sie die Standardanimationszeit überschreiben können. Um es zu verwenden, setzen Sie overridesAnimationDuration vor einer Bereichsänderung auf YES, setzen Sie mapAnimationDuration auf die gewünschte Dauer und wechseln Sie overridesAnimationDuration auf NO im Delegate-Aufruf mapView:regionWillChangeAnimated: .

Hinweis: Dies funktioniert in zukünftigen iOS-Versionen möglicherweise nicht, da es sich um eine private API handelt. Apple kann diese Methode entfernen oder ändern.

    
Felix 18.10.2012, 15:55
quelle
11

Ich bin heute auf dieselbe Art von Problem gestoßen. Ich denke, das Problem ist nicht MKMapView, sondern die (neue) Art, wie ios6 Animationen verwaltet.

Es scheint, dass in ios6, wenn eine Animation auftritt, bevor eine vorherige beendet wurde (abhängig von der Laufschleife), die ältere durch die neue unterbrochen wird. Ich denke, das tritt nur auf, wenn die Option "beginsFromCurrentState" oder die Eigenschaft (abhängig davon, ob Sie eine blockbasierte Animation verwenden oder nicht) verwendet wird (durch die neue).

Um sicher zu sein, sollten Sie versuchen, blockbasierte Animationen zu verwenden, um zu sehen, ob Ihre Animation wirklich von einer anderen unterbrochen wird.

Dieser Code muss dem Ihren entsprechen und Sie können sehen, ob Ihre Animation unterbrochen oder abgebrochen wurde (wenn "fertig" falsch ist):

%Vor%

(in iOS & lt; 6 sollte "fertig" wahr sein ...)

In meinem Fall schien es, dass meine Animation durch die folgenden UIViewController-Methoden unterbrochen wurde, die vom System in einem Animationsblock ausgeführt wurden und meine Animationskette unterbrachen:

%Vor%     
polo987 16.10.2012 14:19
quelle
7

Ich habe festgestellt, dass die Standard UIView AnimationWithDuration angewendet wird, wenn sie wie folgt formatiert ist:

%Vor%

Hoffe, dass es auch für dich funktioniert! :)

(Hinweis: Es wurde darauf hingewiesen, dass diese Antwort auf iOS7 / 8 ausgerichtet war und dass die Frage für iOS6 war.)

Und das wird einfach gut funktionieren ...

%Vor%     
jbobrow 02.03.2015 14:22
quelle

Tags und Links