如何让用户从他的相机胶卷或照片库中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