Отображение UIImagePickerController в другом UIView

Последние пару месяцев я довольно много работал с UIImagePickerController, особенно с новыми возможностями в OS3.1 и новее для наложения видов поверх обзора камеры. Это отлично сработало.

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

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

Мне удалось добавить UIImagePickerController в представление окна, а также представить его модально, но мне не удалось добавить его как subView.

ex:

[window addSubview:camera.view];
[self presentModalViewController:camera animated:YES];

person u2elan    schedule 18.11.2009    source источник
comment
Из документа: Важно: класс UIImagePickerController поддерживает только портретный режим. Этот класс предназначен для использования «как есть» и не поддерживает создание подклассов. Иерархия представлений для этого класса является частной и не должна изменяться. Это так просто.   -  person Fattie    schedule 26.02.2014
comment
Это просто presentViewController, не используйте модальный. Итак, [сам присутствующийViewController: анимированный ipc: завершение ДА: NULL];   -  person Fattie    schedule 26.02.2014


Ответы (3)


Все, что вам нужно сделать, это вызвать viewWillAppear и viewDidAppear.

Вот пример, где _pickerController является экземпляром UIImagePickerController:

[self.view addSubview:_pickerController.view];
[_pickerController viewWillAppear:YES];
[_pickerController viewDidAppear:YES];
person jj0b    schedule 02.06.2010
comment
Это позволяет мне показывать камеру как часть любого вида (объектив открывается, и все в порядке). Однако полоса вверху с часами, индикатором заряда батареи и т. Д. Исчезнет и превратится в белую полоску. Я предполагаю, что UIImagePickerController не предназначен для использования при отображении верхней панели. - person Jano; 04.03.2011
comment
Точно сказать не могу. Строку состояния я всегда убираю. - person jj0b; 06.04.2011
comment
Спасибо. Я только что добавил [self.pickerForProfilePicture.view removeFromSuperview]; - person YaBoiSandeep; 17.02.2014

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

person Jim    schedule 19.11.2009
comment
Просто попробовал, и вид с камеры отображается, но объектив не открывается. Он просто остается на этом графике с закрытой линзой. Не уверен, связана ли эта проблема с этим или нет. Вот что я сделал: [self.view addSubview: camera.view]; [вид камерыБудет появляться: ДА]; - person u2elan; 19.11.2009

Я не думаю, что API обеспечивает прямой доступ к фактическому представлению UIImagePickerController. Этот класс на самом деле является подклассом UINavigationController, поэтому я не думаю, что он имеет собственное представление, а скорее управляет вызовом своих субконтроллеров и их представлениями.

Когда вы вызываете UIImagePickerController модально, он не добавляет представления, которыми он управляет, в качестве подпредставлений в окно (или любое другое представление). Вот что означает модальное представление. Он представляет вид "сбоку" от иерархии представлений.

Даже если бы вы могли взломать это вместе, я думаю, Apple отклонила бы это как не являющееся частью API и за нарушение HIG.

person TechZen    schedule 18.11.2009
comment
UIImagePickerController является подклассом UIViewController, который имеет свойство представления, поэтому должно быть нормально использовать это свойство представления в качестве подпредставления другого UIView. - person jjxtra; 08.01.2013