(Вопрос решен в комментариях и в редактировании. См. Вопрос без ответов, но проблема решена в комментариях (или расширена в чате) )
ОП написал:
Вот что стало решением:
У меня есть два UIViewController. Основной ViewController и CustomOverlay (для элементов управления камерой).
В ViewController я объявляю тип источника и оверлей для управления камерой может следующим образом:
- (void)viewDidLoad
{
// notification from the CustomOverlay Controller that triggers the eTakePicture method
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eTakePicture:) name:@"eTakePicture" object:nil];
daysBtn.delegate = self;
daysBtn.hidden = YES;
picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
picker.showsCameraControls = NO;
picker.navigationBarHidden = YES;
picker.wantsFullScreenLayout = YES;
picker.delegate = self;
overlay = [[CustomOverlay alloc] initWithNibName:@"CustomOverlay" bundle:nil];
// Overlay for the camera controls, note the "= overlay.view", the ".view" was important
// because the overlay is a new UIViewcontroller (with xib) so you have to call the
// view. Most tutorials that I saw were based on UIView so only "= overlay" worked.
picker.cameraOverlayView = overlay.view;
[self presentModalViewController:picker animated:NO];
[super viewDidLoad];
}
Теперь на CustomOverlay, который является UIViewController, у меня есть кнопка «Сделать снимок», и я хочу, чтобы эта кнопка вызывала метод в главном ViewController:
- (IBAction)shoot:(id)control {
[[NSNotificationCenter defaultCenter] postNotificationName:@"eTakePicture" object:self];
}
И вернемся к основному ViewController:
-(void)eTakePicture:(NSNotification *)notification
{
[picker takePicture];
}
Весь приведенный выше код немного изменится после того, как я его рассмотрю, особенно в первом блоке, где я должен иметь условие, чтобы проверить, доступен ли cameraSourceType.
Надеюсь, это поможет кому-то там. Любой вопрос, просто спросите.