2012-04-15 20 views
6

È possibile modificare la dimensione del frame visualizzabile di UIImagePickerController? Voglio visualizzare la vista della videocamera ma non sull'intero schermo, ma diciamo in un riquadro di delimitazione 100x100.configurazione della dimensione del frame di UIImagePickerController

Ecco il mio viewDidAppear:

- (void) viewDidAppear:(BOOL)animated { 

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
picker.showsCameraControls = NO; 
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront; 
picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, CAMERA_TRANSFORM_X, CAMERA_TRANSFORM_Y); 

[self presentModalViewController:picker animated:YES]; 

[super viewDidAppear:YES]; 
} 

non riuscivo a trovare un modo per farlo ovunque ... doesnt nessuno usarla?

+0

Hai risolto la tua domanda? –

risposta

12

Ho sperimentato con il codice del mio ultimo post e ho commentato la trasformazione di scala finale ((quella che lo rende a grandezza intera) e ho finito con una bella fotocamera in miniatura imagePicker fluttuante nel mezzo del mio schermo, quindi ! sicuramente funziona il codice esatto che ho usato, compresa la transizione zoom/fade-in, è -

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 

imagePickerController.delegate = self; 
imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]; 
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 

UIView *controllerView = imagePickerController.view; 

controllerView.alpha = 0.0; 
controllerView.transform = CGAffineTransformMakeScale(0.5, 0.5); 

[[[[UIApplication sharedApplication] delegate] window] addSubview:controllerView]; 

[UIView animateWithDuration:0.3 
        delay:0.0 
       options:UIViewAnimationOptionCurveLinear 
      animations:^{ 
       controllerView.alpha = 1.0; 
      } 
      completion:nil 
]; 

[imagePickerController release]; 

sono sicuro che si può personalizzare di più, cambiare la posizione dimensione & della telecamera

.
+1

tizio stupendo lavoro – coder1010

+1

Il tuo codice funziona bene. Ma il margine inferiore dello schermo sovrapposto è superiore al margine superiore e quindi non si trova esattamente al centro dello schermo. Qualche soluzione per quello? –

+0

Basta modificare la posizione finale del controllerView nelle animazioni: blocco – SomaMan

1

A volte ho aggiunto direttamente la vista di ImagePicker, anche se non ho mai provato a modificarne la dimensione finale, "ingrandisce" lo schermo, suggerendo che potrebbe essere possibile visualizzarlo a diverse dimensioni (codice sollevato direttamente da uno dei miei progetti, quindi probabilmente non tutte le pertinenti) -

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 

imagePickerController.delegate = self; 
imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]; 
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 

UIView *controllerView = imagePickerController.view; 

controllerView.alpha = 0.0; 
controllerView.transform = CGAffineTransformMakeScale(0.5, 0.5); 

[[[[UIApplication sharedApplication] delegate] window] addSubview:controllerView]; 

[UIView animateWithDuration:0.3 
         delay:0.0 
        options:UIViewAnimationOptionCurveLinear 
       animations:^{ 
        controllerView.transform = CGAffineTransformMakeScale(1.0, 1.0); 
        controllerView.alpha = 1.0; 
       } 
       completion:nil 
]; 

[imagePickerController release]; 

curioso di vedere se si ottiene alcun risultato con questo.

+0

nop, non ha funzionato, mi dispiace ... Sono sorpreso che qualcosa di così semplice non possa trovare da nessuna parte. – TommyG

3

Se si desidera visualizzare una sovrapposizione sopra UIImagePickerController, ad esempio nel mio caso, mentre allo stesso tempo che si adatta al "live camera feed" del controller (la vista) tra alcuni componenti dell'interfaccia utente sul proprio overlay (come una barra superiore e una barra in basso), utilizzare il seguente codice. Questo è basato sulla risposta di SomaMan sopra (GRAZIE), con la differenza principale di visualizzare la vista di UIImagePickerController come una sottoview del controller corrente anziché come una sottoview della finestra principale dell'applicazione. Mettete questo codice in viewDidLoad():

// Overlay view with custom camera controls and a top bar and a bottom bar 
self.overlay = [[CameraOverlayView alloc] initWithFrame:self.view.bounds]; 
[self setOverlayViewModel]; 

self.imagePicker = [[UIImagePickerController alloc] init]; 
self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
self.imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 
self.imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff; 
self.imagePicker.showsCameraControls = NO; 
self.imagePicker.navigationBarHidden = YES; 
self.imagePicker.toolbarHidden = YES; 
self.imagePicker.delegate = self; 

UIView *imagePickerView = self.imagePicker.view; 

if ([[UIScreen mainScreen] bounds].size.height == 568.0f) { 
    // iPhone 5, 16:9 ratio, need to "zoom in" in order to fill the screen since there is extra space between top and bottom bars on a taller screen 
    self.imagePicker.cameraViewTransform = CGAffineTransformScale(self.imagePicker.cameraViewTransform, 1.5, 1.5); // change 1.5 to suit your needs 
} 
CGRect cameraViewFrame = CGRectMake(0, self.overlay.topBarHeight, 
            self.view.bounds.size.width, 
            self.view.bounds.size.height - self.overlay.topBarHeight - self.overlay.bottomBarHeight); 
imagePickerView.frame = cameraViewFrame; 

// keep this order so that the overlay view is on top of the "live camera feed" view 
[self.view addSubview:imagePickerView]; 
[self.view addSubview:self.overlay]; 

SUGGERIMENTO: Quando si fa cameraViewTransform, assicurarsi di applicare la stessa trasformazione sulla foto risultante che il selettore cattura per voi, se si desidera che l'utente per finire con la stessa immagine che vedono attraverso il punto di vista del trasformatore trasformato: P

+0

@ Alex - come impostare la trasformazione su uiimage? –

+0

@kshitijgodara Ciao, scusa, ho appena notato questo, ma fondamentalmente ho rinunciato a usare UIImagePickerController a causa dei suoi limiti. L'uso del framework AV non è stato affatto difficile, e ho scritto un post sul blog che lo riguarda come parte di altre cose qualche tempo fa: http://radioactiveukrainian.com/2014/01/06/testing-a-camera-app -in-ios-simulatore / –

Problemi correlati