iOS UIPickerController 调用相机,选择图片上传,带预览功能
在.h中加入delegate
@interface ViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
//实现按钮事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | -( IBAction )chooseImage:( id )sender { UIActionSheet *sheet; <p> // 判断是否支持相机 </p> 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]; } |
实现actionSheet delegate 事件
判断是否支持相机,跳转到相机或相册界面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | -( 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; } } <p> // 跳转到相机或相册页面 </p> UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.delegate = self ; imagePickerController.allowsEditing = YES ; imagePickerController.sourceType = sourceType; [ self presentViewController:imagePickerController animated: YES completion:^{}]; [imagePickerController release]; } } |
实现ImagePicker] delegate 事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | - ( 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 .imageView setImage:savedImage]; self .imageView.tag = 100; } - ( void )imagePickerControllerDidCancel:(UIImagePickerController *)picker { [ self dismissViewControllerAnimated: YES completion:^{}]; } |
保存图片方法
1 2 3 4 5 6 7 8 9 10 11 12 13 | #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 ]; } |
实现点击图片预览功能,滑动放大缩小,带动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | -( 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]; } } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步