cameraOverlayПросмотреть анимацию затвора - PullRequest
4 голосов
/ 26 марта 2011

У меня прозрачный вид с прямоугольником, нарисованным на нем с использованием CoreGraphics.Когда камера запускает пользовательский вид наложения выше анимации затвора.То, что вы видите, это стандартный затвор камеры с прямоугольником над ним.Как заставить его идти в нужном месте, под анимацией затвора?Я посмотрел другой пример кода, но он для ОС 3.1 и, кажется, ничего не делает по-другому.

Вот мой код:

-(IBAction)cameraButton{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerCameraDeviceRear]){

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType =  UIImagePickerControllerSourceTypeCamera;

    //Add the OverlayView with the custom Rectangle
    CGRect overlayFrame = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
    OverlayView *overlayView = [[OverlayView alloc]initWithFrame:overlayFrame];
    picker.cameraOverlayView = overlayView;
    [overlayView release];

    [self presentModalViewController:picker animated:YES];
    [picker release];
}
}

Ответы [ 4 ]

2 голосов
/ 05 марта 2013

На iPad этой проблемы не существует, и по умолчанию наложение отображается за анимацией затвора. Но на iPhone наложение появляется спереди.

Я нашел решение, которое сработало для меня.

Вы должны установить вид наложения как подпредставление в этом методе:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (!viewController)
        return;

    UIView* controllerViewHolder = viewController.view;
    UIView* controllerCameraView = [[controllerViewHolder subviews] objectAtIndex:0];
    UIView* controllerPreview = [[controllerCameraView subviews] objectAtIndex:0];
    [controllerCameraView insertSubview:self.overlayView aboveSubview:controllerPreview];
}

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

Оригинальный источник: http://www.alexcurylo.com/blog/2009/06/18/uiimagepickercontroller-in-3-0/

1 голос
/ 26 марта 2011

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

В качестве несовершенного обходного пути вы могли бы начатьналожение с альфа = 0, а затем установите альфа на 1 секунду или две позже.Но не существует установленного периода времени, в течение которого затвор появляется перед «открытием» (я думаю, это зависит от того, сколько времени занимает инициализация аппаратного обеспечения камеры), поэтому иногда ваш интерфейс может появляться не слишком поздно, а иногда может появляться слишком рано.

0 голосов
/ 31 мая 2013

Я ответил на аналогичный вопрос здесь .То, что работало для меня (в iOS 6), устанавливало cameraOverlayView в navigationController: willShowViewController: animated.

- (void) navigationController:(UINavigationController*) navigationController willShowViewController:(UIViewController*) viewController animated:(BOOL) animated {
    self.imagePickerController.cameraOverlayView = ...; // your camera overlay view
}
0 голосов
/ 13 мая 2011

Начиная с 4.3.3, анимация затвора нарушена, потому что элементы отображаются сверху, а затем щелкают внизу при запуске анимации. Я подал это как Радар: http://openradar.appspot.com/radar?id=1204401

...