Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ios 7 image picker inside popover wrong behavior

My image picker view controller setted inside popover controller. On iOS 6 everything works great, but on iOS 7 the image is rotated and all movings are doing verse: when turning iPad left image is going down, when moving up image going left, etc.

Here is the code for showing my camera:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;

    objPopView = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [objPopView presentPopoverFromRect:CGRectMake(842, 163, 0, 0)
                                inView:self.view
              permittedArrowDirections:UIPopoverArrowDirectionRight
                              animated:YES];

My app uses only landscape mode, now image is rotated: enter image description here

like image 241
aparesidam Avatar asked Sep 26 '13 10:09

aparesidam


2 Answers

As the Apple's Official Doc said:

Present the user interface. On iPhone or iPod touch, do this modally (full-screen) by calling the presentViewController:animated:completion: method of the currently active view controller, passing your configured image picker controller as the new view controller.

On iPad, the correct way to present an image picker depend on its source type, as summarized in this table:

  • Camera Photo: Use full screen
  • Library Saved: Must use a popover
  • Photos Album: Must use a popover

...

On iPad, if you specify a source type of UIImagePickerControllerSourceTypeCamera, you can present the image picker modally (full-screen) or by using a popover. However, Apple recommends that you present the camera interface only full-screen.

Though it said "you can present the image picker modally (full-screen) or by using a popover", as you see by using a popover will result with this weird issue. I guess this might be a bug on iOS 7 SDK.

I'm still trying to fix this issue, but for now, the only way I can tell is to show it modally by

-presentViewController:animated:completion:

method, which is in full-screen (Actually, I don't like this way).

And there's a THREAD discussed about it on Apple's Dev Forums, you can take a look at it. ;)

like image 147
Kjuly Avatar answered Oct 20 '22 15:10

Kjuly


Try the following:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;

CGFloat scaleFactor=1.3f;

switch ([UIApplication sharedApplication].statusBarOrientation) {

    case UIInterfaceOrientationLandscapeLeft:

        imagePicker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * 90 / 180.0), scaleFactor, scaleFactor);

        break;

    case UIInterfaceOrientationLandscapeRight:

        imagePicker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -90 / 180.0), scaleFactor, scaleFactor);

        break;

    case UIInterfaceOrientationPortraitUpsideDown:

        imagePicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI * 180 / 180.0);

        break;

        default:
            break;
    }

objPopView = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[objPopView presentPopoverFromRect:CGRectMake(842, 163, 0, 0)
                            inView:self.view
          permittedArrowDirections:UIPopoverArrowDirectionRight
                          animated:YES];

credit to https://stackoverflow.com/a/19071958/1363779

like image 43
kevinl Avatar answered Oct 20 '22 14:10

kevinl