UIImagePickerController в пользовательском представлении не показывает камеру - PullRequest
2 голосов
/ 24 марта 2011

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

Теоретически это должно работать из коробки, но на практике иногда случается, чтоесли я отклоняю свой пользовательский контроллер представления, а затем снова открываю его «быстро», UIImagePickerController просто показывает пустой (черный, на самом деле) контент.Самое смешное, что если вы попытаетесь сделать снимок, камера на самом деле включена, затвор откроется, и вы сможете собрать изображение.Кажется, единственная проблема связана с отображением живого контента в определенном UIView.

Вот код, который я использую для его отображения:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

[imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePickerController setShowsCameraControls:NO];
[imagePickerController setEditing:NO];
[imagePickerController setNavigationBarHidden:YES];

[imagePickerView addSubview:[imagePickerController view]];
[imagePickerController viewWillAppear:YES];

Мне это не нравится viewWillAppear вызов метода, но это единственный способ, который я нашел, чтобы показать его.imagePickerView - это, действительно, вид, который я ранее создал, чтобы поместить сборщик.

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

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

Есть подсказка?Спасибо

1 Ответ

1 голос
/ 24 марта 2011

Вам определенно нужен этот вызов viewWillAppear, и, вероятно, больше. Всякий раз, когда UIImagePickerController представляется одним из «косвенных» методов представления (например, модальное представление или помещается в стек навигации), он автоматически отправляет все соответствующие уведомления, связанные с отображением: viewWillAppear :, viewDidAppear :, viewWillDisappear: и viewDidDisappear:.

Внутренне UIImagePickerController использует эти уведомления для выполнения соответствующих действий инициализации, таких как эффект затвора. Вы не знаете, как он их использует, вы просто должны быть уверены, что он их получает.

Когда вы представляете UIImagePickerController напрямую, добавляя его представление в качестве подпредставления, вы лишаете его автоматического получения этих уведомлений. Из View Controller Руководство по программированию :

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

Это не обязательно плохо, это просто означает, что вам нужно взять на себя ответственность за эти сообщения самостоятельно. Я не видел этой проблемы, связанной с отображением средства выбора, но моя первая попытка исправить это - убедиться, что каждое из этих 4 уведомлений, связанных с отображением, отправляется на контроллер средства выбора в соответствующее время, особенно исчезающие, если вы этого еще не сделали.

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