Skip to content

坐标变换 Transform ​

旋转、缩放、位移和斜切属于 Transform。将需要变换的组件放在它内部,而不是把变换属性直接传给 Text、Symbol 或 Map。

属性 ​

属性单位 / 默认作用
translateX / translateY点,默认 0视觉位移,右和下为正
scaleX / scaleY比例,默认 1缩放;负数可翻转
rotation度,默认 0顺时针旋转
skewX / skewY度,默认 0斜切,范围须在 -89° 与 89° 之间
anchorX / anchorY0…1,默认 0.5变换锚点在自身区域中的相对位置

Transform 内多个子内容在同一区域叠放。单个子节点保留它的内容测量;视觉变换不会替父布局重新计算旋转后的包围框。

旋转一个方位图标 ​

jsx
function main() {
  const heading = $data.current.heading;
  return <Transform rotation={heading ?? 0}
    opacity={heading === null ? 0.3 : 1}
    animations={[{property: 'rotation', duration: 0.25, curve: 'easeOut'}]}>
    <Symbol name="location.north.fill" width={28} height={36} color={$env.accent}/>
  </Transform>;
}

旋转默认按 360° 的最短路径过渡;359° 到 0° 不会绕一整圈。

变换顺序 ​

在同一个 Transform 中,围绕锚点的固定顺序为:

text
缩放 → 斜切 → 旋转 → 位移

需要不同顺序时,嵌套两个 Transform。例如先把一个点移离圆心,再让整组围绕圆心旋转,可以用内层位移、外层旋转实现。

布局位置与视觉位移 ​

  • x/y:先决定节点在父区域中的布局位置。
  • translateX/Y:在布局后产生视觉位移。
  • anchorX/Y:决定缩放、旋转和斜切围绕哪里发生。

给旋转指针明确的宽高与锚点,能更容易判断它围绕哪里转动。变换后的内容超出父区域时,仍可能被父节点的裁切规则截掉。

地图也可以变换 ​

原生地图可以包在 Transform 中做二维旋转、缩放与位移,但不要把地图相机朝向与二维旋转混为一谈:Map.headingPolicy 控制地图相机,Transform 改变地图视图自身的展示几何。