Способ, которым я подошел к этому, и способ, который используется в Базовой платформе Core Plot , состоит в том, чтобы основывать все мои координаты слоя в системе координат Кварца (где источник находится внизу). оставил). На iOS я затем создаю пользовательское представление размещения слоя, которое не инвертирует систему координат его размещенного слоя. CALayers по-прежнему имеют ту же систему координат на iOS, просто CALayers, которые в обратном UIViews имеют свою систему координат инвертированную.
Для этого я использую код, подобный следующему, при инициализации UIView:
self.layer.sublayerTransform = CATransform3DMakeScale(1.0, -1.0, 1.0);
и затем я создаю один основной размещенный слой в качестве подслоя заднего слоя этого UIView и добавляю все свои пользовательские слои в этот размещенный слой.
Опять же, вы можете взглянуть на код для платформы Core Plot, чтобы увидеть, как это работает на практике, потому что именно так эта платформа обрабатывает основанное на слоях рисование на двух платформах практически со всем одним и тем же кодом.
Есть только несколько условий, которые вы должны соблюдать в iOS, например, методы рисования NSString, которые необходимо перевернуть для учета координатного пространства Кварца.