如下图所示 在本地相册中选择一张图片后,我们将他拷贝至沙盒当中,在客户端中将它的缩略图放在按钮旁边,这个结构其实和新浪微薄中选择图片后的效果一样。最终点击发送将按钮将图片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