UIImagePickerController's shutter - PullRequest
       5

UIImagePickerController's shutter

4 голосов
/ 25 января 2012

У меня ошибка с UIImagePickerController, источником которого является камера.Иногда после появления контроллера затвор не открывается, и я не вижу видеосигнал с камеры, но фотография сделана правильно.enter image description here

Может я что-то не так делаю?Код:

    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]){

            UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
            cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
            cameraUI.allowsEditing = NO;
            cameraUI.showsCameraControls = NO;
            cameraUI.delegate = self;

            NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
            UIView *controlsView = [nibObjects objectAtIndex:0];

            CGRect overlayViewFrame = cameraUI.cameraOverlayView.frame;
            CGRect controlsFrame = CGRectMake(0.0, CGRectGetHeight(overlayViewFrame) - 54.0,
                                         CGRectGetWidth(overlayViewFrame), 54.0);

            controlsView.frame = controlsFrame;
            [cameraUI.cameraOverlayView addSubview:controlsView];

            [self presentModalViewController: cameraUI animated: YES];            
    }

Ответы [ 3 ]

1 голос
/ 24 июля 2013

Если вы представляете UIImagePickerController не модально (рекомендуемый способ), то вы можете либо вызвать viewDidAppear и willAppear вручную, либо добавить UIImagePickerController в качестве дочернего контроллера представления, из которого вы представляете.

[thePresentingViewCotnroller addChildViewController:imagePickerController];

после этого вы можете добавить представление из imagePickerController в качестве подпредставления, это сделает методы жизненного цикла представления (viewWillAppear, didAppear and disappear) автоматически вызываемыми.

1 голос
/ 15 июня 2012

То же самое происходило со мной после блокировки / разблокировки приложения, похоже, что шторка открывается на viewDidAppear.

Итак, я подписал свой родительский контроллер представления на UIApplicationDidBecomeActiveNotification и повторно выполнил viewWillAppear вручнуюи методы viewDidAppear контроллера, содержащего UIImagePickerController

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationBecomeActive)
                                             name:UIApplicationDidBecomeActiveNotification
                                           object:nil];

.
. 
.

- (void)applicationBecomeActive {
    if (imagePicker_)
        [imagePicker_ openShutter];
}

И затем на контроллере, содержащем UIImagePickerController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [imagePickerController_ viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [imagePickerController_ viewDidAppear:animated];
    imagePickerController_.cameraFlashMode = cameraFlashMode_;
    imagePickerController_.cameraDevice = cameraDevice_;
}
- (void)openShutter {
    [imagePickerController_ viewWillAppear:YES];
    [imagePickerController_ viewDidAppear:YES];
}

PS: Если вы попробуете это, не забудьте удалить наблюдателя

[[NSNotificationCenter defaultCenter] removeObserver:self];

Надеюсь, это поможет

0 голосов
/ 02 июля 2014

Попробуйте добавить авто-релиз при инициализации UIImagePickerController:

UIImagePickerController *pickerController = [[[UIImagePickerController alloc] init] autorelease];
...