2011-12-28 5 views
1

Есть ли какой-либо (простой) способ решить проблему динамической регистрации с мультитачными событиями масштабирования в flex? Я просто не могу обмотать голову вокруг этого.Flex multitouch path scale dynamic registration issue

У меня есть (среди некоторых строк и меток) путь в группе, которая сама завернута в скроллер;

<s:Scroller id="scroller"> 
    <s:Group id="scrollerContent"> 

    <s:Path id="path"> 
     <s:stroke> 
      <s:SolidColorStroke color="#ffffff" weight="2"/> 
     </s:stroke> 
     </s:Path> 
    </s:Group> 
</s:Scroller> 

То, что я хотел бы сделать это, чтобы увеличить и на пути (и другие вещи в группе scrollerContent), так что в моем методе creationComplete() Я добавил EventListener к группе scrollerContent:

scrollerContent.addEventListener(TransformGestureEvent.GESTURE_ZOOM, zoomEvent); 

Вот код Christophe Coenraets при условии его график, например (что на самом деле масштаб путь, основанный на х = 0, хотя,

private function zoomEvent(e:TransformGestureEvent):void 
{ 
    zoom(e.scaleX, e.scaleY); 
} 
protected function zoom(scaleX:Number):void 
{ 
    var w:Number = path.width * scaleX; 
    if (scaleX>1) 
     path.width = w > width*5 ? width*5 : w; 
    else 
    { 
      path.width = w < width ? width : w; 
      if (path.x + path.width < width) path.x = width - path.width; 
     } 
} 

Я знаю класса DynamicRegistration, но не может заставить его работать нормально, он по-прежнему масштабирует путь, основанный на точке x = 0.

DynamicRegistration.scale(scrollerContent, new Point(e.localX, e.localY), scrollerContent.scaleX*= e.scaleX, scrollerContent.scaleY=1); 

Любая помощь в этом отношении была бы высоко оценена!

+0

Неужели никто никогда этим столкнуться проблема? Или есть более простой способ масштабирования диаграммы в любой точке? Я знаю, что у GestureWorks есть рабочий API для этого, но, если это возможно, я бы хотел избежать покупки лицензии, поскольку я считаю, что эта регистрация не может быть большой проблемой для опытных разработчиков Flex/AS3. – AlBirdie

ответ

1

я использовал класс DynamicRegistration, и получил это работает, как это, если вы все еще интересны:

protected function onZoom(e:TransformGestureEvent, img:Image):void 
{ 
    DynamicRegistration.scale(img, new Point(e.localX, e.localY), img.scaleX*e.scaleX, img.scaleY*e.scaleY); 
} 

Или с нативным гибким методом:

protected function onZoom(e:TransformGestureEvent, img:Image):void 
    { 
    img.transformAround(new Vector3D(e.localX, e.localY, 0), new Vector3D(img.scaleX*e.scaleX, img.scaleY*e.scaleY, 0)); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^