.h文件中添加代理
实现相机,相册的代理方法
UIImagePickerControllerDelegate,UINavigationControllerDelegate,
判断是什么样的设备
-(void)RightBtnAction:(UIBarButtonItem *)sender
{
UIActionSheet *sheet;
//判断是否可以打开相机,模拟器,ipad的此功能无法使用
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照",@"从相册选取", nil];
}
else
{
sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选取", nil];
}
sheet.tag = 255;
[sheet showInView:self.view];
}
根据设备选择是相机类型还是相册类型
#pragma mark --ActionSheet--
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (actionSheet.tag == 255)
{
NSUInteger sourceType = 0;
//判断是否支持相机
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
switch (buttonIndex) {
case 0:
{
//取消
break;
}
case 1:
{
//相机
sourceType = UIImagePickerControllerSourceTypeCamera;
break;
}
case 2:
{
//相册
sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
break;
}
default:
break;
}
}
else
{
if (buttonIndex == 0)
{
return;
}
else
{
sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
}
}
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.allowsEditing = YES;
imagePickerController.sourceType = sourceType;
[self presentViewController:imagePickerController animated:YES completion:^{
}];
}
}
实现相机,相册的代理方法
#pragma mark---相机照相代理方法--
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
#pragma mark--照相照得相片保存到UIImagePickerController--
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
if (error != NULL) {
UIAlertView *photoSave = [[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"%@",error] delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[photoSave show];
[photoSave dismissWithClickedButtonIndex:0 animated:YES];
// [photoSave release];
photoSave = nil;
}else {
UIAlertView *photoSave = [[UIAlertView alloc] initWithTitle:@"\n\n保存成功" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[photoSave show];
[photoSave dismissWithClickedButtonIndex:0 animated:YES];
// [photoSave release];
photoSave = nil;
[self dismissViewControllerAnimated:YES completion:nil];
}
}
//相机的代理方法
#pragma mark --image picker delegate
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker dismissViewControllerAnimated:YES completion:^{
}];
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
/* 此处info 有六个值
* UIImagePickerControllerMediaType; // an NSString UTTypeImage)
* UIImagePickerControllerOriginalImage; // a UIImage 原始图片
* UIImagePickerControllerEditedImage; // a UIImage 裁剪后图片
* UIImagePickerControllerCropRect; // an NSValue (CGRect)
* UIImagePickerControllerMediaURL; // an NSURL
* UIImagePickerControllerReferenceURL // an NSURL that references an asset in the AssetsLibrary framework
* UIImagePickerControllerMediaMetadata // an NSDictionary containing metadata from a captured photo
*/
// 保存图片至本地,方法见下文
[self saveImage:image withName:@"currentImage.png"];
NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
isFullScreen = NO;
switch (count) {
case 0:
[[dataSource objectAtIndex:0] setImage:savedImage];
break;
case 1:
[[dataSource objectAtIndex:1] setImage:savedImage];
break;
default:
[[dataSource objectAtIndex:0] setImage:savedImage];
break;
}
// [self.imageView setImage:savedImage];
[collectionview reloadData];
self.imageView.tag = 100;
count++;
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissViewControllerAnimated:YES completion:^{
}];
}
#pragma mark --保存图片至沙盒
-(void)saveImage:(UIImage *)currentImage withName:(NSString *)imageName
{
//此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。
NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
//获取沙盒目录
NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
//将图片写入文件
[imageData writeToFile:fullPath atomically:NO];
}