2013-09-26 9 views
10

Próbuję zaktualizować aplikację na iOS 7 i mam problemy z nakładką niestandardową. Nakładka jest obrazem, na którym kadrowałem zdjęcie (zarówno na żywo, jak i przy użyciu wersji o pełnej rozdzielczości, aby oprawić końcowy wynik w rolkę kamery). Problem polega na tym, że teraz, pod iOS 7, nakładka, podczas gdy przezroczysta na dole, zapewnia dostęp do zwykłego przycisku "zrób zdjęcie", ale z jakiegoś powodu nie pozwala mi dotknąć przycisków "Użyj zdjęcia" lub "Ponów" które pojawiają się po zrobieniu zdjęcia. Oto fragment kodu wywołanie kontroler widoku:Po wykonaniu zdjęcia nie można wybrać Użyj zdjęcia lub Ponów

- (IBAction)takePhoto:(UIButton *)sender { 

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 
picker.allowsEditing = NO; 
picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
picker.showsCameraControls = YES; 

// Overlay Creation 
UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame]; 
    overlayView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"PBOverlayView.png"]]; 
    [overlayView.layer setOpaque:NO]; 
    overlayView.opaque = NO; 

picker.cameraOverlayView = overlayView; 

[self presentViewController:picker animated:YES completion:NULL]; 

} 
+0

picker.allowsEditing = TAK; – Rajneesh071

Odpowiedz

0

Po zrobieniu zdjęcia lub animacji na nakładki jest zrobione, zrobiłem to działa poprzez usunięcie nakładkę od jej SuperView.

5

Twój problem: Po zainicjowaniu overlayView ustawiłeś ramkę na taką samą wielkość jak selektor. UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame];

Objaśnienie: Przed zrobieniem zdjęcia przyciski aparatu znajdują się na pierwszym planie nakładkiView, dzięki czemu nie ma problemu z ich naciśnięciem. Po przechwyceniu obrazu (na stronie "Ponów/użyj podglądu") nakładka będzie widoczna na pierwszym planie, blokując dostęp do przycisków. Wiem, że jest to problem na iOS7 i nie jestem pewien innych wersji.

Możliwe rozwiązania: Ponieważ jest to natywny problem w ramach UIImagePickerController firmy Apple, mogę myśleć tylko o dwóch rozwiązaniach: (1) Jeśli to możliwe, skonfiguruj overlayView tak, aby miał krótszą ramkę, która nie obejmuje dna selektora; (2) Jeśli potrzebujesz nakładki do pokrycia tych przycisków, nadal masz wyczerpującą opcję konfiguracji self.imagePicker.showsCameraControls = NO;, ale wtedy będziesz musiał dostosować WSZYSTKIE zachowanie kamery (możesz znaleźć wiele przykładów na to w Internecie).

+0

Lub możesz ustawić User Enteraction Enabled na NIE w widoku nakładki;) działa dla mnie – Vahan

12

Innym podejściem może być obserwowanie powiadomień, gdy ImagePicker zmienia stan i usunąć (lub wyłączyć) nakładkę po przejściu do ekranu "Użyj zdjęcia".

- (void) addPhotoObservers { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeCameraOverlay) name:@"_UIImagePickerControllerUserDidCaptureItem" object:nil ]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addCameraOverlay) name:@"_UIImagePickerControllerUserDidRejectItem" object:nil ]; 
} 

- (void) removePhotoObservers { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

-(void)addCameraOverlay { 
    if (self.cameraPicker) { 
     self.cameraPicker.cameraOverlayView = self.myCameraOverlayView; 
    } 
} 

-(void)removeCameraOverlay { 
    if (self.cameraPicker) { 
     self.cameraPicker.cameraOverlayView = nil; 
    } 
} 
+0

te obserwatory są ogromną pomocą przy przechwytywaniu kliknięć "Odśwież" i "Użyj podglądu". Można by pomyśleć, że Apple zapewniałoby wywołania zwrotne dla tych .. – whyoz

+0

Dziękujemy! Działa poprawnie! – alones

+0

Dzięki. Ale kiedy powtórna nakładka zdjęć nie jest wyświetlana, dla rozwiązania właśnie się zmieniłem, jeśli treść jest taka sama.cameraPicker.cameraOverlayView.hidden = NO i self.cameraPicker.cameraOverlayView = TAK w addCameraOverlay i removeCameraOverlay odpowiednio. – VVJ

5

Można ustawić User Enteraction Enabled do NO na Overlay widok;) działa na mnie

+1

Tak, to działa :) –

Powiązane problemy