Index: lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapView.as
===================================================================
--- lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapView.as (revision 2913)
+++ lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapView.as (revision 2914)
@@ -59,4 +59,10 @@
 		{
 			mCurrentViewport = v;
+			fireViewportChange();
+		}
+		
+		public function setViewRotation(rad:Number):void
+		{
+			mCurrentViewport.setNewRotation(rad);
 			fireViewportChange();
 		}
Index: lang/actionscript/swfgmap/trunk/gyuque/gmap/SpinResetAnimation.as
===================================================================
--- lang/actionscript/swfgmap/trunk/gyuque/gmap/SpinResetAnimation.as (revision 2913)
+++ lang/actionscript/swfgmap/trunk/gyuque/gmap/SpinResetAnimation.as (revision 2914)
@@ -3,17 +3,33 @@
 	public class SpinResetAnimation extends Animation
 	{
-		private var mViewport:GMapViewport;
-		public function SpinResetAnimation(vp:GMapViewport)
+		private var mView:GMapView;
+		private var mStart:Number;
+		private var STEPS:int = 6;
+		private var mCount:int = 0;
+		
+		public function SpinResetAnimation(v:GMapView, start:Number)
 		{
-			mViewport = vp;
+			mView = v;
+			if (start > Math.PI)
+				start -= Math.PI*2;
+			mStart = start;
 		}
 		
 		public override function next():Boolean
 		{
-			return false;
+			if (++mCount == STEPS)
+			{
+				mView.setViewRotation(0);
+				return false;
+			}
+			
+			mView.setViewRotation(mStart / Math.pow(1.9, mCount));
+			
+			return true;
 		}
 		
 		public override function skip():void
 		{
+			mView.setViewRotation(0);
 		}
 	}
Index: lang/actionscript/swfgmap/trunk/TestApp.as
===================================================================
--- lang/actionscript/swfgmap/trunk/TestApp.as (revision 2913)
+++ lang/actionscript/swfgmap/trunk/TestApp.as (revision 2914)
@@ -38,13 +38,19 @@
 		protected function onSpinner(e:SliderEvent):void
 		{
-			mCurrentViewport.setNewRotation(mSpnr.value);
-			fireViewportChange();
+			setViewRotation(mSpnr.value);
 		}
 		
 		protected function onSpinReset(e:MouseEvent):void
 		{
-			var a:SpinResetAnimation = new SpinResetAnimation(mCurrentViewport);
+			var a:SpinResetAnimation = new SpinResetAnimation(this, mSpnr.value);
 			addAnimation(a);
 		}
+		
+		public override function setViewRotation(rad:Number):void
+		{
+			mSpnr.value = rad;
+			super.setViewRotation(rad);
+		}		
+		
 	}
 }
