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

IOS学习笔记22—文件操作(NSFileManager)结合相册小例子

2012-12-25 14:13 633 查看
本文转自http://blog.csdn.net/tangren03/article/details/7830996

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

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

首先来看看最后效果:

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

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





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





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

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



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



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



下面是代码:

[cpp] view
plaincopy

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate>

@property (retain, nonatomic) IBOutlet UIImageView *imageView;

@property (retain, nonatomic) UIButton *saveToFileButton;

//打开相册

- (IBAction)openAlbum:(id)sender;

//从文件夹读取图片

- (IBAction)readImage:(id)sender;

@end

下面是ViewController.m文件

[cpp] view
plaincopy

#import "ViewController.h"

//保存到文件夹按钮的标签,选取图片前,这个按钮是隐藏的

#define SAVE_BUTTON_TAG 101

@interface ViewController ()

@end

@implementation ViewController

@synthesize imageView = _imageView;

@synthesize saveToFileButton = _saveToFileButton;

- (void)viewDidLoad

{

[super viewDidLoad];

//根据设置的tag获取按钮控件

self.saveToFileButton = (UIButton *)[self.view viewWithTag:SAVE_BUTTON_TAG];

//添加对象事件

[self.saveToFileButton addTarget:self action:@selector(saveToFileBtnTapped:) forControlEvents:UIControlEventTouchUpInside];

//设置为不可见

self.saveToFileButton.hidden = YES;

}

- (void)viewDidUnload

{

[self setImageView:nil];

[self setSaveToFileButton:nil];

[super viewDidUnload];

// Release any retained subviews of the main view.

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}

- (void)dealloc {

[self.imageView release];

[self.saveToFileButton release];

[super dealloc];

}

- (IBAction)openAlbum:(id)sender {

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"选择图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"相册", nil];

[actionSheet showInView:self.view];

[actionSheet release];

}

//从文件夹读取图片

- (IBAction)readImage:(id)sender {

NSString *imagePath = [self imageSavedPath:@"image.png"];

NSFileManager *fileManager = [NSFileManager defaultManager];

//判断文件是否存在

if (![fileManager fileExistsAtPath:imagePath]) {

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Note" message:@"文件不存在" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

[alertView show];

[alertView release];

}else {

//从指定目录读取图片

UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

self.imageView.image = image;

}

}

//保存到文件按钮事件

- (void)saveToFileBtnTapped:(id)sender {

NSString *imagePath = [self imageSavedPath:@"image.png"];

BOOL isSaveSuccess = [self saveToDocument:self.imageView.image withFilePath:imagePath];

if (isSaveSuccess) {

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操作结果" message:@"保存图片成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

[alertView show];

[alertView release];

}else {

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操作结果" message:@"保存图片失败" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

[alertView show];

[alertView release];

}

}

//将选取的图片保存到目录文件夹下

-(BOOL)saveToDocument:(UIImage *) image withFilePath:(NSString *) filePath

{

if ((image == nil) || (filePath == nil) || [filePath isEqualToString:@""]) {

return NO;

}

@try {

NSData *imageData = nil;

//获取文件扩展名

NSString *extention = [filePath pathExtension];

if ([extention isEqualToString:@"png"]) {

//返回PNG格式的图片数据

imageData = UIImagePNGRepresentation(image);

}else{

//返回JPG格式的图片数据,第二个参数为压缩质量:0:best 1:lost

imageData = UIImageJPEGRepresentation(image, 0);

}

if (imageData == nil || [imageData length] <= 0) {

return NO;

}

//将图片写入指定路径

[imageData writeToFile:filePath atomically:YES];

return YES;

}

@catch (NSException *exception) {

NSLog(@"保存图片失败");

}

return NO;

}

//根据图片名将图片保存到ImageFile文件夹中

-(NSString *)imageSavedPath:(NSString *) imageName

{

//获取Documents文件夹目录

NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentPath = [path objectAtIndex:0];

//获取文件管理器

NSFileManager *fileManager = [NSFileManager defaultManager];

//指定新建文件夹路径

NSString *imageDocPath = [documentPath stringByAppendingPathComponent:@"ImageFile"];

//创建ImageFile文件夹

[fileManager createDirectoryAtPath:imageDocPath withIntermediateDirectories:YES attributes:nil error:nil];

//返回保存图片的路径(图片保存在ImageFile文件夹下)

NSString * imagePath = [imageDocPath stringByAppendingPathComponent:imageName];

return imagePath;

}

#pragma Delegate method UIImagePickerControllerDelegate

//图像选取器的委托方法,选完图片后回调该方法

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo

{

if (image != nil) {

//选定照片后在界面显示照片并把保存按钮设为可见

self.imageView.image = image;

self.saveToFileButton.hidden = NO;

}

//关闭图像选择器

[self dismissModalViewControllerAnimated:YES];

}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

{

//获取图片选取器

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

//指定代理

imagePicker.delegate = self;

//打开图片后允许编辑

imagePicker.allowsEditing = YES;

//判断图片源的类型

if (buttonIndex == 0) {

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

//相机

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

}

}else if (buttonIndex == 1) {

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){

//图片库

imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

}

// if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {

// //相册

// imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

// }

}else if (buttonIndex == [actionSheet cancelButtonIndex]) {

return;

}

//打开图片选择模态视图

[self presentModalViewController:imagePicker animated:YES];

[imagePicker release];

}

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