为什么Flex的矩阵将捕捉的孩子转换回父级的上角?
|
我在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;
}
杰克
没有找到相关结果
已邀请:
5 个回复
长拳
哈克,但请注意...如果有人有更清洁的解决方案,请告诉我!
禽兢玫坞劲
中查找
替代的源代码,则会看到以下行:
基本上,它将忽略默认显示列表“ 7”值,并将位置存储在其他位置。一旦处理完完整版式(替换您的翻译价值),实际的
可能会在以后设置。您可能应该始终使用
,
,
,
,
和任何其他相关属性。似乎Adobe并不打算让Flex支持常规的显示对象转换矩阵。
稼悸
催备南菠亨
超可林
我现在有这个:
可拖动的图像不再直接存在于主画布中。相反,它生活在儿童画布中。该图像本身不再是可拖动的。是内部画布被拖动。 现在,将变换应用于图像后,它会保持原样,因为其父级的0,0坐标现在应该位于它们的位置,也就是您将画布拖动到的位置。 希望这对某人有帮助,并节省了我在此上浪费的时间。 杰克