Вопрос по iphone, uiimagepickercontroller – Как узнать, готова ли камера iPhone к съемке?

27

когда[camera takePicture] вызывается до того, как камера готова, выдает это сообщение:

UIImagePickerController: ignoring request to take picture; camera is not yet ready.

Как я могу узнать, когда он готов сделать фотографию?

[camera isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] всегда возвращает истину, даже когда он явно не готов.

Я действительно надеюсь, что задержка - не единственный путь, хотя кажется, что это так. Конечно, есть лучшее решение ... James Skidmore
Подобный вопрос наstackoverflow.com/questions/6817920/… - выбранный ответ неверен, но есть другой ответ, который говорит о добавлении задержки. Это, вероятно, хорошая отправная точка. Tass
Также смstackoverflow.com/questions/4377303/… - кажется, что есть код возврата, когда камера не готова. Проверьте результат, подождите и попробуйте снова. Tass
Можете ли вы ориентироваться на устройства iOS 4+? Есть решение, но оно нуждается в AVFoundation вместо UIImagePickerController. djromero
Да, я смотрю как минимум на iOS 4.2.1. James Skidmore

Ваш Ответ

7   ответов
0

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.cameraIsReady), name: AVCaptureSessionDidStartRunningNotification, object: nil)


func cameraIsReady(notification :NSNotification ) {
     print("Camera is ready...")
}
Это NSNotification.Name.AVCaptureSessionDidStartRunning сейчас :)
0

) снова готов, когда

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaW,ithInfo info: [String : AnyObject]) {

называется. Если вы заинтересованы в блокировке изображений в течение этого периода времени, просто отключите интерфейс кнопки (button.userInterfaceEnabled = false) до тех пор, пока вызов не вернется с мультимедиа. Я решил эту проблему, используя imagePickerController.

-1

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

UIImagePickerController *picker;
BOOL cameraIsOn;

Затем проверьте, доступно ли устройство камеры

if ([UIImagePickerController isCameraDeviceAvailable:[picker cameraDevice]]) {
            if (cameraIsOn) {
                NSLog(@"stop camera");
                [picker stopVideoCapture];
                cameraIsOn = FALSE;
            }
            else {
                NSLog(@"start camera");
                [picker startVideoCapture];
                self.videoTimer =  [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(changeValue) userInfo:nil repeats:YES];
                cameraIsOn = TRUE;
            }
        }
-1

что захват видео начнется, как только камера будет готова

imgpicker = [[UIImagePickerController alloc] init];  
[self presentViewController:imgpicker animated:YES completion:^(void){       
while(![imgpicker startVideoCapture]);
}];
0

что @Alladinian сказал, было самым полезным, этот ответ является дополнительным к этому. Я рекомендую использовать его метод AVCaptureSessionDidStartRunningNotification, поскольку он сообщает, когда камера изначально готова (но это вызывается только один раз). Меня также беспокоит, готово ли устройство для последующих снимков. Я не нашел лучшего решения, потому что я не вижу никаких обратных вызовов для устройства, которые не относятся к сеансу камеры. Но эта функция обратного вызова кажется достаточно хорошей:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

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

UIImagePickerController: ignoring request to take picture; image is already being captured or camera not yet ready.
46

AVFoundation (ноnot instead изUIImagePickerController, Вы просто используетеAVFoundation получить уведомление обратно).

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(cameraIsReady:)
                                             name:AVCaptureSessionDidStartRunningNotification object:nil];

И тогда, когда камера будет готова, вы получите свое уведомление:

- (void)cameraIsReady:(NSNotification *)notification
{   
    NSLog(@"Camera is ready...");
    // Whatever
}

Я только что проверил, позвонивtakePicture послеUIImagePickerController презентация (где я получил сообщение «камера не готова») и прямо внутри моего обратного вызова для уведомлений, где он работает как чудо-кнопка.

Side-note:

[camera isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] всегда возвращаетсяYes потому что он только проверяет наличие доступного устройства камеры. На самом деле, Apple рекомендует вам всегда проверять, что это возвращаетYes и что у вас есть не ноль делегат (чтобы обеспечить способdismiss Выборщик через стандартный интерфейс), прежде чем пытаться инициализировать и представить контроллер.

Error: User Rate Limit ExceededUIImagePickerController.
Error: User Rate Limit Exceeded James Skidmore
Error: User Rate Limit ExceededAVFoundationError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded James Skidmore
Error: User Rate Limit ExceededAVFoundationError: User Rate Limit Exceeded James Skidmore
1

я не пробовал, и документация несколько двусмысленна, но как насчет[UIImagePickerController isCameraDeviceAvailable:...]?

РЕДАКТИРОВАТЬ: Как я только что узнал, это не решение вашей проблемы. Извините, я подумал, что стоит попробовать ...

Error: User Rate Limit Exceeded James Skidmore

Похожие вопросы