Я сталкивался с той же проблемой. Очевидно, iOS использует систему координат, отличную от настольных, и это приводит к тому, что изображения отображаются вверх ногами. Safari исправляет это для большинства типов изображений, но не для заливок CSS.
Моим решением было применить преобразование масштаба (1, -1) к элементу определения шаблона, который сделал Рафаэль. Обратите внимание, что для этого я использую 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
- это элемент, на который имеется ссылка Рафаэля, а элемент pattern
- это элемент, который необходимо изменить. Вам необходимо добавить атрибут patternTransform="scale(1, -1)"
к элементу pattern
. Два элемента связаны только идентификатором шаблона, поэтому мне пришлось немного взломать, чтобы извлечь его с помощью .style.fill.replace('#', '')
.