How to use UIImagePickerController in iPad?

后端 未结 4 965
太阳男子
太阳男子 2020-12-01 12:34

Hi i am working on a universal application (iPhone/iPad). one feature is that i have to select a photo from album and show it on UIImageView.

Now problem is that it

相关标签:
4条回答
  • 2020-12-01 13:01

    Here i show you the SWIFT way:

    import UIKit
    class StoreItemViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
    {
        @IBOutlet weak var button: UIButton!
        @IBOutlet weak var productImage: UIImageView!
        var popOver:UIPopoverController?
    
        @IBAction func buttonSelected(sender:UIButton)
        {
            if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum)
            {
                var imagePickerController = UIImagePickerController()
                imagePickerController.delegate = self
                imagePickerController.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum
                imagePickerController.allowsEditing = false
    
                if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad
                {
                    self.popOver = UIPopoverController(contentViewController: imagePickerController)
                    self.popOver?.presentPopoverFromRect(self.productImage.bounds, inView: self.productImage, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)      
                }
                else
                {
                    self.presentViewController(imagePickerController, animated: true, completion: { imageP in
    
                    })
                } 
            }
        }
    
        func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
             //do anything with the image
            let selectedImage = info[UIImagePickerControllerOriginalImage] as UIImage
    
            //closing the popup
            popOver?.dismissPopoverAnimated(true)
    
        }
    
        func imagePickerControllerDidCancel(picker: UIImagePickerController) 
        {
             println("cancel")
    
           //closing the popup
           popOver?.dismissPopoverAnimated(true)
        }
    }
    
    0 讨论(0)
  • 2020-12-01 13:10

    POST iOS 8: Try adding popOver controller in

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{ }];

    Reason : This is because in iOS 8, alert views and action sheets are actually presented view controllers (UIAlertController). So, if you're presenting a new view controller in response to an action from the UIAlertView, it's being presented while the UIAlertController is being dismissed. You need to do it on main queue without disturbing the navigation.

    0 讨论(0)
  • 2020-12-01 13:12

    The Apple docs say

    "Present the user interface 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, present the user interface using a popover. Doing so is valid only if the sourceType property of the image picker controller is set to UIImagePickerControllerSourceTypeCamera."

    That says the exact opposite from how it behaves?!? You CANT present UIImagePickerControllerSourceTypeCamera from a popover and you CANT present UIImagePickerControllerSourceTypePhotoLibrary and UIImagePickerControllerSourceTypeSavedPhotosAlbum modally.

    Strange...

    0 讨论(0)
  • 2020-12-01 13:21

    UIImagePickerController must be presented with UIPopoverController on iPad.

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker];
        [popover presentPopoverFromRect:self.selectedImageView.bounds inView:self.selectedImageView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        self.popOver = popover;
    } else {
        [self presentModalViewController:picker animated:YES];
    }
    

    EDIT: Add a strong property for the UIPopoverController:

    @property (nonatomic, strong) UIPopoverController *popOver;
    

    The popover should be dismissed in the delegate methods:

    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    
    -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
    
    0 讨论(0)
提交回复
热议问题