iOS文件操作(NSFileManager)结合相册小例子

来源:互联网 发布:免费发广告软件 编辑:程序博客网 时间:2024/05/18 03:30

这个示例程序主要用到了IOS中的UIImageView、UIImagePickerViewController、UIImage、NSFileManager等知识,结合这些知识构成一个小的应用程序,主要功能是对相册图片进行读取、存储到指定文件夹、从指定文件夹读取出来。这方面的知识在正式项目中用的是比较多的。做Android开发中,经常会使用到将图片保存到SD卡和从SD卡读取图片的操作,相比于Android在这方面的操作,IOS要方便许多。


基本功能是从相册选取一张图片,选完后显示在界面的UIImageView控件中,点击保存到文件夹按钮后就将图片保存到Documents下的ImageFile文件夹中,以image.png命名。退出程序下次进来时,可以选择从文件夹读取图片,如果有则读取出来显示在UIImageView上,如果没有则提示文件不存在。

首先来看看最后效果:

·从相册选取图片后显示在界面上

这里对功能进行了一点改进,点击打开相册按钮后出来一个UIActionSheet操作选项框,可以选择是从相机获取图片还是从相册获取。代码也做出了一点修改。

                          

·点击保存到文件夹按钮后提示信息

                           

·点击读取图片按钮后的提示信息(图片不存在)

·如果存在则将图片显示出来

            

保存图片成功后,按照前一篇文章提到的方法,可以到Finder下查看文件信息:



下面是实现部分,首先看看布局文件:


下面是代码:

[cpp] view plaincopy
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate>  
  4.   
  5. @property (retain, nonatomic) IBOutlet UIImageView *imageView;  
  6. @property (retain, nonatomic) UIButton *saveToFileButton;  
  7.   
  8. //打开相册  
  9. - (IBAction)openAlbum:(id)sender;  
  10.   
  11. //从文件夹读取图片  
  12. - (IBAction)readImage:(id)sender;  
  13.   
  14. @end  


下面是ViewController.m文件

[cpp] view plaincopy
  1. #import "ViewController.h"  
  2. //保存到文件夹按钮的标签,选取图片前,这个按钮是隐藏的  
  3. #define SAVE_BUTTON_TAG 101  
  4.   
  5. @interface ViewController ()  
  6.   
  7. @end  
  8.   
  9. @implementation ViewController  
  10. @synthesize imageView = _imageView;  
  11. @synthesize saveToFileButton = _saveToFileButton;  
  12.   
  13. - (void)viewDidLoad  
  14. {  
  15.     [super viewDidLoad];  
  16.     //根据设置的tag获取按钮控件  
  17.     self.saveToFileButton = (UIButton *)[self.view viewWithTag:SAVE_BUTTON_TAG];  
  18.     //添加对象事件  
  19.     [self.saveToFileButton addTarget:self action:@selector(saveToFileBtnTapped:) forControlEvents:UIControlEventTouchUpInside];  
  20.     //设置为不可见  
  21.     self.saveToFileButton.hidden = YES;  
  22. }  
  23.   
  24. - (void)viewDidUnload  
  25. {  
  26.     [self setImageView:nil];  
  27.     [self setSaveToFileButton:nil];  
  28.     [super viewDidUnload];  
  29.     // Release any retained subviews of the main view.  
  30. }  
  31.   
  32. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  33. {  
  34.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
  35. }  
  36.   
  37. - (void)dealloc {  
  38.     [self.imageView release];  
  39.     [self.saveToFileButton release];  
  40.     [super dealloc];  
  41. }  
  42.   
  43. - (IBAction)openAlbum:(id)sender {  
  44.     UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"选择图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"相册", nil];  
  45.     [actionSheet showInView:self.view];  
  46.     [actionSheet release];  
  47. }  
  48.   
  49. //从文件夹读取图片  
  50. - (IBAction)readImage:(id)sender {  
  51.     NSString *imagePath = [self imageSavedPath:@"image.png"];  
  52.     NSFileManager *fileManager = [NSFileManager defaultManager];  
  53.     //判断文件是否存在  
  54.     if (![fileManager fileExistsAtPath:imagePath]) {  
  55.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Note" message:@"文件不存在" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
  56.         [alertView show];  
  57.         [alertView release];  
  58.     }else {  
  59.         //从指定目录读取图片  
  60.         UIImage *image = [UIImage imageWithContentsOfFile:imagePath];  
  61.         self.imageView.image = image;  
  62.     }  
  63. }  
  64.   
  65. //保存到文件按钮事件  
  66. - (void)saveToFileBtnTapped:(id)sender {  
  67.     NSString *imagePath = [self imageSavedPath:@"image.png"];  
  68.     BOOL isSaveSuccess = [self saveToDocument:self.imageView.image withFilePath:imagePath];  
  69.       
  70.     if (isSaveSuccess) {  
  71.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操作结果" message:@"保存图片成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
  72.         [alertView show];  
  73.         [alertView release];  
  74.     }else {  
  75.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操作结果" message:@"保存图片失败" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
  76.         [alertView show];  
  77.         [alertView release];  
  78.     }  
  79. }  
  80.   
  81. //将选取的图片保存到目录文件夹下  
  82. -(BOOL)saveToDocument:(UIImage *) image withFilePath:(NSString *) filePath  
  83. {  
  84.     if ((image == nil) || (filePath == nil) || [filePath isEqualToString:@""]) {  
  85.         return NO;  
  86.     }  
  87.       
  88.     @try {  
  89.         NSData *imageData = nil;  
  90.         //获取文件扩展名  
  91.         NSString *extention = [filePath pathExtension];  
  92.         if ([extention isEqualToString:@"png"]) {  
  93.             //返回PNG格式的图片数据  
  94.             imageData = UIImagePNGRepresentation(image);  
  95.         }else{  
  96.             //返回JPG格式的图片数据,第二个参数为压缩质量:0:best 1:lost  
  97.             imageData = UIImageJPEGRepresentation(image, 0);  
  98.         }  
  99.         if (imageData == nil || [imageData length] <= 0) {  
  100.             return NO;  
  101.         }  
  102.         //将图片写入指定路径  
  103.         [imageData writeToFile:filePath atomically:YES];  
  104.         return  YES;  
  105.     }  
  106.     @catch (NSException *exception) {  
  107.         NSLog(@"保存图片失败");  
  108.     }  
  109.       
  110.     return NO;  
  111.       
  112. }  
  113.   
  114. //根据图片名将图片保存到ImageFile文件夹中  
  115. -(NSString *)imageSavedPath:(NSString *) imageName  
  116. {  
  117.     //获取Documents文件夹目录  
  118.     NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  119.     NSString *documentPath = [path objectAtIndex:0];  
  120.     //获取文件管理器  
  121.     NSFileManager *fileManager = [NSFileManager defaultManager];  
  122.     //指定新建文件夹路径  
  123.     NSString *imageDocPath = [documentPath stringByAppendingPathComponent:@"ImageFile"];  
  124.     //创建ImageFile文件夹  
  125.     [fileManager createDirectoryAtPath:imageDocPath withIntermediateDirectories:YES attributes:nil error:nil];  
  126.     //返回保存图片的路径(图片保存在ImageFile文件夹下)  
  127.     NSString * imagePath = [imageDocPath stringByAppendingPathComponent:imageName];  
  128.     return imagePath;  
  129. }  
  130.   
  131. #pragma Delegate method UIImagePickerControllerDelegate  
  132. //图像选取器的委托方法,选完图片后回调该方法  
  133. -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo  
  134. {  
  135.     if (image != nil) {  
  136.         //选定照片后在界面显示照片并把保存按钮设为可见  
  137.         self.imageView.image = image;  
  138.         self.saveToFileButton.hidden = NO;  
  139.     }  
  140.     //关闭图像选择器  
  141.     [self dismissModalViewControllerAnimated:YES];  
  142. }  
  143.   
  144. -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex  
  145. {  
  146.     //获取图片选取器  
  147.     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];  
  148.     //指定代理  
  149.     imagePicker.delegate = self;  
  150.     //打开图片后允许编辑  
  151.     imagePicker.allowsEditing = YES;  
  152.       
  153.     //判断图片源的类型  
  154.     if (buttonIndex == 0) {  
  155.         if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {  
  156.             //相机  
  157.             imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;  
  158.         }  
  159.     }else if (buttonIndex == 1) {  
  160.         if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){  
  161.             //图片库  
  162.             imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
  163.         }  
  164. //        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {  
  165. //            //相册  
  166. //            imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;  
  167. //        }  
  168.     }else if (buttonIndex == [actionSheet cancelButtonIndex]) {  
  169.         return;  
  170.     }  
  171.       
  172.     //打开图片选择模态视图  
  173.     [self presentModalViewController:imagePicker animated:YES];  
  174.     [imagePicker release];  
  175.   
  176. }  
  177.   
  178. @end  


中间有些操作过程我就没有一一例举了,比如如何将控件与代码关联,如何设置控件的TAG等。需要代码的朋友可以给我留言,我发你们邮箱!

加入我们的QQ群或微信公众账号请查看:Ryan's zone公众账号及QQ群


欢迎关注我的新浪微博和我交流:@唐韧_Ryan

0 0
原创粉丝点击