UIImagePickerController с использованием addSubView оставляет белое поле сверху экрана - PullRequest
2 голосов
/ 11 августа 2011

Мне нужно добавить 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 ]

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

Как говорит 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
1 голос
/ 13 сентября 2011

Не белое поле, исчезает строка состояния.

Я решил проблему с:

[[UIApplication sharedApplication] setStatusBarHidden: НЕТ withAnimation: UIStatusBarAnimationNone];

1 голос
/ 11 августа 2011

Посмотрите на NSScreen для получения точных размеров.Дважды проверьте правильность значения высоты.Например, вы можете сделать это:

int width = [[NSScreen mainScreen] frame].size.width;
int height = [[NSScreen mainScreen] frame].size.height;
...