бесконечный зум CATiledlayer iOS - PullRequest
0 голосов
/ 21 сентября 2011

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

Я пытаюсь создать слой CATiledLayer, где каждая плитка имеет свой цвет икогда вы увеличиваете плитку, вы просто получаете новые цвета и т. д.

1 Ответ

2 голосов
/ 26 октября 2011

Я не уверен, как это сделать с помощью CATiledLayer, но книга «Программирование IOS 4», написанная Мэттом Нойбургом, содержит раздел «Масштабирование с детализацией», в котором описывается, как сделать нечто подобное с помощью UIScrollView.

UIScrollView предлагает поддержку масштабирования пинч-аутов в его содержимом, но он просто увеличивает масштабирование с масштабированием без масштабирования с преобразованием масштаба, а не перерисовывает его содержимое при более высоком zoomScale.Поэтому, чтобы обеспечить масштабирование, которое на самом деле показывает повышенную детализацию, вам нужно добавить некоторую логику.

В основном, книга предлагает вам реализовать scrollViewDidEndZooming: withView: atScale: так, чтобы он (1) сбрасывал zoomScale UIScrollView к егозначение по умолчанию 1,0, и (2) удаляет представление содержимого и предоставляет новое представление с содержимым в требуемом истинном масштабе увеличения.Вам нужно ввести свой собственный ivar, чтобы отслеживать этот истинный масштаб вручную.В результате при дальнейшем увеличении масштаба и монотонном увеличении истинного масштаба UIScrollView содержит последовательность различных представлений и продолжает циклически изменять собственный масштаб в пределах своих границ, от 1,0 до максимального значения, затем сбрасывая до 1,0, затем от 1,0 до максимального значения.и т. д. В книге приведен скелетный пример (стр. 506 в 1-м издании, вторая печать книги).

Как бы вы использовали это для бесконечного увеличения?Если вам не нужно действительно бесконечное масштабирование, вы можете просто выполнить описанное выше с очень большим диапазоном для истинного масштаба.

Если вы хотите действительно бесконечное масштабирование, вы не можете отслеживать свой уровень масштабирования с помощью конечногопеременная для истинного масштаба.Вместо этого вы должны изменить scrollViewDidEndZooming: withView: atScale: так, чтобы он (1) сбрасывал zoomScale в UIScrollView к его значению по умолчанию, равному 1,0, (1) удаляет представление содержимого и предоставляет новое представление, где новое представление в новом zoomScale из1.0 визуально идентичен удаленному представлению на старом zoomLevel.Таким образом, поскольку пользователь продолжал увеличивать масштаб с помощью жестов пинч-аута, UIScrollView будет периодически циклически изменяться от 1,0 до максимума, незаметно заменяя базовый вид в каждом цикле, между жестами пользователя.

...