2012-01-20 10 views
5

W mojej aplikacji IOS po otwarciu aparatu umieściłem obraz na widoku z kamery. Wygląda dobrze w trybie portretu. Ale kiedy zostanie zmieniony na tryb poziomy, wygląda to dziwnie. Dlatego chcę zablokować UIImagePickerController w trybie Portret.Blokuj UIImagePickerController w trybie portretowym w aplikacji ios

Poniżej mój kod ui obrazu kontrolera kompletowania

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

Jak to może być zablokowane w trybie pionowym ....

Odpowiedz

2

Nie jest to najlepsze rozwiązanie, ale działa:

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

Kamera na tle nadal obraca się, ale twój widok nakładki doesnt. Mam nadzieję, że to zadziała

+0

Nie działa w systemie iOS5 – filou

0

Wystarczy napisać ten kod w kontrolerze widoku

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

bezużyteczne ... wciąż ten sam numer ... –

+0

Po prostu wróć NIE. lub napisz ten kod –

+0

[[UIDevice currentDevice] setOrientation: UIDeviceOrientationPortrait]; –

0

Dodaj kategorię na UIImagePickerController i zastąp tę metodę następująco:

@implementation UIImagePickerController (NoRotate) 

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

@end 
+0

Utworzyłem dwa pliki: UIIMagePickerController + NoRotate.h i .m. Dodałem to do .m, mam włączone pliki w viewController, który wywołuje UIImagePickerController, ale selektor nadal się obraca. Czy muszę podklasować selektor? Dzięki. – SpaceDog

+0

Nie powinieneś/musieć, pozwól mi spróbować, a ja wrócę do ciebie. –

+0

ok dzięki !!!!!! – SpaceDog

1

Nie musisz "blokować kontrolera UIImagePicker w trybie portretu". Jak powiedziałeś "kiedy jest zmieniony na tryb poziomy, wygląda to trochę dziwnie" Właściwie nie wiem, dlaczego mówisz, że wygląda dziwnie. Ale tutaj jest moje doświadczenie widoku UIImagePicker wyglądają dziwne w trybie poziomym. To jest: Gdy AViewController jest kontrolerem widoku głównego. Widok BViewController dodaje podgląd do widoku AViewController. i presentModalViewController:UIImagePickerController w BViewController. Widok UIImagePicker będzie wyglądał dziwnie w trybie poziomym.

Rozwiązaniem tego problemu jest UIImagePickerController jako kontroler widoku głównego przed presentModelViewController. poniżej Kod źródłowy pokazać szczegół:

- (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]; 
    .... 
} 

Mam nadzieję, że to rozwiązanie może pomóc innej osobie w przyszłości. --Goman

2

Jedynym rozwiązaniem, który pracował dla mnie była kategoria, ale musiałem dodać inną metodę zbyt:

#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;} 

Spróbuj tego w kontrolerze widoku. To działało dla mnie. Uwaga: To jest dla ios6.0 a przede

3

Albo można podklasy UIImagePickerController:

utworzyć nową klasę UIImagePickerController i wystarczy dodać te linie do niego.

- (BOOL)shouldAutorotate{ 
return NO; 
} 

Zaimportuj go do klasy, która używa aparatu i zamiast używać domyślnego UIImagePickerController, użyj utworzonej klasy.

Aparat powinien się zatrzymać z automatycznego obracania.

0

nie ma potrzeby tworzenia podklasy, wystarczy utworzyć kategorię dla uiimagepickercontroller i umieścić na niej linię - (BOOL) shouldAutorować { return NO; }

Powiązane problemy