Изменение размера CATiledLayer с использованием масштабных преобразований и манипуляций с границами - PullRequest
0 голосов
/ 17 августа 2010

Моя рабочая область, размещенная на слое, работает так, что использование CATiledLayers для сотен изображений прекрасно работает, когда рабочая область существенно уменьшена.Все изображения используют представления с более низким разрешением, и мое приложение намного быстрее реагирует на панорамирование и масштабирование большого количества изображений.

Однако в моем приложении я также предоставляю пользователю возможность изменять размеры слоев с помощью ручки изменения размера.До того, как я преобразовал слои изображения в CATiledLayers, я делал изменения размеров слоя, манипулируя границами слоя изображения в соответствии с дельтой изменения размера (перетаскивание мышью), и это работало хорошо.Но теперь, когда CATiledLayers на месте, это приводит к тому, что CATiledLayers запутывается, когда я смешиваю изменение размеров слоев с помощью манипулирования границами и масштабирования / уменьшения масштаба рабочего пространства с помощью преобразований масштаба.

В частности, если я изменю размер CATiledLayer до половины размера ширины / высоты (1/4 площади), изображение внутри него внезапно масштабируется до еще 1/2 уменьшенного размера кадра, оставляя 3/4рамка пуста.Похоже, это происходит именно тогда, когда вызывается внутренняя логика CATiledLayer, чтобы обеспечить представление изображения с более низким разрешением.Это прекрасно работает, если я не касаюсь обработчика изменения размера и просто увеличиваю / уменьшаю масштаб рабочего пространства.

Есть ли способ сделать игру масштабирования / изменения размера приятной вместе с CATiledLayers, или мне придется преобразовать мойлогика изменения размера слоя для использования масштабных преобразований вместо манипуляций с границами?

1 Ответ

2 голосов
/ 14 декабря 2010

В итоге я решил эту проблему, преобразовав логику изменения размера слоя в масштабные преобразования, переопределив метод setBounds: для моего пользовательского класса слоя изображения, чтобы масштабировать его, содержащий CATiledLayer, и соответствующим образом изменить положение.Также важно убедиться, что для autoresizingMask объекта CATiledLayer установлено значение kCALayerNotSizable, поскольку мы обрабатываем изменения размеров вручную в setBounds:.

Примечание: обязательно вызовите реализацию setBounds для суперкласса:.

...