 	
 	public class HandleSheet extends Sprite
 	{
-		private var _selected:Boolean
-		private var _contents:DisplayObject
-		
-		private var _ctrlButton:DisplayObject
-		private var _selectedGroup:Sprite
-		
-		private var _touchBringToFront:Boolean
-		public function get touchBringToFront():Boolean
-		{
-			return _touchBringToFront;
-		}
-
-		public function set touchBringToFront(value:Boolean):void
-		{
-			_touchBringToFront = value;
-		}
-
-		public function get selected():Boolean
-		{
-			return _selected;
-		}
-		
+		
+		/** 點擊 將物件移動到前方 **/
+		protected var _touchBringToFront:Boolean		
+		public function get touchBringToFront():Boolean { return _touchBringToFront;}
+		public function set touchBringToFront(value:Boolean):void{ _touchBringToFront = value; }
+		
+		/** 是否選擇 **/
+		protected var _selected:Boolean
+		public function get selected():Boolean { return _selected;}		
 		public function set selected(value:Boolean):void
 		{
 			if(value!=_selected){
 				_selected = value;
-				
-			}
-			
-		}
-		private static const CTRL_BUTTON_NAME:String = "ctrlBtn"
-		
-		public static const ALIGN_CENTER:String = "center"
-		public static const ALIGN_LT:String = "LT"
-		
-		private var _useCtrlButton:Boolean
-		
-		
+				_selectedGroup.visible = _selected
+			}
+		}
+		
+		/** 是否有使用 控制按鈕 Read Only **/	
+		protected var _useCtrlButton:Boolean
 		public function get useCtrlButton():Boolean
 		{
 			return _useCtrlButton;

				_contents = contents
				
			}			
			
			//init SelectGroup
			_selectedGroup = new Sprite()			
			this.addChild(this._selectedGroup);
		}
		
		

			touch  = event.getTouch(this, TouchPhase.ENDED);
			onTouchEnd(touch)
			
		}
		
		/**當touch開始**/
		protected function onTouchBegan(touch:Touch):void
		{
			//touch 開始要做的事情
			if(touch){
				if(_touchBringToFront){				
					parent.addChild(this);				
				}			
				selected = true
			}
			
		}
		
		/**當touch結束**/
		protected function onTouchEnd(touch:Touch):void
		{
			
		}
		
		/**檢查是否touch 控制按鈕**/
		protected function isTouchCtrlButton(target:*):Boolean
		{			
			
			var _do		:DisplayObject
			var _doc	:DisplayObjectContainer
			
			if(_ctrlButton is  DisplayObjectContainer){
				_doc = _ctrlButton as DisplayObjectContainer
				return _doc.contains(target)
			} 
			else if(_ctrlButton is DisplayObject)
			{
				_do = _ctrlButton as DisplayObject
				return _do == target
			} 
			return false			
		}

		
		
		/** 單隻手指使用控制按鈕 放大縮小旋轉 **/
		protected function resizeAndRotationByCtrlButton(touches:Vector.<Touch>):void
		{
			
			var touchA:Touch = touches[0];
			var touchB:Touch = touchA.clone();		//模擬B點		
			var n = touchA.getLocation(this);
			//鏡射A點坐標
			touchB.globalX = n.x * 1
			touchB.globalY = n.y * -1
			
			var currentPosA:Point  = touchA.getLocation(this);
			var previousPosA:Point = touchA.getPreviousLocation(this);
			
			//鏡射A點
			var currentPosB:Point  = currentPosA.clone();
			currentPosB.x *=-1;
			currentPosB.y *=-1;				
			//鏡射A點
			var previousPosB:Point  = previousPosA.clone();
			previousPosB.x *=-1;
			previousPosB.y *=-1;
			
			var currentVector:Point  = currentPosA.subtract(currentPosB);
			var previousVector:Point = previousPosA.subtract(previousPosB);
			
			var currentAngle:Number  = Math.atan2(currentVector.y, currentVector.x);
			var previousAngle:Number = Math.atan2(previousVector.y, previousVector.x);
			
			var deltaAngle:Number = currentAngle - previousAngle;
			
			// rotate
			rotation += deltaAngle;
			
			// scale
			var sizeDiff:Number = currentVector.length / previousVector.length;
			scaleX *= sizeDiff;
			scaleY *= sizeDiff;
			
			//_ctrlButton 保持原比例
			if(_ctrlButton){
				_ctrlButton.scaleX /= sizeDiff
				_ctrlButton.scaleY /= sizeDiff
			}
			
			
			
		}
		
		/** 使用兩隻手指 使用放大縮小旋轉 保留官方功能 **/
		protected function resizeAndRotationByTwoFingers(touches:Vector.<Touch>):void
		{
			//保留官方原本兩隻手指操作的功能
			// two fingers touching -> rotate and scale
			var touchA:Touch = touches[0];
			var touchB:Touch = touches[1];
			
			var currentPosA:Point  = touchA.getLocation(parent);
			var previousPosA:Point = touchA.getPreviousLocation(parent);
			var currentPosB:Point  = touchB.getLocation(parent);
			var previousPosB:Point = touchB.getPreviousLocation(parent);
			
			var currentVector:Point  = currentPosA.subtract(currentPosB);
			var previousVector:Point = previousPosA.subtract(previousPosB);
			
			var currentAngle:Number  = Math.atan2(currentVector.y, currentVector.x);
			var previousAngle:Number = Math.atan2(previousVector.y, previousVector.x);
			var deltaAngle:Number = currentAngle - previousAngle;
			
			// update pivot point based on previous center
			var previousLocalA:Point  = touchA.getPreviousLocation(this);
			var previousLocalB:Point  = touchB.getPreviousLocation(this);
			trace(previousLocalA , previousLocalB)
			
			pivotX = (previousLocalA.x + previousLocalB.x) * 0.5;
			pivotY = (previousLocalA.y + previousLocalB.y) * 0.5;
			
			// update location based on the current center
			x = (currentPosA.x + currentPosB.x) * 0.5;
			y = (currentPosA.y + currentPosB.y) * 0.5;
			
			// rotate
			rotation += deltaAngle;
			
			// scale
			var sizeDiff:Number = currentVector.length / previousVector.length;
			scaleX *= sizeDiff;
			scaleY *= sizeDiff;
		}
		
		
		public override function dispose():void
