• [iOS微博项目


     
    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
     
     
     
     
     
     
     
  • 相关阅读:
    白盒测试方法
    单元测试 集成测试 系统测试
    快慢指针原理和应用
    实例方法,类方法,静态方法区别
    查找算法
    排序算法整理
    Oracle sql developer 删表时遇到问题unique/primary keys in table referenced by foreign keys
    剑指 Offer 18. 删除链表的节点(简单)
    剑指 Offer 17. 打印从1到最大的n位数(简单)
    Cyberdebut的补题列表
  • 原文地址:https://www.cnblogs.com/hellovoidworld/p/4278966.html
Copyright © 2020-2023  润新知