亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

IOS實現聊天界面底部菜單欄效果

2020-07-26 02:42:16
字體:
來源:轉載
供稿:網友

-本安全出自個人小項目仿boss直聘當中的聊天信息界面:

實現的思路主要是:約束動畫。

實現較簡單,這里直接上代碼:

。h文件:

#import <UIKit/UIKit.h> @protocol ShowMoreOptionListener <NSObject> @optional -(void) onChangListener; @end @class ScrollView; /**  底部菜單視圖  */ @interface BottomMenuView : UIView @property(nonatomic,strong) UIView* showPartView;    //總是可見部分 @property(nonatomic,strong) UIView* hiddenPartView;   //底部隱藏部分,需要點擊顯示部分才能顯示出來 @property(nonatomic,weak) id<ShowMoreOptionListener> delegate; //下面更多操作菜單的的狀態代理器 @property(nonatomic,strong) ScrollView* emojiPanel; -(void) buildOptionMenu; @end 

.m文件:

#import "BottomMenuView.h" #import "Masonry.h" #import "QuickWordsView.h" #import "ScrollView.h" #import "Constants.h" static const int QuickChat = 31; static const int Emoji = 32; static const int AddType = 33; static const int EmojiPanel = 34; static const int QuickChatPanel = 34; @implementation BottomMenuView -(instancetype) initWithFrame:(CGRect)frame{   if(self = [super initWithFrame:frame]){}   return self; } -(void) buildOptionMenu{   self.showPartView = [[UIView alloc] init];   //self.showPartView.backgroundColor = [UIColor greenColor];   [self addSubview:self.showPartView];   //添加showPartView約束   [self.showPartView mas_makeConstraints:^(MASConstraintMaker *make) {     make.right.equalTo(self).offset(0);     make.top.equalTo(self);     make.left.equalTo(self);     make.height.mas_equalTo(40);   }];   UIButton* showQuickWordsBtn = [[UIButton alloc] init];   [showQuickWordsBtn setImage:[UIImage imageNamed:@"ic_chat_input_method"] forState:UIControlStateNormal];   showQuickWordsBtn.imageView.contentMode = UIViewContentModeScaleAspectFit;   showQuickWordsBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;   showQuickWordsBtn.imageEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);   showQuickWordsBtn.tag = QuickChat;   [showQuickWordsBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];   [self.showPartView addSubview:showQuickWordsBtn];   [showQuickWordsBtn mas_makeConstraints:^(MASConstraintMaker *make) {     make.leading.equalTo(self.showPartView).offset(0);     make.top.equalTo(self.showPartView);     make.size.mas_equalTo(CGSizeMake(90, 40));   }];   //中間編輯框   UITextView* editText = [[UITextView alloc] init];   [self.showPartView addSubview:editText];   [editText mas_makeConstraints:^(MASConstraintMaker *make) {     make.leading.equalTo(showQuickWordsBtn.mas_trailing).offset(-10);     make.centerY.equalTo(showQuickWordsBtn.mas_centerY);     make.height.mas_equalTo(37);     make.trailing.equalTo(self.showPartView).offset(-100);   }];   //設置編輯框底部線   UIView* editTextbottomLine = [[UIView alloc] init];   editTextbottomLine.backgroundColor = [UIColor blackColor];   [self.showPartView addSubview:editTextbottomLine];   [editTextbottomLine mas_makeConstraints:^(MASConstraintMaker *make) {     make.leading.equalTo(showQuickWordsBtn.mas_trailing).offset(-10);     make.top.equalTo(showQuickWordsBtn.mas_bottom);     make.height.mas_equalTo(1.0);     make.trailing.equalTo(self.showPartView).offset(-100);   }];   //創建表情   UIButton* emojiBtn = [[UIButton alloc] init];   [emojiBtn setImage:[UIImage imageNamed:@"ic_emoji.png"] forState:UIControlStateNormal];   emojiBtn.imageView.contentMode = UIViewContentModeScaleAspectFit;   emojiBtn.tag = Emoji;   [emojiBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];   [self addSubview:emojiBtn];   [emojiBtn mas_makeConstraints:^(MASConstraintMaker *make) {     make.leading.equalTo(editText.mas_trailing).offset(5);     make.centerY.equalTo(self.showPartView.mas_centerY);     make.size.mas_equalTo(CGSizeMake(38, 38));   }];   //創建+btn   UIButton* addBtn = [[UIButton alloc] init];   [addBtn setImage:[UIImage imageNamed:@"ic_gallery_add.png"] forState:UIControlStateNormal];   addBtn.imageView.contentMode = UIViewContentModeScaleAspectFit;   addBtn.tag = AddType;   [addBtn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];   [self addSubview:addBtn];   [addBtn mas_makeConstraints:^(MASConstraintMaker *make) {     make.right.equalTo(self.showPartView).offset(-10);     make.centerY.equalTo(self.showPartView.mas_centerY);     make.size.mas_equalTo(CGSizeMake(38, 38));   }];   //設置永久顯示底部線   UIView* bottomLine = [[UIView alloc] init];   bottomLine.backgroundColor = [UIColor blackColor];   [self.showPartView addSubview:bottomLine];   [bottomLine mas_makeConstraints:^(MASConstraintMaker *make) {     make.leading.equalTo(showQuickWordsBtn);     make.top.equalTo(self.showPartView.mas_bottom).offset(5);     make.height.mas_equalTo(1.0);     make.trailing.equalTo(self.showPartView.mas_trailing);   }]; //  //下面開始處理隱藏部分,默認顯示快捷消息 //  QuickWordsView* quickWordsView = [[QuickWordsView alloc] init]; //  quickWordsView.separatorInset = UIEdgeInsetsMake(0,10,0,10); //top left right down //  quickWordsView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; //刪除底部多余行,及分割線 //  quickWordsView.tag = 100; //  [self addSubview:quickWordsView]; //  [quickWordsView mas_makeConstraints:^(MASConstraintMaker *make) { //    make.leading.equalTo(self); //    make.trailing.equalTo(self.mas_trailing); //    make.top.equalTo(self.mas_top).offset(47); //    make.height.mas_equalTo(210); //     //  }];   [self buildQuickChat]; } -(void)onClick:(UIButton*) button{   switch(button.tag){     case QuickChat:{       if(self.delegate){         [self.delegate onChangListener];       }     }break;     case Emoji:{     }break;     case AddType:{     }break;   } } -(void) buildQuickChat{   //下面開始處理隱藏部分,默認顯示快捷消息   QuickWordsView* quickWordsView = [[QuickWordsView alloc] init];   quickWordsView.separatorInset = UIEdgeInsetsMake(0,10,0,10); //top left right down   quickWordsView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; //刪除底部多余行,及分割線   quickWordsView.tag = QuickChatPanel;   [self addSubview:quickWordsView];   [quickWordsView mas_makeConstraints:^(MASConstraintMaker *make) {     make.leading.equalTo(self);     make.trailing.equalTo(self.mas_trailing);     make.top.equalTo(self.mas_top).offset(47);     make.height.mas_equalTo(210);   }]; } //-------------------kvo 實現觀察主題 end---------------- @end 

測試代碼:

-(void) testBottomMenu{    self.menu = [[BottomMenuView alloc] init];   self.menu.translatesAutoresizingMaskIntoConstraints = NO;   //self.menu.backgroundColor = [UIColor redColor];   [self.menu buildOptionMenu];   self.menu.delegate = self;   [self.view addSubview:self.menu];   //使用約束來達到效果,下面開始添加約束 靠著底部   NSLayoutConstraint* alginBottom = [NSLayoutConstraint constraintWithItem:self.menu                                   attribute:NSLayoutAttributeBottom                                   relatedBy:NSLayoutRelationEqual                                    toItem:self.view                                   attribute:NSLayoutAttributeBottom                                  multiplier:1                                   constant:0.0];   [self.view addConstraint:alginBottom];   //添加高度   self.bottomHeightCons = [NSLayoutConstraint                constraintWithItem:self.menu                attribute:NSLayoutAttributeHeight                relatedBy:NSLayoutRelationEqual                toItem:nil                attribute:0                multiplier:1                constant:260];   [self.menu addConstraint:self.bottomHeightCons];   //添加右邊約束   NSLayoutConstraint* rightMargin = [NSLayoutConstraint constraintWithItem:self.menu                                   attribute:NSLayoutAttributeRight                                   relatedBy:NSLayoutRelationEqual                                    toItem:self.view                                   attribute:NSLayoutAttributeRight                                  multiplier:1                                   constant:0.0];   [self.view addConstraint:rightMargin];   //添加左邊約束   NSLayoutConstraint* leftMargin = [NSLayoutConstraint constraintWithItem:self.menu                                   attribute:NSLayoutAttributeLeft                                   relatedBy:NSLayoutRelationEqual                                    toItem:self.view                                   attribute:NSLayoutAttributeLeft                                  multiplier:1                                   constant:0.0];   [self.view addConstraint:leftMargin]; } //更多操作按鈕的協議監聽接口 -(void)onChangListener{   //[self.view layoutIfNeeded];   if(self.bottomHeightCons.constant == 40){     self.bottomHeightCons.constant = 260;   }else{     self.bottomHeightCons.constant = 40;   }   [UIView animateWithDuration:0.5 animations:^{     [self.view layoutIfNeeded];   }];    } 

總結

以上所述是小編給大家介紹的IOS實現聊天界面底部菜單欄效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美电影免费观看网站| 国产精品三级久久久久久电影| 日韩av网站电影| 播播国产欧美激情| 国产精品久久久久久久久男| 欧美日韩在线观看视频| 亚洲另类欧美自拍| 亚洲影院色无极综合| 国产精品视频一区国模私拍| 夜夜嗨av一区二区三区四区| 亚洲综合av影视| 亚洲aaa激情| 国产精品久久久久久久午夜| 欧美激情国产高清| 欧美成人精品一区| 欧美大片在线看免费观看| 高潮白浆女日韩av免费看| 超碰97人人做人人爱少妇| 日韩精品视频在线观看网址| 欧美大尺度激情区在线播放| 久久人人爽国产| 在线观看国产精品淫| 色阁综合伊人av| 日韩一中文字幕| 亚洲综合日韩中文字幕v在线| 中文字幕精品在线| 精品国产拍在线观看| 成人伊人精品色xxxx视频| 91视频免费在线| 国产日本欧美一区二区三区| 亚洲a成v人在线观看| 97碰碰碰免费色视频| 亚洲第一男人av| 亚洲缚视频在线观看| 成人激情电影一区二区| 国产精品久久77777| 日韩精品免费在线视频观看| 久久精品亚洲94久久精品| 久久久精品久久久久| 98精品国产自产在线观看| 国产成人精品电影久久久| 8x拔播拔播x8国产精品| 91国产精品视频在线| 欧美性受xxxx白人性爽| 国产精品扒开腿做爽爽爽视频| 国产精品久久久久久久久粉嫩av| 国产做受高潮69| 日韩精品电影网| 欧美极品少妇xxxxⅹ喷水| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日韩激情视频| 国产精品日日做人人爱| 一夜七次郎国产精品亚洲| 国产一区二区三区在线免费观看| 中国日韩欧美久久久久久久久| 中文字幕欧美精品日韩中文字幕| 亚洲国产91色在线| 亚洲精品久久久一区二区三区| 久久69精品久久久久久国产越南| 欧美一区亚洲一区| 亚洲第一级黄色片| 欧美日韩国产123| 国产成人精品av在线| 久久视频在线直播| 亲爱的老师9免费观看全集电视剧| 国产亚洲视频在线观看| 久久综合伊人77777| 亚洲天堂av图片| 欧美成人一区二区三区电影| 亚洲aⅴ日韩av电影在线观看| 久久中文字幕在线视频| 国产主播在线一区| 欧美日韩视频免费播放| 国自产精品手机在线观看视频| 久久久视频在线| 亚洲精品在线不卡| 欧美极品少妇与黑人| 在线观看不卡av| 亚洲成人1234| 日本人成精品视频在线| 欧美电影免费观看电视剧大全| 亚洲人成网站777色婷婷| 永久555www成人免费| 在线a欧美视频| www国产精品视频| 91豆花精品一区| 91久久国产精品91久久性色| 亚洲日本成人女熟在线观看| 亚洲国产天堂久久综合网| 久久色免费在线视频| 欧美精品www在线观看| 欧美日韩成人免费| 欧美国产视频一区二区| 亚洲天堂色网站| 国产精品黄页免费高清在线观看| 国产精品aaa| 97视频免费在线看| 亚洲自拍偷拍网址| 夜夜嗨av色综合久久久综合网| 欧美激情国产日韩精品一区18| 久久精品影视伊人网| 国产精品最新在线观看| 欧美韩日一区二区| 丝袜亚洲另类欧美重口| 色综合久久悠悠| 久久精品2019中文字幕| 不卡av在线网站| 日韩电视剧在线观看免费网站| 精品无人区太爽高潮在线播放| 蜜月aⅴ免费一区二区三区| 这里精品视频免费| 伊人av综合网| 欧美在线一级va免费观看| 亚洲精品一区在线观看香蕉| 91免费国产网站| 国产精品27p| 在线亚洲男人天堂| 日韩欧美国产黄色| 国产欧美日韩丝袜精品一区| 91国自产精品中文字幕亚洲| 欧美—级a级欧美特级ar全黄| 久久久中精品2020中文| 国产亚洲激情在线| 亚洲第一在线视频| 国产精品视频最多的网站| 国产欧美日韩视频| 在线看欧美日韩| 国产视频久久久久| 亚洲高清久久网| 国产精品久久久久久久久久三级| 亚洲第一视频网站| 91精品视频在线免费观看| 亚洲人成电影网站色…| 国产精品欧美激情在线播放| 成人欧美一区二区三区黑人| 国产精品中文在线| 成人免费福利在线| 欧美丰满片xxx777| 国产在线日韩在线| 国产欧美日韩最新| 一区二区三区国产在线观看| 午夜精品一区二区三区av| 欧美高清理论片| 亚洲国产美女精品久久久久∴| 亚洲综合日韩在线| 这里精品视频免费| 国产免费一区视频观看免费| 成人h视频在线观看播放| 亚洲自拍偷拍色图| 在线不卡国产精品| 国语自产精品视频在免费| 91视频88av| 久久色在线播放| 亚洲无限av看| 欧美精品在线观看91| 欧美激情一区二区久久久| 欧美精品在线免费播放| 日韩精品小视频| 欧美麻豆久久久久久中文| 久久91亚洲精品中文字幕奶水| 亚洲成人久久一区| 欧美国产高跟鞋裸体秀xxxhd| 91成人性视频| 日韩av电影手机在线|