2011-08-28 23 views
9

Używam następującej funkcji do aktywowania kamery urządzenia lub wyboru obrazu w zależności od wyniku arkusza UIActionSheet. jeśli zCamera = TAK, działa na iPhone'ach i iPadach. jeśli zCamera = NIE, to działa na iPhone i pojawia się selektor obrazu. Ale zawiesza się na iPadzie z następującym błędem: UIStatusBarStyleBlackTranslucent nie jest dostępny na tym urządzeniu. Wiem już, że na iPadzie nie można wyświetlić paska statusu UIStatusBarStyleBlackTranslucent, ale jak mogę uniknąć awarii?Crash iPad Photo Picker

-(void)addPhotoFromCamera:(BOOL)fromCamera{ 

if(fromCamera){  
    picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
} 
else{ 
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
} 


[self presentModalViewController:picker animated:YES]; 

}

+0

Z pewnością ktoś tam używał UIImagePickerControllerSourceTypePhotoLibrary z iPadem? – wasabi

Odpowiedz

3

podejrzewam UIImagePicker dziedziczy półprzezroczysty pasek stanu z pliku Info.plist lub aktualnie wyświetlanego widoku kontrolera.

Co się stanie, jeśli aplikacja nie będzie miała półprzezroczystego paska stanu?

4

Jeśli ustawisz selektor do UIImagePickerControllerSourceTypePhotoLibrary na iPada, trzeba przedstawić go w popoverview (!) , w przeciwnym razie dostaniesz wyjątki. I zrobić to tak, aby conajmniej kontrolować wielkość popover (średnia wielkość jest zbyt mała, moim zdaniem):

-(void)openPhotoPicker 
{ 
    imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    imagePicker.navigationBar.opaque = true; 

    //put the image picker in its own container controller, to control its size 
    UIViewController *containerController = [[UIViewController alloc] init]; 
    containerController.contentSizeForViewInPopover = rightPane.frame.size; 
    [containerController.view addSubview:imagePicker.view]; 

    //then, put the container controller in the popover 
    popover = [[UIPopoverController alloc] initWithContentViewController:containerController]; 

    //Actually, I would like to do the following, but iOS doesn't let me: 
    //[rightPane addSubview:imagePicker.view]; 

    //So, put the popover over my rightPane. You might want to change the parameters to suit your needs. 
    [popover presentPopoverFromRect:CGRectMake(0.0, 0.0, 10.0,0.0) 
        inView:rightPane 
    permittedArrowDirections:UIPopoverArrowDirectionLeft 
        animated:YES]; 

    //There seems to be some nasty bug because of the added layer (the container controller), so you need to call this now and each time the view rotates (see below) 
    [imagePicker.view setFrame:containerController.view.frame]; 
} 

Mam także następujące, aby przeciwdziałać błąd obrotów:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    if(imagePicker!=nil && rightPane.frame.size.width>0) 
     [imagePicker.view setFrame:imagePicker.view.superview.frame]; 
} 

Nie jest doskonały, ale w tej chwili jest w porządku do moich celów testowych. Rozważam napisanie własnego Imagepicker, ponieważ nie lubię być zmuszonym do używania popoverview ... ale cóż, to inna historia.