如下图所示 在本地相册中选择一张图片后,我们将他拷贝至沙盒当中,在客户端中将它的缩略图放在按钮旁边,这个结构其实和新浪微薄中选择图片后的效果一样。最终点击发送将按钮将图片2进制图片上传服务器。
 

 
下面我们仔细学习具体的细节。创建一个空的IOS项目,接着在创建一个ViewController。
AppDelegate.h 应用的代理类 这个没什么好说的就是直接打开刚刚创建的新ViewController。
| 1 | #import <UIKit/UIKit.h> | 
 
| 2 | #import "TestViewController.h" | 
 
| 4 | @interface AppDelegate : UIResponder <UIApplicationDelegate> | 
 
| 6 | @property (strong, nonatomic) UIWindow *window; | 
 
| 7 | @property (strong, nonatomic) UINavigationController *navController; | 
 
| 8 | @property (strong, nonatomic) UIViewController *viewController; | 
 
 
 
 
AppDelegate.m 在这里就是打开我们创建的TestViewController
| 01 | #import "AppDelegate.h" | 
 
| 03 | @implementation AppDelegate | 
 
| 05 | @synthesize window = _window; | 
 
| 06 | @synthesize navController; | 
 
| 07 | @synthesize viewController; | 
 
| 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | 
 
| 17 |     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; | 
 
| 19 |     self.window.backgroundColor = [UIColor whiteColor]; | 
 
| 20 |     self.viewController =  [[TestViewController alloc]init]; | 
 
| 21 |     self.navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; | 
 
| 22 |     [self.window addSubview:navController.view]; | 
 
| 24 |     [self.window makeKeyAndVisible]; | 
 
 
 
 
TestViewController.h 注意这里面引入了很多代理类。
| 01 | #import <UIKit/UIKit.h> | 
 
| 03 | @interface TestViewController : UIViewController<UITextViewDelegate,UIActionSheetDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate> | 
 
| 06 |     UITextView *_textEditor; | 
 
| 09 |     UIActionSheet *myActionSheet; | 
 
 
 
 
TestViewController.m 请大家仔细看这个类, 所有的东西都写在了这里哈。
| 001 | #import "TestViewController.h" | 
 
| 003 | @interface TestViewController () | 
 
| 007 | @implementation TestViewController | 
 
| 013 |     self.navigationItem.title = @"雨松MOMO输入框"; | 
 
| 016 |     self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] | 
 
| 018 |                                                style: UIBarButtonItemStyleDone | 
 
| 020 |                                                action: @selector(sendInfo)] autorelease]; | 
 
| 023 |     _textEditor = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; | 
 
| 025 |     _textEditor.delegate = self; | 
 
| 026 |     _textEditor.autoresizingMask = UIViewAutoresizingFlexibleWidth; | 
 
| 027 |     _textEditor.keyboardType = UIKeyboardTypeDefault; | 
 
| 028 |     _textEditor.font = [UIFont systemFontOfSize:20]; | 
 
| 029 |     _textEditor.text = @"请输入内容"; | 
 
| 033 |     [_textEditor becomeFirstResponder]; | 
 
| 036 |     [self.view addSubview:_textEditor]; | 
 
| 039 |     UIImage *image = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"camera"ofType:@"png"]]; | 
 
| 041 |     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; | 
 
| 042 |     button.frame = CGRectMake(0, 120, image.size.width, image.size.height); | 
 
| 044 |     [button setImage:image forState:UIControlStateNormal]; | 
 
| 046 |     [button addTarget:self action:@selector(openMenu) forControlEvents:UIControlEventTouchUpInside]; | 
 
| 049 |     [self.view addSubview:button]; | 
 
| 056 |     myActionSheet = [[UIActionSheet alloc] | 
 
| 059 |                  cancelButtonTitle:@"取消" | 
 
| 060 |                  destructiveButtonTitle:nil | 
 
| 061 |                  otherButtonTitles: @"打开照相机", @"从手机相册获取",nil];  | 
 
| 063 |     [myActionSheet showInView:self.view]; | 
 
| 064 |     [myActionSheet release];    | 
 
| 068 | - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex | 
 
| 072 |     if(buttonIndex == myActionSheet.cancelButtonIndex) | 
 
| 092 |     UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera; | 
 
| 093 |     if([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) | 
 
| 095 |         UIImagePickerController *picker = [[UIImagePickerController alloc] init]; | 
 
| 096 |         picker.delegate = self; | 
 
| 098 |         picker.allowsEditing = YES; | 
 
| 099 |         picker.sourceType = sourceType; | 
 
| 101 |         [self presentModalViewController:picker animated:YES]; | 
 
| 104 |         NSLog(@"模拟其中无法打开照相机,请在真机中使用"); | 
 
| 111 |     UIImagePickerController *picker = [[UIImagePickerController alloc] init]; | 
 
| 113 |     picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; | 
 
| 114 |     picker.delegate = self; | 
 
| 116 |     picker.allowsEditing = YES; | 
 
| 117 |     [self presentModalViewController:picker animated:YES]; | 
 
| 122 | -(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info | 
 
| 126 |     NSString *type = [info objectForKey:UIImagePickerControllerMediaType]; | 
 
| 129 |     if([type isEqualToString:@"public.image"]) | 
 
| 132 |         UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; | 
 
| 134 |         if(UIImagePNGRepresentation(image) == nil) | 
 
| 136 |             data = UIImageJPEGRepresentation(image, 1.0); | 
 
| 140 |             data = UIImagePNGRepresentation(image); | 
 
| 145 |         NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];  | 
 
| 148 |         NSFileManager *fileManager = [NSFileManager defaultManager]; | 
 
| 151 |         [fileManager createDirectoryAtPath:DocumentsPath withIntermediateDirectories:YES attributes:nil error:nil]; | 
 
| 152 |         [fileManager createFileAtPath:[DocumentsPath stringByAppendingString:@"/image.png"] contents:data attributes:nil]; | 
 
| 155 |         filePath = [[NSString alloc]initWithFormat:@"%@%@",DocumentsPath,  @"/image.png"]; | 
 
| 158 |         [picker dismissModalViewControllerAnimated:YES]; | 
 
| 162 |         UIImageView *smallimage = [[[UIImageView alloc] initWithFrame: | 
 
| 163 |                                    CGRectMake(50, 120, 40, 40)] autorelease];    | 
 
| 165 |         smallimage.image = image; | 
 
| 167 |         [self.view addSubview:smallimage]; | 
 
| 173 | - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker | 
 
| 176 |     [picker dismissModalViewControllerAnimated:YES]; | 
 
| 181 |     NSLog(@"图片的路径是:%@", filePath); | 
 
| 183 |     NSLog(@"您输入框中的内容是:%@", _textEditor.text); | 
 
| 186 | - (void)viewDidUnload | 
 
| 188 |     [super viewDidUnload]; | 
 
| 192 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation | 
 
| 194 |     return(interfaceOrientation == UIInterfaceOrientationPortrait); | 
 
 
 
 
如下图所示,打开下拉菜单按钮开始选择打开相机 或者 打开本地相册。模拟器中是无法打开照相机的的,切记。

 
如下图所示,这里就是我本地的相册啦,里面保存了几张图片,选择一张即可。
 

 
 
我在这里再说说图片上传, 图片上传我们采用的是2进制ASIHTTPRequest 来完成的。
发送请求
 
| 01 | NSString *server_base = [NSString stringWithFormat:@"%@/users/uploadResource.json", _server]; | 
 
| 03 | ASINetworkQueue *queue = [[ASINetworkQueue alloc] init];  | 
 
| 05 | ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:server_base]]; | 
 
| 07 | [ASIHTTPRequest setShouldUpdateNetworkActivityIndicator: NO]; | 
 
| 08 | [request setDelegate :self]; | 
 
| 09 | [request setDidFinishSelector:@selector(sendCommentSucc:)]; | 
 
| 10 | [request setDidFailSelector:@selector(sendCommentFail:)]; | 
 
| 12 | [request setFile:res forKey:@"res"]; | 
 
| 14 | [queue addOperation:request]; | 
 
 
 
 
最后是文本的源码下载地址:http://vdisk.weibo.com/s/accm9
原文:http://blog.csdn.net/l_ch_g/article/details/11738129
相关:
 
http://www.cnblogs.com/skyblue/archive/2013/05/08/3067108.html