2012-01-20 10 views
5

Nella mia app IOS, quando apro la fotocamera ho posizionato un'immagine sopra la telecamera. Sembra buono in modalità verticale. Ma quando viene cambiato in modalità orizzontale sembra strano. Quindi voglio bloccare lo UIImagePickerController in modalità verticale.lock UIImagePickerController in modalità Portrait in app ios

seguito è il mio codice per un'immagine ui regolatore picker

UIImagePickerController *imgPkr = [[UIImagePickerController alloc] init]; 
imgPkr.delegate = self; 
imgPkr.sourceType = UIImagePickerControllerSourceTypeCamera; 

Come può essere bloccato in modalità ritratto ....

risposta

2

Questa non è la soluzione migliore, ma funziona:

AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
[appDelegate.window addSubview:cameraOverlay]; 
imgPicker.cameraOverlayView = appDelegate.window.superview; 

La macchina fotografica sullo sfondo ruota ancora, ma la visualizzazione overlay Indifferente. Spero che funzioni per voi

+0

non funziona su iOS5 – filou

0

Basta scrivere questo codice nel vostro controller di vista

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations. 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
+0

non usare ... ancora lo stesso problema ... –

+0

Basta restituire NO. oppure scrivere questo codice –

+0

[[UIDevice currentDevice] setOrientation: UIDeviceOrientationPortrait]; –

0

Aggiungere una categoria su UIImagePickerController e ignorare il metodo shouldAutoRotateToInterfaceOrientation, come segue:

@implementation UIImagePickerController (NoRotate) 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 
+0

Ho creato due file: UIIMagePickerController + NoRotate.h e .m. Ho aggiunto questo a. M, ho incluso i file nel viewController che chiama UIImagePickerController ma il selettore continua a ruotare. Devo creare una sottoclasse del selezionatore? Grazie. – SpaceDog

+0

Non avresti bisogno di, fammi provare e tornerò da te. –

+0

ok grazie !!!!!! – SpaceDog

1

Non è necessario "bloccare il controller UIImagePicker in modalità Ritratto". Come hai detto "quando è cambiato in modalità orizzontale sembra strano" In realtà non so perché dici che sembra strano. Ma la mia esperienza con UIImagePicker è strana in modalità orizzontale. Ovvero: Quando AViewController è il controller della vista radice. E la vista di BViewController aggiunge una sottoview alla vista di AViewController. E presentModalViewController:UIImagePickerController in BViewController. La vista UIImagePicker apparirà dispari in modalità orizzontale.

La soluzione a questo problema è impostare UIImagePickerController come controller della vista radice prima di presentModelViewController. Il codice sorgente sotto mostrano dettaglio:

- (void) onCameraButtonTapped:(UIBarButtonItem *)buttonItem 
{ 
    //backupRootController it's use as a backup, it will recover after close the image picker controller. 
    self.backupRootController = [[UIApplication sharedApplication] keyWindow].rootViewController; 

    UIImagePickerController * imageController = [[UIImagePickerController alloc] init]; 
    imageController.sourceType = UIImagePickerControllerSourceTypeCamera; 
    imageController.delegate = self; 
    .... 
    [[[UIApplication sharedApplication] keyWindow] setRootViewController:imageController]; 
    [self presentModalViewController:imageController animated:YES]; 
    [imageController release]; 
} 


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [[[UIApplication sharedApplication] keyWindow] setRootViewController:self.backupRootController]; 
    .... 
} 

Spero che questa soluzione può aiutare altre persone in futuro. --Goman

2

L'unica soluzione che ha funzionato per me era la categoria, ma ho dovuto aggiungere un altro metodo di troppo:

#import "UIImagePickerController+NoRotate.h" 

@implementation UIImagePickerController (NoRotate) 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
@end 

Cheers!

0
-(BOOL)shouldAutorotate { 
return NO;} 

Prova questo nel controller di visualizzazione. Questo ha funzionato per me. Nota: Questo è per ios6.0 e soprattutto

3

In alternativa, è possibile creare una sottoclasse del UIImagePickerController:

creare una nuova classe UIImagePickerController e basta aggiungere queste righe ad esso.

- (BOOL)shouldAutorotate{ 
return NO; 
} 

Importa alla classe che utilizza la fotocamera e invece di utilizzare di default UIImagePickerController, utilizzare la classe che si è creato.

La fotocamera stessa dovrebbe fermarsi dalla rotazione automatica.

0

non v'è alcuna necessità di creare una sottoclasse, basta creare una categoria per UIImagePickerController e mettere questa riga su di esso - (BOOL) shouldAutorotate { ritorno NO; }