在程序中使用照相机,或者从相册中选择需要的照片,可以按照以下的步骤实现。
1.生成一个UIImagePickerController对象
2.用presentModalViewController来显示它
3.实现UIImagePickerControllerDelegate的方法
举个例子,此例子的功能如下:
点击一个照相按钮,弹出一个ActionSheet让用户选择是从相册选择照片还是用相机新照一张照片。
代码如下:
1.点击照相按钮后弹出ActionSheet
//Show Action Sheet: 1. Take Photo 2. Select Photo From Album
UIActionSheet *photoBtnActionSheet =
[[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Photo Library",@"Take Photo", nil];
[photoBtnActionSheet setActionSheetStyle:UIActionSheetStyleBlackOpaque];
[photoBtnActionSheet showInView:[self.view window]];
}
2. 在header里添加以下三个Delegate
UIImagePickerControllerDelegate
UINavigationControllerDelegate
3.UIActionSheetDelegate的实现
NSLog(@"Action Sheet Button Index: %d",buttonIndex);
if (buttonIndex == 0) {
//Show Photo Library
@try {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
UIImagePickerController *imgPickerVC = [[UIImagePickerController alloc] init];
[imgPickerVC setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[imgPickerVC.navigationBar setBarStyle:UIBarStyleBlack];
[imgPickerVC setDelegate:self];
[imgPickerVC setAllowsEditing:NO];
//显示Image Picker
[self presentModalViewController:imgPickerVC animated:NO];
}else {
NSLog(@"Album is not available.");
}
}
@catch (NSException *exception) {
//Error
NSLog(@"Album is not available.");
}
}
if (buttonIndex == 1) {
//Take Photo with Camera
@try {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIImagePickerController *cameraVC = [[UIImagePickerController alloc] init];
[cameraVC setSourceType:UIImagePickerControllerSourceTypeCamera];
[cameraVC.navigationBar setBarStyle:UIBarStyleBlack];
[cameraVC setDelegate:self];
[cameraVC setAllowsEditing:NO];
//显示Camera VC
[self presentModalViewController:cameraVC animated:NO];
}else {
NSLog(@"Camera is not available.");
}
}
@catch (NSException *exception) {
NSLog(@"Camera is not available.");
}
}
}
4.UIImagePickerControllerDelegate的实现
NSLog(@"Image Picker Controller canceled.");
//Cancel以后将ImagePicker删除
[self dismissModalViewControllerAnimated:NO];
}
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSLog(@"Image Picker Controller did finish picking media.");
//TODO:选择照片或者照相完成以后的处理
[self dismissModalViewControllerAnimated:NO];
}