2012-04-15 13 views
6

¿Es posible cambiar el tamaño de cuadro desplegable de UIImagePickerController? Quiero mostrar la vista de la cámara pero no en toda la pantalla, pero digo en un cuadro delimitador de 100x100.configurando el tamaño del marco de UIImagePickerController

Aquí es mi 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]; 
} 

no pude encontrar una manera de hacer que duerma en cualquier lugar ... nadie allí?

+0

¿Has resuelto tu pregunta? –

Respuesta

12

Experimenté con el código de mi última publicación y comenté la transformación de escala final ((la que lo hace de tamaño completo) y terminé con una hermosa cámara miniatura imagePicker flotando en el medio de la pantalla, por lo que ! que sin duda funciona el código exacto que utiliza, incluyendo la transición de zoom/fade-in, es -

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]; 

estoy seguro de que podría personalizarlo más, cambiar la ubicación del tamaño & de la vista de la cámara

.
+1

buen trabajo amigo – coder1010

+1

Tu código funciona bien. Pero el margen inferior de la pantalla de superposición es más que el margen superior, por lo que no llega exactamente al centro de la pantalla. ¿Alguna solución para eso? –

+0

Simplemente cambie la posición final del controladorView en las animaciones: bloque – SomaMan

1

A veces he agregado la vista de ImagePicker directamente, aunque nunca he experimentado con cambiar su tamaño final, se "acerca" a la pantalla, sugiriendo que es posible mostrarla en diferentes tamaños (código elevado directamente de uno de mis proyectos, por lo que probablemente no todos relevante) -

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]; 

interesados ​​en ver si se obtiene ningún resultado con este.

+0

no, no funcionó, lo siento ... Me sorprende que algo tan simple no pueda encontrar en ninguna parte. – TommyG

3

Si desea mostrar una superposición en la parte superior del UIImagePickerController, como en mi caso, mientras está al mismo tiempo de ajustar el "avance de la cámara en vivo" del controlador (la vista) entre algunos componentes de la interfaz de usuario en su superposición (como una barra superior y una barra inferior), use el siguiente código. Esto se basa en la respuesta anterior de SomaMan (GRACIAS), con la diferencia principal de que se visualiza la vista de UIImagePickerController como una subvista del controlador actual en lugar de como una subvista de la ventana principal de la aplicación. Pon este código en 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]; 

TIP: Al hacer cameraViewTransform, asegúrese de aplicar la misma transformación en la fotografía resultante de que el selector de captura para usted si desea que el usuario termina con la misma imagen que vean a través de la vista del selector transformado: P

+0

@ Alex - ¿cómo establecer la transformación en uiimage? –

+0

@kshitijgodara Hola, lo siento, acabo de darme cuenta de esto, pero básicamente dejé de usar UIImagePickerController debido a sus limitaciones. Usar el framework AV no fue difícil en absoluto, y escribí una publicación en el blog que cubre eso como parte de algunas otras cosas hace un tiempo: http://radioactiveukrainian.com/2014/01/06/testing-a-camera-app -in-ios-simulator / –

Cuestiones relacionadas