2013-09-26 12 views
10

Quindi sto tentando di aggiornare un'app per iOS 7 e sto riscontrando problemi con la mia sovrapposizione personalizzata. L'overlay è un'immagine con la quale sto inquadrando la foto (sia dal vivo che usando una versione a piena risoluzione per incorniciare il risultato finale nel rullino fotografico). Il problema è che ora, in iOS 7, l'overlay, mentre trasparente nella parte inferiore, fornisce l'accesso al normale pulsante "scatta foto", ma per qualche motivo non mi permette di toccare i pulsanti "Usa foto" o "Riake" che viene dopo che l'immagine è scattata. Ecco il frammento di codice chiamando il controller della vista:Dopo aver scattato l'immagine non è possibile selezionare Usa foto o Riprova

- (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 = YES; – Rajneesh071

risposta

0

Dopo aver scattato una foto, o di animazione sul tuo overlay è fatto, ho fatto il lavoro, eliminando la sovrapposizione dalla sua superview.

[UIView animateWithDuration:1 
         delay:1 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 

       } completion:^(BOOL finished) { 
        [self.view removeFromSuperview]; 
       }]; 
5

Il tuo problema: quando si inizializzato l'OverlayView, che hai impostato il telaio per avere la stessa dimensione di quello della raccoglitrice. UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame];

Spiegazione: Prima di catturare un'immagine, i pulsanti della fotocamera sono in primo piano in OverlayView, in modo che non vi siano problemi a premerli. Dopo aver catturato un'immagine (nella pagina "riprendi/usa la pagina di anteprima"), l'overlayView è quello che si trova in primo piano, bloccando così l'accesso ai pulsanti. So che questo è un problema su iOS7 e non sono sicuro delle altre versioni.

Possibili soluzioni: Dal momento che questo è un problema nativo all'interno UIImagePickerController di Apple, posso solo pensare di due soluzioni: (1) Se possibile, configurare l'OverlayView di avere un telaio più corto che non copre la parte inferiore del selettore; (2) Se hai bisogno dell'overlay per coprire questi pulsanti, hai ancora l'estenuante possibilità di configurare self.imagePicker.showsCameraControls = NO; ma poi dovresti personalizzare TUTTO il comportamento della videocamera (puoi trovare molti esempi sul Web).

+0

Oppure puoi impostare User Enteraction abilitato su NO in Overlay View;) Funziona per me – Vahan

12

Un altro approccio potrebbe essere quello di osservare le notifiche quando ImagePicker cambia stato e rimuovere (o disabilitare) l'overlay quando si passa alla schermata "Usa foto".

- (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

quegli osservatori sono di grande aiuto quando catturano i click "Retake" e "Use Preview" ... potresti pensare che Apple possa fornire callback per quelli .. – whyoz

+0

Grazie !!! Funziona correttamente! – alones

+0

Grazie. Ma quando riprendo la sovrapposizione di foto non viene visualizzato, per la soluzione sono appena cambiato se contenuto in self.cameraPicker.cameraOverlayView.hidden = NO e self.cameraPicker.cameraOverlayView = YES in addCameraOverlay e removeCameraOverlay rispettivamente. – VVJ

5

È possibile impostare User Enteraction Enabled-NO su Overlay View;) funziona per me

+1

Sì, funziona :) –