Я написал простейшее приложение для iPhone. У него есть одно окно просмотра. Этот основной вид содержит вид изображения и 2 кнопки с метками «Изображение из библиотеки» и «Сделать изображение». Приложение выводит изображение в соответствии с выбранной кнопкой и делает его изображением для UIImageView
. Код для получения изображения следующий:
- (void) onCapturePicture:(BOOL)fromLibrary
{
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
[controller setDelegate: self];
[controller setSourceType: fromLibrary ? UIImagePickerControllerSourceTypePhotoLibrary : UIImagePickerControllerSourceTypeCamera];
[controller setAllowsEditing: YES];
[self presentModalViewController: controller animated: YES];
[self setImagePickerController: controller];
}
Функция делегата, при которой изображение возвращается и присваивается элементу управления UIImageView
, выглядит следующим образом:
- (void) imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *pickedImage = [info objectForKey: UIImagePickerControllerEditedImage];
[_pictureView setImage: pickedImage];
[[self view] setNeedsDisplay];
[self dismissModalViewControllerAnimated: YES];
}
Я пробовал также с UIImagePickerControllerOriginalImage
с теми же результатами, а именно: когда изображение поступает из библиотеки фотографий, оно отлично отображается как изображение в UIImageView
. Когда изображение снято с помощью камеры, оно не отображается вообще, даже если указатель на возвращенное изображение не равен нулю. Если я использую
- (void) imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo
Вместо этого все работает как положено, но в документации указано, что оно устарело, и я полагаю, что это может быть причиной отклонения моего приложения.
Плюс, у меня есть еще 2 вопроса по теме:
UIPickerController
занимает много времени, чтобы отобразиться в первый раз, когда он вызывается при выборе изображения из библиотеки фотографий (например, 11 секунд). Есть ли способ уменьшить это время загрузки с помощью какого-то трюка? (тихая предварительная загрузка во время простоя или что-то в этом роде)?
Как только камера открывается, приложение получает предупреждение о памяти (Получено предупреждение о памяти. Уровень = 1). Есть ли способ избежать этого, или я делаю что-то не так? Это простое ванильное приложение с 2 кнопками. В основном 90% кода, который я набрал для этого приложения, перечислены в этом сообщении. Просто открытие камеры вызывает это. Как я могу избежать этой проблемы? Я прочитал другие сообщения об утечках памяти в UIImagePickerController
, но это не относится к этому случаю. Я получаю предупреждение памяти в первый раз, когда я выполняю код, чтобы получить изображение с камеры.
Заранее спасибо.