У меня проблемы с матричными преобразованиями во Flex.
У меня есть Flex Canvas, в котором только изображение, вот так.
<mx:Canvas>
<mx:Image id="img" source="/some/Url" />
</mx:Canvas>
К этому изображению я применяю преобразования масштаба / поворота, используя такой код:
private function _rotateAndZoomImage(zoom:Number, angle:Number):void{
var radians:Number = angle * (Math.PI / 180.0);
var offsetWidth:Number = ( img.contentWidth/2.0 );
var offsetHeight:Number = ( img.contentHeight/2.0 );
var matrix:Matrix = new Matrix();
matrix.translate(-offsetWidth, -offsetHeight);
matrix.rotate(radians);
//Do the zoom
matrix.scale (zoom/100, zoom/100);
matrix.translate(+offsetWidth, +offsetHeight);
img.transform.matrix = matrix;
}
Это все работает. НО. Изображение перетаскивается. Пользователь может переместить его в любое место внутри холста, который является его родителем.
Как только изображение было перемещено и преобразование применено изображение "защелкивается" обратно в исходное положение 0,0 (верхний левый угол холста) перед преобразованием и оставлен там потом - не там, где ожидал бы пользователь.
Поработав с этим большую часть дня, я все еще не могу понять, почему, черт возьми, он это делает. Кто-нибудь?
Редактировать: обратите внимание, что то же самое происходит без двух вызовов .translate () в приведенном выше коде. Поэтому следующий код также привязывает изображение обратно к 0,0 холста после его перемещения:
private function _rotateAndZoomImage(zoom:Number, angle:Number):void{
var radians:Number = angle * (Math.PI / 180.0);
var matrix:Matrix = new Matrix();
matrix.rotate(radians);
matrix.scale (zoom/100, zoom/100);
img.transform.matrix = matrix;
}
Джейк