UIImagePickerController с использованием addSubView оставляет белое поле сверху экрана
Мне нужно добавить UIImagePickerController в режиме камеры, используя addSubView. Я написал код для него, но он оставляет пустое пространство в верхней части представления.
-(void)viewDidAppear:(BOOL)animated{
NSLog(@"ViewDidAppear");
OverlayView *overlay = [[OverlayView alloc]
initWithFrame:CGRectMake(0,0,SCREEN_WIDTH,SCREEN_HEIGTH)];
//create a new image picker instance
picker = [[UIImagePickerController alloc]init];
self.picker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
//set source to video!
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
//hide all controls
picker.showsCameraControls = NO;
picker.navigationBarHidden = NO;
picker.toolbarHidden = YES;
picker.editing = NO;
//make the video preview full size
picker.wantsFullScreenLayout = YES;
slider.value = 1;
picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform,slider.value, slider.value);
//set our custom overlay view
picker.cameraOverlayView = overlay;
[picker.view addSubview:slider];
//show picker
[picker.view addSubview:capture];
[picker.view addSubview:library];
//[picker.view addSubview:multicapture];
[capture addTarget:self action:@selector(takepicture) forControlEvents:UIControlEventTouchUpInside];
[library addTarget:self action:@selector(goToLibrary) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:picker.view];
[picker viewWillAppear:YES];
[picker viewDidAppear:YES];
}else{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Test Text" message:@"Camera is Not Availble" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
[alert show];
[alert release];
}
[overlay release];
}
Кто-нибудь может мне помочь, пожалуйста.
Благодарю.
3 ответа
Как говорит kante0, это белое поле исчезло в строке состояния. Если вы хотите показать строку состояния, используйте решение kante0:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
[self.view addSubview:picker.view];
Если вы не хотите показывать строку состояния (обычно при предварительном просмотре камеры), используйте этот фрагмент кода:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
[self.view setFrame: [[UIScreen mainScreen] bounds]];
// Place your overlay view here
[self.view addSubview:picker.view];
Но вы должны помнить, что после удаления окна выбора, если вы хотите снова показать строку состояния, вам нужно будет сделать следующее:
[picker.view removeFromSuperview];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[self.view setFrame: [[UIScreen mainScreen] applicationFrame]];
// If you need to place elements programmatically, do it here
Заглянуть в NSScreen
для получения точных размеров. Дважды проверьте правильность значения высоты. Например, вы можете сделать это:
int width = [[NSScreen mainScreen] frame].size.width;
int height = [[NSScreen mainScreen] frame].size.height;
Это не белое поле, исчезает строка состояния.
Я решил проблему с:
[[UIApplication sharedApplication] setStatusBarHidden: НЕТ с анимацией:UIStatusBarAnimationNone];