Я нашел для вас способ достичь желаемого результата, хотя он немного ... не такой уж стандартный.:)
Идея состоит в том, чтобы немного изменить порядок внутренних представлений в структуре, используемой UIImagePickerController
.
OK, поэтому мы создаем объект UIImagePickerController
, инициализируем его и добавляемналожение вид на него.Могу я обратить ваше внимание, пожалуйста!Объект UIView
(UIImageView
в примере кода) скрыт с самого начала.Не пропустите это.Наконец, мы представляем контроллер выбора изображения в качестве контроллера модального вида.Этот код должен быть где-то в вашем applicationDidFinishLaunching:
, 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
будет полностью готов к этому.
Вот и все.Это работает, это не стандартно, это грубо и быстро.Опять же, не стесняйтесь оптимизировать и сделать это «правильным» (о, пожалуйста, моя цель состояла в том, чтобы показать вам путь).