您的位置:首页 > 移动开发 > IOS开发

iOS 调用系统相机和相册

2016-03-22 15:20 561 查看
一,创建button,触发点击事件,调用系统相机/相册选取头像

- (IBAction)chooseUserPicAction:(id)sender {

UIActionSheet *sheet;

// 判断是否支持相机

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];
}


二,遵循协议

<UIActionSheetDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>


三,实现actionSheet delegate事件

-(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (actionSheet.tag == 255) {

NSUInteger sourceType = 0;

// 判断是否支持相机
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

switch (buttonIndex) {
case 0:
// 取消
return;
case 1:
// 相机
sourceType = UIImagePickerControllerSourceTypeCamera;

break;

case 2:
// 相册
sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
break;
}
}
else {
if (buttonIndex == 0) {

return;
} else {
sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
}
}

// 跳转到相机或相册页面
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

imagePickerController.delegate = self;

imagePickerController.allowsEditing = YES;

imagePickerController.sourceType = sourceType;

//        //iphone使用此方法进行跳转
//        [self presentViewController:imagePickerController animated:YES completion:^{}];

//ipad需要使用此方法进行跳转
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// Place image picker on the screen
[self presentViewController:imagePickerController animated:YES completion:nil];
}];

}
}


四,image picker delegte

- (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;
[self.userPicImageView setImage:savedImage];

self.userPicImageView.tag = 100;

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


五,保存图片至沙盒

- (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];
}


六,实现点击图片预览功能,滑动放大缩小,带动画

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

isFullScreen = !isFullScreen;
UITouch *touch = [touches anyObject];

CGPoint touchPoint = [touch locationInView:self.view];

CGPoint imagePoint = self.imageView.frame.origin;
//touchPoint.x ,touchPoint.y 就是触点的坐标

// 触点在imageView内,点击imageView时 放大,再次点击时缩小
if(imagePoint.x <= touchPoint.x && imagePoint.x +self.imageView.frame.size.width >=touchPoint.x && imagePoint.y <=  touchPoint.y && imagePoint.y+self.imageView.frame.size.height >= touchPoint.y)
{
// 设置图片放大动画
[UIView beginAnimations:nil context:nil];
// 动画时间
[UIView setAnimationDuration:1];

if (isFullScreen) {
// 放大尺寸

self.imageView.frame = CGRectMake(0, 0, 320, 480);
}
else {
// 缩小尺寸
self.imageView.frame = CGRectMake(50, 65, 90, 115);
}

// commit动画
[UIView commitAnimations];

}

}


七,上传图片,使用ASIhttpRequest类库实现,由于本文重点不是网络请求,故不对ASIHttpRequest详细讲述,只贴出部分代码

ASIFormDataRequest *requestReport  = [[ASIFormDataRequest alloc] initWithURL:服务器地址];

NSString *Path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];

[requestReport setFile:Path forKey:@"picturepath"];

[requestReport buildPostBody];

requestReport.delegate = self;

[requestReport startAsynchronous];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: