Хорошо, я боролся с этим последние два дня и, наконец, придя к довольно надежному (пока что ...) решению, я подумал, что должен поделиться им и избавить других от некоторой боли. :) Если вы нашли проблему с этим решением, пожалуйста, кричите!
Я в основном прошел через то, что у всех остальных: поиск StackOverflow, форумы разработчиков Apple, просмотр кода для Three20, ScrollingMadness, ScrollTestSuite и т. Д. Я попытался увеличить фрейм UIImageView, поиграв со смещением UIScrollView / или вставки из ViewController и т. д., но ничего не получилось (как все узнали).
После сна я попробовал несколько альтернативных углов:
- Создание подкласса UIImageView для динамического изменения его собственного размера - это не сработало совсем.
- Создание подкласса UIScrollView, чтобы он динамически изменял свой собственный contentOffset - это тот, который кажется мне победителем.
С помощью этого метода UIScrollView с подклассами я переопределяю мутатор contentOffset, поэтому он не устанавливает {0,0}, когда изображение масштабируется меньше, чем область просмотра, - вместо этого он устанавливает смещение таким образом, чтобы изображение сохранялось в центре окно просмотра. До сих пор, кажется, всегда работает. Я проверил это с широкими, высокими, крошечными и большими изображениями, и у меня нет проблемы "работает, но при минимальном увеличении ломает это".
Я загрузил пример проекта в github, который использует это решение, вы можете найти его здесь: http://github.com/nyoron/NYOBetterZoom