UIImagePickerController不旋转和翻译/缩放

时间:2014-04-28 21:40:38

标签: ios objective-c cocoa-touch camera

我正在尝试反转我的UIImagePickerController,以便它能够填满iPhone 5的屏幕,显然是倒置的。这是我为UIImagePickerController提供的代码:

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


}

如果我运行此代码,我没有得到任何反转。如果我这样修改它:

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


}

它反转,但只占用320x320平方的屏幕,无视我的其他转换。如果有人可以提供一些专业知识,如何让它遵循所有这些论点,我会非常感激。

2 个答案:

答案 0 :(得分:1)

您应该尝试将您创建的所有转换连接到一个转换中,然后将其设置为cameraViewTransform,如下所示:

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;

答案 1 :(得分:1)

以下代码适用于我(适用于ios 6和7)。但请注意我将imagePickerController.view添加为占位符视图的子视图。

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