Выгрузить изображение UIImageView, которое за кадром - PullRequest
2 голосов
/ 08 июня 2010

Я кодирую приложение на Ipad, в определенной точке моего приложения я представляю ViewController с presentModalViewController.

Мой ViewController - это UISScrollView, который использует больший из modalView, и внутри него я отображаю некоторые изображения, я разрешаю pagingEnabled, чтобы я мог видеть все свои изображения внутри scrollView.

Иногда мне нужно отобразить более 10 изображений внутри scrollView, поэтому у меня появляется эта ошибка ПРЕДУПРЕЖДАЮЩИЙ УРОВЕНЬ ПАМЯТИ = 1 после этого ПРЕДУПРЕЖДАЮЩИЙ УРОВЕНЬ ПАМЯТИ = 2 и в конце концов отладчик вышел из-за сигнала 10 (Sigbus).

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

Спасибо

Ответы [ 2 ]

1 голос
/ 08 июня 2010

Я полагаю, вы добавляете все изображения в UIScrollView? Затем iPad должен хранить все 10 изображений в памяти. Если они являются полноэкранными изображениями, каждое из них займет около 3 МБ памяти, поэтому вы используете 30 МБ, чтобы сохранить 10 изображений в режиме прокрутки.

Вы должны добавить только одно или два изображения, которые действительно видны. Как только они прокрутятся из поля зрения, удалите UIImageView из вашего UIScrollView (и убедитесь, что вы не оставите его в другом месте, чтобы его можно было освободить). Когда новое изображение прокручивается в поле зрения, добавьте его к UIScrollView только тогда.

В вашем UIScrollViewDelegate методе -scrollViewDidScroll: получите текущее значение contentOffset и используйте его для вычисления видимых изображений.

0 голосов
/ 08 июня 2010

На самом деле, эта проблема еще хуже на iPhone 3G, который не может даже отобразить две полноразмерные фотографии (снятые с помощью собственной камеры) одновременно.

Если вы можете уменьшить размер фотографий заранее, изменив их размер (на стороне сервера, если вы извлекаете их из собственных служб, или на стороне клиента, если они каким-либо образом генерируются на устройстве или извлекаются из сторонних служб), вам следует. Они будут загружаться быстрее, и вы можете разместить больше их на экране одновременно, не сталкиваясь с проблемами с памятью.

Библиотека Three20 имеет действительно отличный элемент управления просмотром фотографий для iPhone. Я почти уверен, что у них есть только три фотографии в любое время ... фотография, на которую вы смотрите, и фотографии, идущие вперед или назад.

http://github.com/facebook/three20

Я также думаю, что есть ветвь iPad элементов управления Three20 (в ./tree/ipad), хотя я не знаю, включают ли они браузер фотографий или нет, и я еще не пробовал их сам ... Может быть, это вариант для вас, если вы не хотите тратить много времени на эту особенность вашего приложения. Если браузер фотографий для iPad еще не готов, возможно, вы можете просто адаптировать версию для iPhone под свои нужды (это не должно быть сложно).

Если вы хотите испечь эту функцию самостоятельно, я бы черпал вдохновение из UITableViewController. Ваш контроллер должен поставляться с соответствующими источниками данных и делегировать протоколы для получения фотографий и реагирования на пользовательские события. Сам базовый класс контроллера должен повторно использовать три UIImageViews и должен перемешивать их вокруг, чтобы создать иллюзию, что пользователь просматривает большой список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...