如何让用户从他的相机胶卷或照片库中select一张照片?

我正在制作一个小照片编辑应用程序的乐趣。 用户必须从相机胶卷中select一张照片,然后将其导入进行修改。

这通常如何工作? 我看到许多应用程序允许这与标准控制器,看起来总是相同的。

是否也可以直接访问该库或定制该控制器的外观?

我应该从哪里开始寻找?

我在一个允许用户select个人图像的应用程序上工作。 我有两个UIButtons,可以帮助用户select一张照片,无论是从相机或图书馆。 这是这样的:

- (void)camera { if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ return; } UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease]; picker.sourceType = UIImagePickerControllerSourceTypeCamera; //Permetto la modifica delle foto picker.allowsEditing = YES; //Imposto il delegato [picker setDelegate:self]; [self presentModalViewController:picker animated:YES]; } - (void)library { //Inizializzo la classe per la gestione della libreria immagine UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease]; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; //Permetto la modifica delle foto picker.allowsEditing = YES; //Imposto il delegato [picker setDelegate:self]; [self presentModalViewController:picker animated:YES]; } 

你必须实现UIImagePickerControllerDelegate:

 @interface PickPictureViewController : UIViewController <UIImagePickerControllerDelegate> @implementation PickPictureViewController #pragma mark UIImagePickerController Delegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ UIImage *pickedImage = [info objectForKey:UIImagePickerControllerEditedImage]; if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { UIImageWriteToSavedPhotosAlbum(pickedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); } [self dismissModalViewControllerAnimated:YES]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ [self dismissModalViewControllerAnimated:YES]; } - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{} 

希望能帮助到你! ;)

最简单的方法是在简单的alertView中使用UIImagePickerController。

例如,您希望有人点击自己的个人资料照片,并能够从相机或照片库中设置新的图像。

在这里输入图像说明

 @IBAction func btnProfilePicTap(sender: AnyObject) { let picker = UIImagePickerController() picker.delegate = self let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) alert.addAction(UIAlertAction(title: "Camera", style: .Default, handler: { action in picker.sourceType = .Camera self.presentViewController(picker, animated: true, completion: nil) })) alert.addAction(UIAlertAction(title: "Photo Library", style: .Default, handler: { action in picker.sourceType = .PhotoLibrary self.presentViewController(picker, animated: true, completion: nil) })) alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } 

然后只需添加委托,就完成了。

 extension ProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { //use image here! dismissViewControllerAnimated(true, completion: nil) } func imagePickerControllerDidCancel(picker: UIImagePickerController) { dismissViewControllerAnimated(true, completion: nil) } } 

对不起,这个例子很快,但我希望它仍然有帮助。

这个答案只适用于物理设备!

访问摄像机:

 - (void)takePhoto { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController:picker animated:YES completion:NULL]; } 

访问相机胶卷:

 - (void)selectPhoto { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:picker animated:YES completion:NULL]; } 

实现UIImagePickerController的委托方法:

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; self.imageView.image = chosenImage; [picker dismissViewControllerAnimated:YES completion:NULL]; } 

和这个:

 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [picker dismissViewControllerAnimated:YES completion:NULL]; } 

同时检查有关此链接的更多信息

SWIFT 2.0

感谢William T.在我的UITapGestureRecognizer上工作

 func selectPhoto(tap: UITapGestureRecognizer) { let picker = UIImagePickerController() picker.delegate = self let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) alert.addAction(UIAlertAction(title: "Camera", style: .Default, handler: { action in picker.sourceType = .Camera picker.allowsEditing = true self.presentViewController(picker, animated: true, completion: nil) })) alert.addAction(UIAlertAction(title: "Photo Library", style: .Default, handler: { action in picker.sourceType = .PhotoLibrary picker.allowsEditing = true self.presentViewController(picker, animated: true, completion: nil) })) alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } 

我添加了以下内容,让我在select.Camera和.PhotoLibrary之后编辑照片:

 picker.allowsEditing = true 

看看UIImagePickerController

这里是一个示例应用程序和一个包装,就像Facebook一样,为您提供拍照或从库中select。 https://github.com/fulldecent/FDTake