Flex에서 Matrix Transform에 문제가 있습니다.왜 Flex의 행렬 변형 스냅 자식입니까? 부모의 맨 위로 코너?
나는 그 안에 이미지 만있는 플렉스 캔버스를 가지고 있습니다. I 줌/회전을 적용하고이 이미지에
<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()를 두 번 호출하지 않고 동일한 문제가 발생합니다.
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;
}
제이크
흠. 그냥 확대 캔버스의 측면에서 촬영 이미지를 보냅니다. –
그 점에 더해서 - 나는 scale/rotate 호출 전후에 .translate() 호출을 제거하면 여전히 0으로 다시 스냅하는 것으로 나타났습니다. 0 그래서 나는 번역이 비난받을 지 확신하지 못합니다. –
나는이 같은 문제가 너무 있습니다. flex 4를 사용하고 있습니까? 그 문제는 UIComponent.move (x, y)가 변환을 수행 한 후에 호출되고 변환 행렬의 tx 및 ty 변수와 함께 x, y 좌표를 재설정한다는 것입니다. 아직 수정 사항이 무엇인지 확실하지 않습니다. – Hisham