2013-04-07 2 views
6

Ho una semplice UIImagePickerController che utilizzerà la fotocamera per scattare una foto, ma ci sono un paio di cose che mi piacerebbe che fare:Come creare un UIImagePickerController personalizzato con immagini a schermo intero ios

  • Avere una fotocamera personalizzato UI
  • Take a pieno schermo, invece di 480x640 (se al telefono 4inch)

Ecco il mio codice per mostrare l'UIImagePickerController:

- (IBAction)pick:(id)sender { 
    NSLog(@"abc"); 
    picker = [[UIImagePickerController alloc] init]; 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     [picker setSourceType:UIImagePickerControllerSourceTypeCamera]; 
    } else { 
     [picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    } 
    [picker setDelegate:self]; 
    [self presentViewController:picker animated:YES completion:nil]; 

} 

e qui è per quando l'immagine viene scattata:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [imageView setImage:image]; 
} 

Come posso fare questo?

Grazie

risposta

8

Per il primo punto suppongo che si potrebbe utilizzare la proprietà cameraOverlayView di un oggetto UIImagePickerController aggiungere l'interfaccia utente personalizzata tramite l'interfaccia selettore di default:

- (IBAction)pick:(id)sender { 
    NSLog(@"abc"); 
    picker = [[UIImagePickerController alloc] init]; 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     [picker setSourceType:UIImagePickerControllerSourceTypeCamera]; 
    } else { 
     [picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    } 

    // Add here your custom UI here 
    [picker setCameraOverlayView:self.customCameraOverlayView]; 

    [picker setDelegate:self]; 
    [self presentViewController:picker animated:YES completion:nil]; 

} 

EDIT

Ho testato lo UIImagePickerController e restituisce l'immagine con le sue dimensioni intere (PixelXDimension e PixelYDimension):

UIImagePickerControllerMediaMetadata =  { 
     DPIHeight = 72; 
     DPIWidth = 72; 
     Orientation = 6; 
     "{Exif}" =   { 
      ApertureValue = "2.526068811667588"; 
      BrightnessValue = "-0.5779073354035674"; 
      ColorSpace = 1; 
      DateTimeDigitized = "2013:04:07 22:30:03"; 
      DateTimeOriginal = "2013:04:07 22:30:03"; 
      ExposureMode = 0; 
      ExposureProgram = 2; 
      ExposureTime = "0.05882352941176471"; 
      FNumber = "2.4"; 
      Flash = 24; 
      FocalLenIn35mmFilm = 35; 
      FocalLength = "4.28"; 
      ISOSpeedRatings =    (
       800 
      ); 
      MeteringMode = 3; 
      PixelXDimension = 3264; 
      PixelYDimension = 2448; 
      SceneType = 1; 
      SensingMethod = 2; 
      ShutterSpeedValue = "4.058893689053568"; 
      SubjectArea =    (
       1874, 
       1478, 
       610, 
       612 
      ); 
      WhiteBalance = 0; 
     }; 
     "{TIFF}" =   { 
      DateTime = "2013:04:07 22:30:03"; 
      Make = Apple; 
      Model = "iPhone 4S"; 
      Software = "6.1.3"; 
      XResolution = 72; 
      YResolution = 72; 
     }; 
    }; 

EDIT

Inoltre è possibile impostare per la vostra immagine visualizzare la modalità del contenuto per ridimensionare e adattare la vista del contenitore:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [imageView setContentMode:UIViewContentModeScaleAspectFill]; 
    [imageView setImage:image]; 
} 

e dopo che per adattarsi alla imageView di cui hai bisogno in te vedi il controller tenendo in considerazione lo schermo del dispositivo (4 pollici o meno) usando auto layout o auto sizing.

+1

La seconda parte ha funzionato, ma nella prima parte l'overlay è solo sullo schermo. Voglio cambiare l'aspetto dei pulsanti (icona della foto). Come lo farei? –

+1

Puoi nascondere i controlli predefiniti usando 'showsCameraControls' e nella tua UI personalizzata, che hai impostato usando' cameraOverlayView', puoi aggiungere un pulsante con un'azione che chiama il metodo 'takePicture' di imagePickerController. – alexcristea

+0

Da dove proviene l'oggetto 'imageView'? – lelelo