在按钮的响应事件里添加:
// 1)初始化UIImagePicker
UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc]init];
// 2)设置UIImagePicker的数据源,数据源可以是
// a.照片库 - UIImagePickerControllerSourceTypePhotoLibrary
// b. 保存的图像 - UIImagePickerControllerSourceTypeSavedPhotosAlbum
// c. 照相机 - UIImagePickerControllerSourceTypeCamera
[imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
// 3)设置是否允许编辑照片
[imagePicker setAllowsEditing:YES];
// 4)设置代理,代理需要实现两个protocols,
// <UINavigationControllerDelegate, UIImagePickerControllerDelegate>
[imagePicker setDelegate:self];
// 5)当前视图控制器展示imagepicker视图
[selfpresentViewController:imagePicker animated:YEScompletion:nil];
实现代理方法
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// info中包含有选择的图片的多种信息,其中也包含有所选的图片,查看UIImagePickerController关于更多info中key的更多具体信息
UIImage *image = info[@"UIImagePickerControllerEditedImage"];
[self.buttonsetImage:image forState:UIControlStateNormal];
[selfdismissViewControllerAnimated:YEScompletion:^{
// 通过image picker选择的照片只是保存在内存中,如果要持久保存,需要把所选照片存储起来,然后在viewDidLoad中读取并做响应设置。
NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [documents[0] stringByAppendingPathComponent:IMAGE_FILE_NAME];
NSLog(@"%@", path);
// UIImage无法直接存储,需要通过NSData做中转,可以通过以下方法把UIImage转化成NSData。
NSData *imageData = UIImagePNGRepresentation(image);
// 将image的NSData写入到硬盘里
[imageData writeToFile:path atomically:NO];
}];
}
最后在ViewDidLoad中读取照片并做相关处理