2015-07-19 2 views
-1

Я создаю приложение iOS, где мне нужно использовать много фотографий (в большом разрешении). Есть почти 400 фотографий. Я хочу использовать их для отображения в UIImageView на разных страницах. Но это большой набор данных. Поэтому я боюсь об эффективности (не столько), сколько о размере самого приложения. Каков наилучший способ использования этих фотографий в приложении iOS? Имеет ли смысл создавать New Image Set и создавать 1x, 2x и 3x фотографии для каждой фотографии или мне нужно использовать другие функции, о которых я сейчас не говорю?Как использовать большой кучу фотографий в приложении iOS

UPD1: Приложение посвящено достопримечательностям. Из табличного экрана пользователь может выбрать любой вид и будет показан экран с 1-3 фотографиями (в CollectionView, если есть более 1 фотографии) и некоторый текст. Все данные (кроме фотографий) Я получаю от sqlite db с помощью CoreData.

Фотографии, показанные на экране, имеют ширину, равную ширине экрана (высота 25:38 от ширины). Ширина больше :)

  1. Я хочу использовать фотографии большого разрешения, потому что хочу показать полноразмерные фото по крану.
  2. Каждая фотография может быть 2000px или более на самой большой стороне .
  3. Приложение является автономным приложением, поэтому я хочу хранить фотографии в приложении . Теперь я просто об имиджевых активах. Но есть ли другие способы сделать фотографии ?

У меня есть идея сохранить их в высоком разрешении и изменить размер на любое устройство (3x, 2x, 1x) для отображения на экране. И загружайте фотографию с высоким разрешением фотографии, только когда пользователь нажимает на нее, чтобы показать фотографию в полноэкранном режиме.

ответ

2

Вы не можете загрузить все фотографии из приложения - это кстати. невозможно из-за проблем с памятью при загрузке изображений.

Вы должны сначала подумать о том, чтобы сами представлять фотографии и фотографии.

  • Нужно ли показывать фотографии в большом разрешении?
  • Какое большое разрешение означает? Это разрешение 1024x1024 или родное или что?
  • Откуда загружены эти фотографии? Приложение включает в себя или вы загрузите их из системной библиотеки? Я вижу, что вы пишете об объектах изображения, возможно, вы хотите сохранить их в приложении.
  • Вам нужно показать это изображение в постоянной почти 0 раз? Может быть, сохранить его на бэкэнд, а выборка и кеш при необходимости будет лучше. При этом вы можете уменьшить размер приложения.
  • Вы можете сохранить в активах только самую большую - @ 3x и изменить ее размер на устройствах, которым это нужно во время выполнения, перед их отображением.

Для сохранения фотографий в памяти устройства вы можете использовать NSCache - Apple's Documentation и позволить системе управлять фотографиями. Вы загрузите это и выполните кеширование в экземпляре NSCache, и каждый раз, когда вы хотите получить к нему доступ, и получите фотографию, вы должны проверить, есть ли фотография или нет, и если вам нужно повторно загрузить ее с диска. Это каким-то образом позволит вашему устройству не получать предупреждения о памяти и автоматически управлять фотографиями.

  • Еще одна важная вещь, которую нужно думать, - это то, как вы планируете показывать фотографии. Можно ли показывать только по одному за раз или больше показать?Вы хотите представить эскизы из них, и после того, как пользователь выберет какую-нибудь фотографию, вы увидите ее в большом разрешении? Использование эскизов будет иметь меньший объем памяти.

Update 1:

UPD1: Приложение о достопримечательностях. Из табличного пользователя пользователь может выбрать любые места и будет показан экран с 1-3 фотографиями (в CollectionView, если есть более 1 фотографии) и некоторый текст. Все данные (кроме фотографий) Я получаю от sqlite db с помощью CoreData.

Приложение является автономным приложением, поэтому я хочу хранить фотографии в приложении. Теперь я просто об имиджевых активах. Но есть ли другие способы хранения фотографий?

Для этого вам не нужен каталог активов. Просто сохраните его в каком-то каталоге проекта и загрузите его из каталога/Documents, когда это необходимо. ИМО это будет наилучшим возможным подходом к хранению и использованию на местном уровне. Сохранение их в активах приведет к тому, что в файле xcassets будет @ 1x и @ 2x пустым. Думаю, сохранить их прямо в проекте будет проще.

Я хочу использовать фотографии большого разрешения, потому что хочу показать полноразмерные фотографии по крану. Каждая фотография может быть 2000px или более на самой большой стороне.

У меня есть идея сохранить их в высоком разрешении и изменять размер на любое устройство (3x, 2x, 1x) для отображения на экране. И загружайте высокое разрешение, когда пользователь нажимает на фотографию, чтобы показать фотографию на весь экран.

Сохранение таких больших фотографий в приложении плохая идея, приложение будет большим. Даже если одна фотография будет размером 1 Мб, что, я думаю, невозможно, и есть 400 фотографий, приложение будет толстым.

Вы должны подумать о том, чтобы держать их в сети, действительно.

Вы также знаете все изображения в приложении, чтобы создавать эскизы в реальном времени и кэшировать их в каталоге/Cache для последующего использования. То же самое с большими фотографиями для определенного разрешения экрана устройства. Перед отображением изменения размера и сохранения в каталоге/Cache для будущего использования в следующий раз.

+0

Я обновил вопрос, потому что обновление было большим для комментариев. Я хочу знать, что лучше всего хранить в приложении так много фотографий и как эффективно их контролировать. Чем вы – DenFav

+0

Обновлен мой ответ. –

+0

«Просто сохраните его в каком-то каталоге проекта и загрузите его из каталога/Documents при необходимости». Я правильно понимаю вас? Чтобы сохранить фотографии, я должен сохранить их в '[[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]; '? – DenFav

Смежные вопросы