【问题标题】:How can I prevent warping/skewing on a rotated shape with react-native-svg?如何使用 react-native-svg 防止旋转形状上的翘曲/歪斜?
【发布时间】:2020-01-06 09:20:04
【问题描述】:

我目前正在react-native 中制作应用程序,并使用react-native-svg 渲染形状,即矩形、椭圆等。

我将这些形状包含在一个宽高比为 2:1 的 SVG 容器组件中

  • 形状的宽度是容器宽度的百分比。
  • 形状的高度是容器高度的百分比。

我目前遇到了一个我无法解决的问题。 每次我旋转一个形状时,它都会以奇怪的方式扭曲和扭曲。

这是一个 0 度旋转,宽度为 60%,高度为 30% 的矩形:

这是旋转 71 度的相同矩形(宽度和高度与之前相同):

我将矩形封装在 SVG 组件中,如下所示: <Svg width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="none">

我试图修改组件的 preserveAspectRatio 属性,但任何使用它的选择似乎都会扭曲形状的宽度和高度。

我所有的 SVG 形状组件使用大致相同的格式

<Rect ... width={ attributes.width } height={ attributes.height } transform={ "rotate(" + attributes.rotation + " " + attributes.x + " " + attributes.y + ")" } />

我已经对其进行了编程,使得rotate() 字符串产生,例如:rotate(71, 30, 55)

有什么想法吗?

【问题讨论】:

  • 您还对形状应用了哪些其他变换?应用变换矩阵时,顺序很重要,即 scale() rotate() translate() !== translate() rotate() scale()。
  • 没有对形状应用其他变换。
  • 您提到“宽度为 60%,高度为 30%”,即缩放。也许在这里分享您的代码会更容易。
  • 我在原始问题中编辑了 组件以反映这是如何完成的。

标签: reactjs react-native svg react-native-android react-native-svg


【解决方案1】:

问题是preserveAspectRatio="none"。它告诉浏览器拉伸 SVG 以适应您指定的宽度和高度。

SVG 的viewBox 有一个正方形的纵横比(宽度和高度都是100)。但看起来 SVG 的父容器没有。所以你的 SVG 被水平拉伸以适应。

删除preserveAspectRatio="none",它将不再拉伸/扭曲。

【讨论】:

  • 我对它进行了修改,你是对的,它是 preserveAspectRatio。我弄乱了宽度和高度以使其正确完成并且有效。谢谢。
猜你喜欢
  • 2019-05-03
  • 1970-01-01
  • 2019-05-27
  • 2018-01-28
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
相关资源
最近更新 更多