изображение, возвращаемое UIImagePickerViewController, не отображается - PullRequest
2 голосов
/ 22 ноября 2011

Я написал простейшее приложение для 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 вопроса по теме:

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

  2. Как только камера открывается, приложение получает предупреждение о памяти (Получено предупреждение о памяти. Уровень = 1). Есть ли способ избежать этого, или я делаю что-то не так? Это простое ванильное приложение с 2 кнопками. В основном 90% кода, который я набрал для этого приложения, перечислены в этом сообщении. Просто открытие камеры вызывает это. Как я могу избежать этой проблемы? Я прочитал другие сообщения об утечках памяти в UIImagePickerController, но это не относится к этому случаю. Я получаю предупреждение памяти в первый раз, когда я выполняю код, чтобы получить изображение с камеры.

Заранее спасибо.

1 Ответ

1 голос
/ 11 июля 2013

Вы можете изменить эти строки:

[[self view] setNeedsDisplay];
[self dismissModalViewControllerAnimated: YES];

на:

[self dismissViewControllerAnimated:YES completion:nil];

Поскольку я не верю, что вам нужно обновить дисплей.Я предлагаю вам изменить метод увольнения просто потому, что я проверил его, и он работает.Удачи.

...