По разным причинам я планирую сделать собственную реализацию CATiledLayer.Я провел некоторое исследование, но я не могу понять, как CATiledLayer знает, какую плитку предоставить.Например, когда вы прокручиваете слой, setPosition: или setBounds: никогда не вызываются.Похоже, что фоновый поток просто вызывает drawLayer: inContext: делегата на ровном месте без каких-либо триггеров.Я обнаружил, что CATiledLayer вызывает setContent: с экземпляром «CAImageProvider», и все вызовы drawLayer: inContext: происходят из этого класса.Так что, вероятно, именно этот ключ определяет, какую плитку рисовать.Но я не могу найти никакой документации по этому классу.
Итак ... кто-нибудь знает, как это работает, и как я могу переопределить это?
Что касается недостатков CATiledLayer:
- всегда используется разрешение экрана (или x2, x4 и т. Д.);вы не можете установить его на собственное разрешение ваших исходных изображений
- вы не можете указать любой другой коэффициент масштабирования, кроме 2
- вы должны указать уровниOofDetail и levelsOfDetailBias, для которых я не вижу причин реализациивсе.Если у вас есть контент, который можно бесконечно масштабировать, например, фракталы, то это очень ограничивает.
- самое главное: если вы ограничиваете его масштабированием только в одном направлении (я делаю это, применяя масштабный коэффициент одного направления к1 в setTransform :), действует странно