[iOS微博项目 - 3.1] - 发微博界面

 
A.发微博界面:自定义UITextView
1.需求
  • 用UITextView做一个编写微博的输入框
  • 没有输入任何文本的时候显示占位文本
  • 统一占位文本和正文的字体
 
2.思路
  • 系统自带的输入控件有UITextField和UITextView两种
  • UITextField:自带占位文本属性,不能换行
  • UITextView:没有占位文本属性,能换行
  • 这里我们选择UITextView进行改造
  • 根据是否输入文本决定是否显示占位文本(placeholder),可能使用代理或通知机制来监听文本输入,这里我们使用通知。因为设置代理只有一个,设为view本身不合理,这样就不能设置控制器代理了。
  • 在UITextView中加入一个UILabel,专门用来显示placeholder
 
3.实现
自定义一个集成UITextView的控件
带有一个placeHolder属性
实现相关方法
  1 //
  2 //  HVWComposeTextView.h
  3 //  HVWWeibo
  4 //
  5 //  Created by hellovoidworld on 15/2/6.
  6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
  7 //
  8 
  9 #import <UIKit/UIKit.h>
 10 
 11 @interface HVWComposeTextView : UITextView
 12 
 13 /** placeholder 占位文本 */
 14 @property(nonatomic, copy) NSString *placeHolder;
 15 
 16 @end
 17  
 18 //
 19 //  HVWComposeTextView.m
 20 //  HVWWeibo
 21 //
 22 //  Created by hellovoidworld on 15/2/6.
 23 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 24 //
 25 
 26 #import "HVWComposeTextView.h"
 27 
 28 @interface HVWComposeTextView()
 29 
 30 @property(nonatomic, strong) UILabel *placeHolderLabel;
 31 
 32 @end
 33 
 34 @implementation HVWComposeTextView
 35 
 36 - (instancetype)initWithFrame:(CGRect)frame {
 37     self = [super initWithFrame:frame];
 38    
 39     if (self) {
 40         // 可以拖曳
 41         self.scrollEnabled = YES;
 42         self.alwaysBounceVertical = YES;
 43        
 44         // 添加placeHolderLabel
 45         [self setupPlaceHolder];
 46       
 47         // 设置默认字体
 48         [self setFont:[UIFont systemFontOfSize:14]];
 49 
 50         // 设置通知
 51         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(inputtingText) name:UITextViewTextDidChangeNotification object:self];
 52     }
 53    
 54     return self;
 55 }
 56 
 57 /** 添加placeHolder */
 58 - (void) setupPlaceHolder {
 59     UILabel *placeHolderLabel = [[UILabel alloc] init];
 60     self.placeHolderLabel = placeHolderLabel;
 61    
 62     placeHolderLabel.textColor = [UIColor lightGrayColor];
 63     placeHolderLabel.userInteractionEnabled = NO;
 64     placeHolderLabel.numberOfLines = 0; // 自动换行
 65     placeHolderLabel.backgroundColor = [UIColor clearColor];
 66    
 67     [self addSubview:placeHolderLabel];
 68 }
 69 
 70 /** 设置子控件frame */
 71 - (void)layoutSubviews {
 72     [super layoutSubviews];
 73    
 74     self.placeHolderLabel.x = 5;
 75     self.placeHolderLabel.y = 8;
 76    
 77     NSMutableDictionary *attr = [NSMutableDictionary dictionary];
 78     attr[NSFontAttributeName] = self.placeHolderLabel.font;
 79     CGFloat placeHolderWidth = self.width - 2 * self.placeHolderLabel.x;
 80    
 81     CGRect tempRect = [self.placeHolderLabel.text boundingRectWithSize:CGSizeMake(placeHolderWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attr context:nil];
 82     self.placeHolderLabel.size = tempRect.size;
 83 }
 84 
 85 - (void)setPlaceHolder:(NSString *)placeHolder {
 86     self.placeHolderLabel.text = placeHolder;
 87    
 88     // 重新计算frame,可能不会立即调用layoutSubviews
 89     [self setNeedsLayout];
 90 }
 91 
 92 /** 重写setFont,更改正文font的时候也更改placeHolder的font */
 93 - (void)setFont:(UIFont *)font {
 94     [super setFont:font];
 95     self.placeHolderLabel.font = font;
 96    
 97     // 重新计算frame,可能不会立即调用layoutSubviews
 98     [self setNeedsLayout];
 99 }
100 
101 - (void)dealloc {
102     // 注销通知监听
103     [[NSNotificationCenter defaultCenter] removeObserver:self];
104 }
105 
106 /** 正在输入文本 */
107 - (void) inputtingText {
108     if (self.text.length) {
109         self.placeHolderLabel.hidden = YES;
110     } else {
111         self.placeHolderLabel.hidden = NO;
112     }
113 }
114 
115 @end
 
 
在控制器中使用
 1 //  HVWComposeViewController.m
 2 - (void)viewDidLoad {
 3     [super viewDidLoad];
 4     // Do any additional setup after loading the view.
 5    
 6     // 初始化一些功能按钮
 7     self.title = @"发微博";
 8    
 9     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"退出" style:UIBarButtonItemStylePlain target:self action:@selector(dismiss)];
10    
11     // 添加自定义UITextView
12     HVWComposeTextView *composeView = [[HVWComposeTextView alloc] init];
13     self.composeView = composeView;
14     composeView.frame = self.view.bounds;
15     composeView.delegate = self;
16    
17     composeView.placeHolder = @"分享点滴精彩阿里山的会计法律考试大姐夫;拉可接受的;浪费空间阿斯顿;离开房间啊;数量的会计法律;阿克苏交电费;拉可接受的分;垃圾可适当;浪费就卡死;老地方就卡死;懒得看积分;阿里快速的减肥;拉等级考试...";
18    
19     [self.view addSubview:composeView];
20 }

 

 
ComposeTextViewPlaceHolder
 
 
B.使用代理监听UITextView的拖曳,缩回键盘
1 //  HVWComposeViewController.m
2 #pragma mark - UIScrollViewDelegate
3 /** 开始拖曳 */
4 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
5     // 缩回键盘
6     [self.composeView resignFirstResponder];
7 }
 
ComposeHideKeyBoard
 
 
整理一下“发微博”控制器代码:
 1 //
 2 //  HVWComposeViewController.m
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/3.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import "HVWComposeViewController.h"
10 #import "HVWComposeTextView.h"
11 
12 @interface HVWComposeViewController () <UITextViewDelegate, UIScrollViewDelegate>
13 
14 @property(nonatomic, strong) HVWComposeTextView *composeView;
15 
16 @end
17 
18 @implementation HVWComposeViewController
19 
20 - (void)viewDidLoad {
21     [super viewDidLoad];
22     // Do any additional setup after loading the view.
23    
24    
25     // 设置导航栏
26     [self setupNavigationBar];
27    
28     // 添加自定义UITextView
29     [self setupTextView];
30 
31     // 添加工具栏
32     [self setupToolBar];
33 }
34 
35 /** 设置工具栏 */
36 - (void) setupToolBar {
37    
38 }
39 
40 /** 设置输入控件 */
41 - (void) setupTextView {
42     HVWComposeTextView *composeView = [[HVWComposeTextView alloc] init];
43     self.composeView = composeView;
44     composeView.frame = self.view.bounds;
45     composeView.delegate = self;
46    
47     composeView.placeHolder = @"分享点滴精彩...";
48    
49     [self.view addSubview:composeView];
50 }
51 
52 /** 设置导航栏 */
53 - (void) setupNavigationBar {
54     // 标题
55     self.title = @"发微博";
56    
57     // 导航栏左方按钮
58     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"退出" style:UIBarButtonItemStylePlain target:self action:@selector(dismiss)];
59 }
60 
61 - (void)viewDidAppear:(BOOL)animated {
62     // 自动弹出键盘
63     [self.composeView becomeFirstResponder];
64 }
65 
66 - (void) dismiss {
67     [self.composeView resignFirstResponder];
68     [self dismissViewControllerAnimated:YES completion:nil];
69    
70 }
71 
72 
73 #pragma mark - UIScrollViewDelegate
74 /** 开始拖曳 */
75 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
76     // 缩回键盘
77     [self.composeView resignFirstResponder];
78 }
79 
80 @end
 
 
C.键盘上方的工具条
1.需求
紧贴在键盘上方的工具栏,可随键盘伸缩,始终可视
工具栏上的功能按钮有:照相机、相册、提到@、话题、表情
 
2.思路
自定义一个UIView,封装上述功能
使用代理监听按钮点击
监听键盘弹出缩回通知,使用transform移动工具条
 
3.实现
(1)自定义UIView
 1 //
 2 //  HVWComposeToolBar.h
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/7.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import <UIKit/UIKit.h>
10 
11 typedef enum {
12     HVWComposeToolBarButtonTagCamera, // 照相机
13     HVWComposeToolBarButtonTagPhotoLib, // 相册
14     HVWComposeToolBarButtonTagMention, // 提到@
15     HVWComposeToolBarButtonTagTrend, // 话题
16     HVWComposeToolBarButtonTagEmotion // 表情
17 } HVWComposeToolBarButtonTag;
18 
19 @class HVWComposeToolBar;
20 @protocol HVWComposeToolBarDelegate <NSObject>
21 
22 @optional
23 - (void) composeToolBar:(HVWComposeToolBar *) composeToolBar didButtonClicked:(HVWComposeToolBarButtonTag) tag;
24 
25 @end
26 
27 @interface HVWComposeToolBar : UIView
28 
29 /** 代理 */
30 @property(nonatomic, weak) id<HVWComposeToolBarDelegate> delegate;
31 
32 @end
 
 1 //
 2 //  HVWComposeToolBar.m
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/7.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import "HVWComposeToolBar.h"
10 
11 @implementation HVWComposeToolBar
12 
13 - (instancetype)initWithFrame:(CGRect)frame {
14     self = [super initWithFrame:frame];
15    
16     if (self) {
17         // 背景色
18         self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithNamed:@"compose_toolbar_background"]];
19        
20         // 添加按钮
21         [self addButtonWithIcon:@"compose_camerabutton_background" highlightedIcon:@"compose_camerabutton_background_highlighted" tag:HVWComposeToolBarButtonTagCamera];
22        
23         [self addButtonWithIcon:@"compose_toolbar_picture" highlightedIcon:@"compose_toolbar_picture_highlighted" tag:HVWComposeToolBarButtonTagPhotoLib];
24        
25         [self addButtonWithIcon:@"compose_mentionbutton_background" highlightedIcon:@"compose_mentionbutton_background_highlighted" tag:HVWComposeToolBarButtonTagMention];
26        
27         [self addButtonWithIcon:@"compose_trendbutton_background" highlightedIcon:@"compose_trendbutton_background_highlighted" tag:HVWComposeToolBarButtonTagTrend];
28        
29         [self addButtonWithIcon:@"compose_emoticonbutton_background" highlightedIcon:@"compose_emoticonbutton_background_highlighted" tag:HVWComposeToolBarButtonTagEmotion];
30     }
31    
32    
33     return self;
34 }
35 
36 /** 添加一个按钮 */
37 - (void) addButtonWithIcon:(NSString *) icon highlightedIcon:(NSString *) highlightedIcon tag:(HVWComposeToolBarButtonTag) tag {
38     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
39     [button setImage:[UIImage imageWithNamed:icon] forState:UIControlStateNormal];
40     [button setImage:[UIImage imageWithNamed:highlightedIcon] forState:UIControlStateHighlighted];
41     button.tag = tag;
42    
43     // 按钮点击事件
44     [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
45    
46     [self addSubview:button];
47 }
48 
49 /** 设置frame */
50 - (void)layoutSubviews {
51     [super layoutSubviews];
52    
53     CGFloat buttonWidth = self.width / self.subviews.count;
54    
55     // 设置每个按钮
56     for (int i=0; i<self.subviews.count; i++) {
57         UIButton *button = self.subviews[i];
58        
59         CGFloat buttonHeight = buttonWidth;
60         CGFloat buttonX = i * buttonWidth;
61         CGFloat buttonY = (self.height - buttonHeight) * 0.5;
62         button.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
63     }
64 }
65 
66 /** 按钮点击 */
67 - (void) buttonClicked:(UIButton *) button {
68     // 通知代理
69     if ([self.delegate respondsToSelector:@selector(composeToolBar:didButtonClicked:)]) {
70         [self.delegate composeToolBar:self didButtonClicked:button.tag];
71     }
72 }
73 
74 @end
 
(2)在控制器上测试
 1 //  HVWComposeViewController.m
 2 /** 设置工具栏 */
 3 - (void) setupToolBar {
 4     HVWComposeToolBar *toolBar = [[HVWComposeToolBar alloc] init];
 5     toolBar.width = self.view.width;
 6     toolBar.height = 44;
 7     toolBar.delegate = self;
 8    
 9     self.composeView.inputAccessoryView = toolBar;
10 }
 
Image(119)
 
(3)在控制器中调整工具条的位置
不要直接加载键盘的inputAccessoryView上,因为需要在键盘退出之后仍然显示在底部
所以独立设置位置,使用transform随着键盘移动
 1 //  HVWComposeViewController.m
 2 /** 设置工具栏 */
 3 - (void) setupToolBar {
 4     HVWComposeToolBar *toolBar = [[HVWComposeToolBar alloc] init];
 5     self.toolBar = toolBar;
 6     toolBar.width = self.view.width;
 7     toolBar.height = 44;
 8     toolBar.delegate = self;
 9    
10     toolBar.x = 0;
11     // 在底部显示
12     toolBar.y = self.view.height - toolBar.height;
13    
14     [self.view addSubview:toolBar];
15 }
16 
17 /** 设置输入控件 */
18 - (void) setupTextView {
19     HVWComposeTextView *composeView = [[HVWComposeTextView alloc] init];
20     self.composeView = composeView;
21     composeView.frame = self.view.bounds;
22     composeView.delegate = self;
23    
24     composeView.placeHolder = @"分享点滴精彩...";
25    
26     [self.view addSubview:composeView];
27    
28     // 监听键盘通知
29     // 键盘将弹出
30     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
31    
32     // 键盘将缩回
33     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
34    
35     // 添加图片显示区
36     [self setupImageDisplayView];
37 }
38  
39 #pragma mark - 键盘通知处理
40 /** 键盘将弹出 */
41 - (void) keyboardWillShow:(NSNotification *) note {
42     // 键盘弹出需要时间
43     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
44    
45     // 移动工具条
46     [UIView animateWithDuration:duration animations:^{
47         // 获取键盘高度
48         CGRect keyboardFrame = [note.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
49         CGFloat keyboardHeight = keyboardFrame.size.height;
50        
51         self.toolBar.transform = CGAffineTransformMakeTranslation(0, -1 * keyboardHeight);
52     }];
53 }
54 
55 /** 键盘将缩回 */
56 - (void) keyboardWillHide:(NSNotification *) note {
57     // 键盘缩回需要时间
58     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
59    
60     // 移动工具条
61     [UIView animateWithDuration:duration animations:^{
62         self.toolBar.transform = CGAffineTransformIdentity;
63     }];
64 }

 

 
ComposeToolBar
 
D.相机 & 相册 选择图片功能
1.需求
点击“相机”/“相册”进入相应界面,完成后把选择的图片显示在输入框
 
2.思路
使用UIImagePickerController打开相机/相册
使用picker的代理方法,在完成选择后获取图片
创建一个UIView用来装载图片,然后放在输入框内
 
3.实现
 1 //
 2 //  HVWComposeImageDisplayView.h
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/7.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import <UIKit/UIKit.h>
10 
11 @interface HVWComposeImageDisplayView : UIView
12 
13 - (void) addImage:(UIImage *) image;
14 
15 @end
 
 1 //
 2 //  HVWComposeImageDisplayView.m
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/7.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import "HVWComposeImageDisplayView.h"
10 
11 #define MaxColumn 4
12 
13 @implementation HVWComposeImageDisplayView
14 
15 /** 添加图片 */
16 - (void) addImage:(UIImage *) image {
17     HVWLog(@"addImage");
18     UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
19     imageView.contentMode = UIViewContentModeScaleAspectFit;
20    
21     [self addSubview:imageView];
22    
23     [self setNeedsDisplay];
24 }
25 
26 /** 设置frame */
27 - (void)layoutSubviews {
28     [super layoutSubviews];
29    
30     UIImageView *imageView = [self.subviews lastObject];
31     int index = self.subviews.count - 1;
32     // 所在列
33     int column = index % MaxColumn;
34     // 所在行
35     int row = index / MaxColumn;
36    
37     CGFloat margin = 10;
38     CGFloat imageWidth = (self.width - (MaxColumn + 1) * margin) / MaxColumn;
39     CGFloat imageHeight = imageWidth;
40     CGFloat imageX = column * (imageWidth + margin) + margin;
41     CGFloat imageY = row * (imageHeight + margin);
42    
43     imageView.frame = CGRectMake(imageX, imageY, imageWidth, imageHeight);
44 }
45 
46 @end

 

 
  1 //
  2 //  HVWComposeViewController.m
  3 //  HVWWeibo
  4 //
  5 //  Created by hellovoidworld on 15/2/3.
  6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
  7 //
  8 
  9 #import "HVWComposeViewController.h"
 10 #import "HVWComposeTextView.h"
 11 #import "HVWComposeToolBar.h"
 12 #import "HVWComposeImageDisplayView.h"
 13 
 14 @interface HVWComposeViewController () <UITextViewDelegate, UIScrollViewDelegate, HVWComposeToolBarDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>
 15 
 16 /** 输入框 */
 17 @property(nonatomic, strong) HVWComposeTextView *composeView;
 18 
 19 /** 工具条 */
 20 @property(nonatomic, strong) HVWComposeToolBar *toolBar;
 21 
 22 /** 图片显示区 */
 23 @property(nonatomic, strong) HVWComposeImageDisplayView *imageDisplayView;
 24 
 25 @end
 26 
 27 @implementation HVWComposeViewController
 28 
 29 - (void)viewDidLoad {
 30     [super viewDidLoad];
 31     // Do any additional setup after loading the view.
 32    
 33    
 34     // 设置导航栏
 35     [self setupNavigationBar];
 36    
 37     // 添加自定义UITextView
 38     [self setupTextView];
 39 
 40     // 添加工具栏
 41     [self setupToolBar];
 42 }
 43 
 44 /** 设置工具栏 */
 45 - (void) setupToolBar {
 46     HVWComposeToolBar *toolBar = [[HVWComposeToolBar alloc] init];
 47     self.toolBar = toolBar;
 48     toolBar.width = self.view.width;
 49     toolBar.height = 44;
 50     toolBar.delegate = self;
 51    
 52     toolBar.x = 0;
 53     // 在底部显示
 54     toolBar.y = self.view.height - toolBar.height;
 55    
 56     [self.view addSubview:toolBar];
 57 }
 58 
 59 /** 设置输入控件 */
 60 - (void) setupTextView {
 61     HVWComposeTextView *composeView = [[HVWComposeTextView alloc] init];
 62     self.composeView = composeView;
 63     composeView.frame = self.view.bounds;
 64     composeView.delegate = self;
 65    
 66     composeView.placeHolder = @"分享点滴精彩...";
 67    
 68     [self.view addSubview:composeView];
 69    
 70     // 监听键盘通知
 71     // 键盘将弹出
 72     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
 73    
 74     // 键盘将缩回
 75     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
 76    
 77     // 添加图片显示区
 78     [self setupImageDisplayView];
 79 }
 80 
 81 /** 设置导航栏 */
 82 - (void) setupNavigationBar {
 83     // 标题
 84     self.title = @"发微博";
 85    
 86     // 导航栏左方按钮
 87     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"退出" style:UIBarButtonItemStylePlain target:self action:@selector(dismiss)];
 88 }
 89 
 90 /** 添加图片显示区 */
 91 - (void) setupImageDisplayView {
 92     HVWComposeImageDisplayView *imageDisplayView = [[HVWComposeImageDisplayView alloc] init];
 93     imageDisplayView.size = self.composeView.size;
 94     imageDisplayView.x = 0;
 95     imageDisplayView.y = 100;
 96    
 97     self.imageDisplayView = imageDisplayView;
 98    
 99     [self.composeView addSubview:imageDisplayView];
100 }
101 
102 - (void)viewDidAppear:(BOOL)animated {
103     // 自动弹出键盘
104     [self.composeView becomeFirstResponder];
105 }
106 
107 - (void) dismiss {
108     [self.composeView resignFirstResponder];
109     [self dismissViewControllerAnimated:YES completion:nil];
110    
111 }
112 
113 
114 #pragma mark - UIScrollViewDelegate
115 /** 开始拖曳 */
116 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
117     // 缩回键盘
118     [self.composeView resignFirstResponder];
119 }
120 
121 #pragma mark - HVWComposeToolBarDelegate
122 /** 工具栏的按钮被点击了 */
123 - (void)composeToolBar:(HVWComposeToolBar *)composeToolBar didButtonClicked:(HVWComposeToolBarButtonTag)tag {
124     // 判断哪个按钮被点击
125     switch (tag) {
126         case HVWComposeToolBarButtonTagCamera: // 相机
127             [self openCamera];
128             break;
129         case HVWComposeToolBarButtonTagPhotoLib: // 相册
130             [self openAlbum];
131             break;
132         case HVWComposeToolBarButtonTagMention: // 提到@
133            
134             break;
135         case HVWComposeToolBarButtonTagTrend: // 话题
136            
137             break;
138         case HVWComposeToolBarButtonTagEmotion: // 表情
139            
140             break;
141         default:
142             break;
143     }
144 }
145 
146 /** 打开相机 */
147 - (void) openCamera {
148     UIImagePickerController *picker = [[UIImagePickerController alloc] init];
149     picker.sourceType = UIImagePickerControllerSourceTypeCamera;
150     picker.delegate = self;
151    
152     [self presentViewController:picker animated:YES completion:nil];
153 }
154 
155 /** 打开相册 */
156 - (void) openAlbum {
157     UIImagePickerController *picker = [[UIImagePickerController alloc] init];
158     picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
159     picker.delegate = self;
160    
161     [self presentViewController:picker animated:YES completion:nil];
162 }
163 
164 #pragma mark - UIImagePickerControllerDelegate
165 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
166     // 取得原图
167     UIImage *image = info[UIImagePickerControllerOriginalImage];
168     [self.imageDisplayView addImage:image];
169    
170     [picker dismissViewControllerAnimated:YES completion:nil];
171 }
172 
173 #pragma mark - 键盘通知处理
174 /** 键盘将弹出 */
175 - (void) keyboardWillShow:(NSNotification *) note {
176     // 键盘弹出需要时间
177     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
178    
179     // 移动工具条
180     [UIView animateWithDuration:duration animations:^{
181         // 获取键盘高度
182         CGRect keyboardFrame = [note.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
183         CGFloat keyboardHeight = keyboardFrame.size.height;
184        
185         self.toolBar.transform = CGAffineTransformMakeTranslation(0, -1 * keyboardHeight);
186     }];
187 }
188 
189 /** 键盘将缩回 */
190 - (void) keyboardWillHide:(NSNotification *) note {
191     // 键盘缩回需要时间
192     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
193    
194     // 移动工具条
195     [UIView animateWithDuration:duration animations:^{
196         self.toolBar.transform = CGAffineTransformIdentity;
197     }];
198 }
199 
200 @end

 

 
ComposeImagePicker
 
 
 
 
 
 
 
posted @ 2015-02-07 16:19  HelloVoidWorld  阅读(1107)  评论(0编辑  收藏  举报