2014-04-28 4 views
0

J'essaie d'inverser mon UIImagePickerController afin qu'il soit capable à la fois de remplir l'écran d'un iPhone 5 et, évidemment, être inversé. Voici le code que j'ai le UIImagePickerController:UIImagePickerController ne tourne pas et Translating/Scaling

- (void)applicationDidBecomeActive 
{ 

UIImagePickerController *imageViewPickerController = [[UIImagePickerController alloc] init]; 
imageViewPickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
imageViewPickerController.showsCameraControls = NO; 
imageViewPickerController.cameraViewTransform = CGAffineTransformMakeRotation(DEGREES_RADIANS(180)); 
imageViewPickerController.cameraViewTransform = CGAffineTransformMakeTranslation(0.0, 71.0); 
imageViewPickerController.cameraViewTransform = CGAffineTransformScale(imageViewPickerController.cameraViewTransform, 1.333333, 1.333333); 


[self presentViewController:imageViewPickerController 
        animated:NO 
       completion:NULL]; 


} 

Si je lance ce code, je ne suis pas d'inversion. Si je modifie comme si:

- (void)applicationDidBecomeActive 
{ 

UIImagePickerController *imageViewPickerController = [[UIImagePickerController alloc] init]; 
imageViewPickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
imageViewPickerController.showsCameraControls = NO; 
    imageViewPickerController.cameraViewTransform = CGAffineTransformMakeTranslation(0.0, 71.0); 
imageViewPickerController.cameraViewTransform = CGAffineTransformScale(imageViewPickerController.cameraViewTransform, 1.333333, 1.333333); 
imageViewPickerController.cameraViewTransform = CGAffineTransformMakeRotation(DEGREES_RADIANS(180)); 


[self presentViewController:imageViewPickerController 
        animated:NO 
       completion:NULL]; 


} 

il intervertit, mais seulement prend un carré 320x320 de l'écran, sans tenir compte de mes autres transformations. Si quelqu'un pouvait apporter une certaine expertise sur la façon de l'amener à suivre tous ces arguments, je l'apprécierais vraiment.

Répondre

1

Vous devriez essayer de concaténer toutes les transformations que vous créez dans un transform, puis le définir comme cameraViewTransform comme ceci:

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0); 
CGAffineTransform scale = CGAffineTransformMakeScale(1.333333, 1.333333); 
CGAffineTransform rotate = CGAffineTransformMakeRotation(DEGREES_RADIANS(180)); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
transform = CGAffineTransformConcat(transform, rotate); 
imageViewPickerController.cameraViewTransform = transform; 
+0

CGAffineTransformMakeTranslation est pas un travail pour iOS 6 – Alena

+0

CGAffineTransformMakeTranslation a été ajouté dans iOS 2. Y at-il une chance il y a quelque chose d'autre qui est la question? – alex

+0

Peut être ma réponse http://stackoverflow.com/a/23893665/989896 va vous aider. – Alena

1

Le code suivant fonctionne pour moi (pour ios 6 et 7). Mais notez que j'ajoute imagePickerController.view en tant que sous-vue de ma vue d'espace réservé.

CGSize screenSize = [UIScreen mainScreen].bounds.size; 

    CGFloat cameraAspectRatio = 3.0f/4.0f; 

    CGFloat scale = (screenSize.height/screenSize.width) * cameraAspectRatio; 

    CGFloat yOffset = (screenSize.height - screenSize.width/cameraAspectRatio)/2.0; 

    CGAffineTransform translate = CGAffineTransformMakeTranslation(0, yOffset); 
    CGAffineTransform fullScreen = CGAffineTransformMakeScale(scale, scale); 
    CGAffineTransform fullTranform = CGAffineTransformConcat(fullScreen, translate); 

    if(SYSTEM_VERSION_LESS_THAN(@"7.0")) 
    { 
     CGRect rect = self.imagePickerController.view.frame; 
     rect.size.height = screenSize.width/cameraAspectRatio; 
     rect.size.width = screenSize.width; 
     imagePickerController.view.frame = rect; 

     imagePickerController.view.transform = fullTranform; 
    } 
    else 
    { 
     imagePickerController.view.frame = [UIScreen mainScreen].bounds; 
     imagePickerController.cameraViewTransform = fullTranform; 
    } 

    [self.placeholder addSubview:imagePickerController.view];