Камера iPhone Iris / Затвор застрял в закрытом положении - PullRequest
19 голосов
/ 09 ноября 2011

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

Диафрагма или затвор камеры застряли в закрытом положении. Самое смешное, что вы все еще можете сделать снимок, но вы не можете видеть предварительный просмотр. После того как снимок сделан, он правильно отображается на виде.

Эта проблема не возникает при запуске приложения, если оно полностью закрыто. Я могу делать снимки, добавлять эффекты и т. Д., Каждый раз, когда камера открывается, она работает правильно.

Вот точные шаги, чтобы воспроизвести проблему:

1) Открываю приложение, все отлично работает.

2) Приложение входит в фоновый режим нажатием кнопки «Домой» или входящего вызова.

3) Когда приложение выходит на передний план / открывается снова, и камера получает доступ, экран затвора отображается и остается закрытым в застрявшем положении.

4) Единственный способ исправить это - отключить контроллер камеры модального вида и снова нажать кнопку камеры.

Я провел некоторое исследование, чтобы найти ответ, и ничего не нашел. Нет утечек памяти, я проверил распределение памяти в приборах, и в этом нет ничего необычного.

Надеюсь, у кого-то есть решение, я ценю помощь.

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

Ответы [ 7 ]

12 голосов
/ 11 ноября 2011

У меня точно такая же проблема, но немного сузилась - это происходит только с iOS 5. С некоторыми подсказками от других людей, говорящих о памяти, я освободил как можно больше памяти, прежде чем представить UIImagePickerController и проблему перестал происходить.

6 голосов
/ 09 июня 2012

У меня возникла такая же проблема при запуске в проекте ARC.

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

Использование проблем с памятью в качестве основной подсказки - я обнаружил, что мой оверлейный вид имеет strong ссылку на imagePickerController.Я изменил это на слабую ссылку, и проблема ушла.

5 голосов
/ 10 ноября 2011

Я думаю, что когда у вас возникла проблема, и попытайтесь сфотографироваться с помощью приложения Apple, у вас также возникнет проблема.Не так ли?Если да, вы можете перезагрузить устройство для решения проблемы.И применить совет Даны.

4 голосов
/ 09 ноября 2011

Когда приложение переходит в фоновый режим, вы должны отключить камеру и представить ее, когда приложение восстановит фокус.

2 голосов
/ 07 июня 2012

У меня была такая же проблема, следующие решения работают для меня.всякий раз, когда вы представляете UIImagePickerController модально.Инициируйте его и отпустите после использования.Надеюсь, это работает и для вас.

self.imagePickerController = [[UIImagePickerController alloc] init];
self.imagePickerController.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    self.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.imagePickerController.showsCameraControls = NO;

    self.imagePickerController.cameraOverlayView = cameraOverlayView;
} else {
    self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
}
[self presentViewController:imagePickerController animated:YES completion:^(void)
 {
   // If you want to do something extra
 }];
1 голос
/ 14 марта 2013

Комбинация следующих двух работала для меня

  1. Изменен тип справочного оверлея с ' strong ' на ' слабый '

  2. picker = nil , после закрытия imagePickerController (при отмене или после съемки изображения)

1 голос
/ 31 мая 2012

Просто включите кого-нибудь в эту проблему, используя MonoTouch, чтобы получить то же поведение, что и при отпускании средства выбора изображений, которое я должен был вызвать dispose, а затем выполните вручную GC.Collect ();

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