我遇到了同样的问题来了。显然,iOS使用桌面的不同坐标系,导致图像呈现颠倒。 Safari对大多数类型的图像进行了更正,但不包括CSS填充。
我的解决方案是将规模(1,-1)转换应用到Raphael制作的模式定义元素。请注意,我为此使用了Raphael 1.5.2;但是,当我查看时,我没有看到2.0中的任何相关更改。
if (isIOS()) {
//iOS SVG fills use an upside-down coordinate system
var patternID = RaphaelElement[0].style.fill.replace('#', '')
var pattern = document.getElementById(patternID);
pattern.setAttribute("patternTransform", "scale(1, -1)");
}
说明:
基本上,你有2个重要的HTML/SVG DOM元素:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="290" height="290">
<desc>Created with Raphaël</desc>
<defs>
<pattern id="r-11258319" patternTransform="scale(1, -1)">
<image />
</pattern>
</defs>
<path fill="url(#r-11258319)" style="fill: url("#r-11258319") rgb(0, 0, 0);" />
</svg>
(不重要SVG东西除去)
的path
元件是元件你有一个Raphael引用,而pattern
元素是你需要的元素改变。您需要将patternTransform="scale(1, -1)"
属性添加到pattern
元素。这两个元素只与模式的id相关联,所以我不得不做一些hackery来提取.style.fill.replace('#', '')
。