在 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 需要采用 UIImagePickerControllerDelegate
和 UINavigationControllerDelegate
协议:
@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
}
我想制作一个带有指向 ImagePickerView 的 UIButton 的图像选择器,但我不知道如何进行。
我们会说我想将 ViewController "A"(带有 UIButton)连接到 ViewController "B"(UIImagePicker)。
这是我尝试过的:我有一个包含多个 ViewController 的故事板,我不知道为什么我不能从 ViewController "A" 到ViewController "B".
我应该仅以编程方式制作 ImagePickerView 还是可以使用 Storyboard?
提前致谢!
UIImagePickerController
无法添加到情节提要中,因此您必须以编程方式添加。首先,使用您的 UIButton 创建一个 IBAction:
- (IBAction)openImagePicker:(id)sender;
您的 class 需要采用 UIImagePickerControllerDelegate
和 UINavigationControllerDelegate
协议:
@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
}