Я заметил, что в OS 3.1 Вы можете добавить представление наложения о сборщике изображения с
cameraOverlayView
Однако я также заметил, что добавление представления с помощью этого метода также показывает представление в течение всего времени, UIImagePicker показан, когда я только хочу показать его во время стадии предварительного просмотра.
Есть ли способ заставить это только произойти во время предварительного просмотра? Я не хочу, чтобы это было там во время открытой анимации ставня или экрана, который спрашивает, хотите ли Вы использовать изображение или взять обратно.
Я выяснил, что вам выяснил способ достичь желаемого результата, хотя это немного ... не так стандарт. :)
Идея состоит в том, чтобы переставить немного порядок внутренних видов в структуре 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» (о, пожалуйста, сделайте, моя цель - показать вам путь).
При наращивании сборника добавьте наложение на сборщику (Picker.cameraverlayView = MyView).
Наложение не будет на снимке. Так же, как говорится, оверлейный вид.
Вы можете удалить представление оверлей перед фотографированием ( MeetPicture
метод) и добавить вид снова в ImagePickerController: DidfinishPickingMediaWithInfo:
На самом деле, я пытался сделать то же самое, и я наткнулся на гораздо более простой способ сделать это из этого сообщения в блоге: 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];
}
Надеюсь, что это поможет.