Вы должны реализовать пользовательский UIImagePickerController
. Для этого вам нужно установить свойство imagepicker showsCameraControls
в FALSE.
self.mImagePickerController.showsCameraControls = NO;
self.mImagePickerController.wantsFullScreenLayout = YES;
После этого никакие элементы управления по умолчанию не будут видны вам. Вам нужно настроить пользовательские кнопки для запуска/остановки записи и листать камеру и т.д.
Теперь вы можете использовать старт/стоп методы для записи видео:
Когда один нажимает на запись запуска,
[self.mImagePickerController startVideoCapture];
Для остановки
[self.mImagePickerController stopVideoCapture];
Чтобы отслеживать переключения между камерой, вы можете использовать флаг
if (self.mImagePickerController.cameraDevice == UIImagePickerControllerCameraDeviceRear)
{
self.mImagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
isFrontCamera = YES;
}
else
{
self.mImagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear;
isFrontCamera = NO;
}
Вы можете установить элементы управления, как вы хотите, при изменении ориентации. AppDelegate.m
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
Это делегат, который вызывается при изменении ориентации. Вы можете использовать объект определенного класса, чтобы вызвать его метод toAutorotate и настроить позиции управления камерой в соответствии с ориентацией.
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
[self.objController shouldAutorotate];
return UIInterfaceOrientationMaskAll;
}
Теперь внутри cameraviewcontroller.m
-(BOOL)shouldAutorotate
{
UIInterfaceOrientation interfaceOrientation = [[UIDevice currentDevice]orientation];
if(interfaceOrientation == UIInterfaceOrientationPortrait)
{
// your controls setup
}
else
{
// view accordingly for landscape
}
}
Я попытался охватить все точки. Дайте мне знать, если у вас есть путаница. Надеюсь, это поможет :)
1) Вам нужно проверить состояние события щелчка кнопки флип-камеры.
2) AppDelegate.h: Объявите объект своего класса, где вы записываете свое видео и создаете свойство. Здесь я использую в качестве примера CameraViewController
.
CameraViewController *objController;
Сейчас в AppDelegate.m:
self.objController = [[CameraViewController alloc]initWithNibName:@"CameraViewController" bundle:nil];
Теперь используйте этот экземпляр для вызова метода shouldAutorotate
как я показал выше. И вернуться в альбомной ориентации:
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if(isOptionScreenActive == YES)
{
[self.shareController shouldAutorotate];
return UIInterfaceOrientationMaskLandscape;
}
else
{
[self.anotherController shouldAutorotate];
return UIInterfaceOrientationMaskPortrait;
}
}
Здесь isOptionScreenActive
является flag
, который устанавливается в viewWillAppear
класса записи. Установите его false
в viewDidUnload
. Или может быть viewWillAppear
другого класса.
3) Я использовал cameraviewcontroller.m как пример. Он отражает ваш класс записи. Также в методе shouldAutorotate
класса видеозаписи, если обнаруженная ориентация является портретом, просто верните НЕТ. Таким образом, пользовательский интерфейс не изменится, и вы сможете сохранить пользовательский интерфейс только в ландшафте.
не закрывайте этот вопрос. вопрос, который вы дали ссылку, не имеет правильного ответа, и все решения из этих комментариев не работают. –
@iPatel вы прочитали мой вопрос? Я уже говорил об этой ссылке. –
Вы пытались установить ориентацию видео? http://stackoverflow.com/questions/14811641/ios-camera-orientation#14812010 – Gotschi