在 Swift 中使用 UIButton 制作图像选择器

Making an Image Picker with UIButton in Swift

我想制作一个带有指向 ImagePickerView 的 UIButton 的图像选择器,但我不知道如何进行。

我们会说我想将 ViewController "A"(带有 UIButton)连接到 ViewController "B"(UIImagePicker)。

这是我尝试过的:我有一个包含多个 ViewController 的故事板,我不知道为什么我不能从 ViewController "A" 到ViewController "B".

我应该仅以编程方式制作 ImagePickerView 还是可以使用 Storyboard?

提前致谢!

UIImagePickerController 无法添加到情节提要中,因此您必须以编程方式添加。首先,使用您的 UIButton 创建一个 IBAction:

- (IBAction)openImagePicker:(id)sender;

您的 class 需要采用 UIImagePickerControllerDelegateUINavigationControllerDelegate 协议:

@interface MyViewController () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

然后在 openImagePicker: 方法中显示图像选择器:

// Check if image source is available
// In this case, photo library is always available. If you use
// UIImagePickerControllerSourceTypeCamera instead, simulator doesn't have it
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; // Create an image picker
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; // Choose source type
    picker.delegate = self; // Delegate when image is picked
    picker.allowsEditing = YES; // Allow user to edit image before choose it
    [self presentViewController:picker animated:YES completion:nil]; // Show image picker
}

要使用选取的图片,必须实现UIImagePickerControllerDelegate的这个方法:

/**
 * @param picker The image picker
 * @param info Dictionary contains picked images and metadata...
 */
- (void)imagePickerController:(nonnull UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(nonnull NSDictionary *)info {
    // Because we allow user to edit image,
    // so we choose UIImagePickerControllerEditedImage
    // You can see other keys in UIImagePickerController class header
    UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage];

    // Dismiss the picker
    dispatch_async(dispatch_get_main_queue(), ^{
        [self dismissViewControllerAnimated:YES completion:nil];
    });

    // Use the image here
}

回答我自己,这就是我在 swift 中所做的并且它有效(帮助其他人)

var currentImage: UIImage!

@IBAction func ImagePicker(sender: UIButton)
{
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary)
    {
        let picker = UIImagePickerController()
        picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        picker.delegate = self
        picker.allowsEditing = true
        self.presentViewController(picker, animated: true, completion: nil)
    }

}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    var newImage: UIImage

    if let possibleImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
        newImage = possibleImage
    } else if let possibleImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
        newImage = possibleImage
    } else {
        return
    }

    dismissViewControllerAnimated(true, completion: nil)

    currentImage = newImage
}