#iphone #image #load #uiimageview #uiimage
#iPhone #изображение #загрузить #uiimageview #uiimage
Вопрос:
Я загружаю 5-мегапиксельное изображение в вызывающий UIImageView self.imagecontainer.image = myUIImage
. myUIImage — это изображение, поступающее с камеры iPhone.
Требуется некоторое время, прежде чем изображение можно будет увидеть на экране, и даже если я смогу сократить это время, мне нужно запустить процесс, когда изображение действительно отобразится на экране.
Как я могу узнать, что изображение загружено и отображается, а не просто все еще обрабатывается UIImageView?
Ответ №1:
Ну … во-первых, вы не должны устанавливать 5-мегапиксельное изображение в ImageView. ImageView предназначен только для отображения на экране, и даже при том, что он масштабирует изображение, установленное вами для целей отображения, оригинал сохраняется, поэтому объем вашей памяти значительно увеличивается. Если вы сделаете это в лучшем случае, у вас будет неэффективное приложение, которое имеет дело с большим количеством предупреждений о памяти. В худшем случае вы будете часто зависать.
Итак, вам следует изменить размер вашего изображения до наименьшего размера, соответствующего вашим потребностям отображения на экране, а затем установить это изображение в вашем ImageView. Это мой любимый пост в блоге о том, как изменять размер изображений: http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way.
Теперь, к вашему вопросу. Вы не можете знать наверняка, когда изображение отобразится, но это произойдет так быстро, как только вы масштабируете, вы можете просто предположить, что оно отобразится, как только вы его установите. Итак, выполните масштабирование в фоновом потоке. Когда масштабирование завершено, отправьте сообщение в основной поток, чтобы установить масштабированное изображение в ImageView, а затем делайте все, что хотите.
Комментарии:
1. вам действительно нравится этот блог! только что видел, как вы публикуете это где-то еще 🙂
2. просто совпадение. кто-то задал связанный с этим вопрос. но я действительно использую код Тревора в своих приложениях. Вы были бы удивлены (или нет), сколько людей делают это неправильно.
3. Ха, только что понял, что @Oliver задал оба вопроса. В любом случае, надеюсь, я помог.
4. Да, вы помогли 🙂 Хороший код, но не быстрее, чем поведение по умолчанию, заданное Apple. Но хороший код.
5. Как насчет того, когда вы устанавливаете изображение через Interface Builder?