представление наложения камеры - только для предварительного просмотра?

Я заметил, что в OS 3.1 Вы можете добавить представление наложения о сборщике изображения с

cameraOverlayView

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

Есть ли способ заставить это только произойти во время предварительного просмотра? Я не хочу, чтобы это было там во время открытой анимации ставня или экрана, который спрашивает, хотите ли Вы использовать изображение или взять обратно.

15
задан mac_55 17 January 2010 в 17:21
поделиться

3 ответа

Я выяснил, что вам выяснил способ достичь желаемого результата, хотя это немного ... не так стандарт. :)

Идея состоит в том, чтобы переставить немного порядок внутренних видов в структуре UiimagePickerController .

ОК, поэтому мы создаем объект UIIimagePickerController , инициализируйте его и добавьте его на оверлейный вид. Могу ли я получить ваше внимание, пожалуйста! Обзор UIVIEW ( UiimageView в примере) скрыто с самого начала. Не пропустите это. Наконец мы представляем контроллер Picker Image как контроллер модального просмотра. Этот код должен быть где-то в вашем ApplicationDIDFINISHLAUCHING: , , ViewWillAppear: или аналогичный, подходящий для методов запуска.

UIImagePickerController *anImagePickerController = [UIImagePickerController new];
anImagePickerController.delegate = self;
anImagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

UIImageView *anImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Watermark.png"]];
anImageView.frame = CGRectMake(0, 1, anImageView.image.size.width, anImageView.image.size.height);
anImageView.hidden = YES;
anImagePickerController.cameraOverlayView = anImageView;

[viewController presentModalViewController:anImagePickerController animated:NO];
[anImagePickerController release];

[NSTimer scheduledTimerWithTimeInterval:0.1
                                 target:self
                               selector:@selector(timerFireMethod:)
                               userInfo:anImageView
                                repeats:YES];
[anImageView release];

Перед просмотром наложения ( AnimageView ) создается Nstimer , инициализирован с AnimageView ( NSTIMER UserInfo Собственность) и запланировано сразу. Вот метод его называет:

- (void)timerFireMethod:(NSTimer*)theTimer {
    UIView *cameraOverlayView = (UIView *)theTimer.userInfo;
    UIView *previewView = cameraOverlayView.superview.superview;

    if (previewView != nil) {
        [cameraOverlayView removeFromSuperview];
        [previewView insertSubview:cameraOverlayView atIndex:1];

        cameraOverlayView.hidden = NO;

        [theTimer invalidate];
    }
}

В целом NSTIMER вещь добавляется к потоку для обеспечения того, чтобы восстановить работу вокруг, произойдет именно, когда UiimagePickerController будет полностью готов к этому.

Это это. Это работает, это не стандартно, это грубо и быстро. Снова не стесняйтесь оптимизировать и сделать его «Regiger» (о, пожалуйста, сделайте, моя цель - показать вам путь).

17
ответ дан 1 December 2019 в 01:05
поделиться

При наращивании сборника добавьте наложение на сборщику (Picker.cameraverlayView = MyView).

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

Вы можете удалить представление оверлей перед фотографированием ( MeetPicture метод) и добавить вид снова в ImagePickerController: DidfinishPickingMediaWithInfo:

-2
ответ дан 1 December 2019 в 01:05
поделиться

На самом деле, я пытался сделать то же самое, и я наткнулся на гораздо более простой способ сделать это из этого сообщения в блоге: http: // www.alexcurylo.com/blog/2009/06/18/uiimagepickercontroller-in-3-0/

Поскольку UIImagePickerController может вызывать UINavigatorControllerDelegate, метод ниже вызывается до отображения средства выбора изображений.

Вот важный код:

 - (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];
}

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

6
ответ дан 1 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

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