ios 7 image picker inside popover wrong behavior

后端 未结 3 1001
甜味超标
甜味超标 2021-02-04 00:44

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 turnin

相关标签:
3条回答
  • 2021-02-04 01:24

    The only one way which work properly in iOS7 is using of

    -presentViewController:animated:completion:

    You can try to change camera view transformation by cameraViewTransform property but result will be ugly. Adding of view to custom ViewController (which rotate to landscape) will give You ugly results too. I begin to hate this os version.

    0 讨论(0)
  • 2021-02-04 01:27

    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. ;)

    0 讨论(0)
  • 2021-02-04 01:28

    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

    0 讨论(0)
提交回复
热议问题