新浪微博客户端(43)-切换表情控件
Posted 夜行过客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新浪微博客户端(43)-切换表情控件相关的知识,希望对你有一定的参考价值。
DJEmotionKeyboard.m
#import "DJEmotionKeyboard.h" #import "DJEmotionListView.h" #import "DJEmotionTabBar.h" #import "DJEmotion.h" #import "MJExtension.h" @interface DJEmotionKeyboard() <DJEmotionTabBarDelegate> // 底部工具条 @property (nonatomic,weak) DJEmotionTabBar *emotionTabBar; // 分隔线 @property (nonatomic,weak) UIView *dividerView; /* ================= 表情切换容器 ============== */ @property (nonatomic,weak) UIView *placeView; // 最近 @property (nonatomic,strong) DJEmotionListView *recentEmotionView; // 默认 @property (nonatomic,strong) DJEmotionListView *defaultEmotionView; // Emoji @property (nonatomic,strong) DJEmotionListView *emojiEmotionView; // 浪小花 @property (nonatomic,strong) DJEmotionListView *lxhEmotionView; /* ================= 表情切换容器 ============== */ @end @implementation DJEmotionKeyboard - (DJEmotionListView *)recentEmotionView { if (!_recentEmotionView) { DJEmotionListView *recentEmotionView = [[DJEmotionListView alloc] init]; _recentEmotionView = recentEmotionView; recentEmotionView.backgroundColor = DJRandomColor; } return _recentEmotionView; } - (DJEmotionListView *)defaultEmotionView { if (!_defaultEmotionView) { DJEmotionListView *defaultEmotionView = [[DJEmotionListView alloc] init]; _defaultEmotionView = defaultEmotionView; defaultEmotionView.backgroundColor = DJRandomColor; NSString *path = [[NSBundle mainBundle] pathForResource:@"EmotionIcons/default/info.plist" ofType:nil]; NSArray *dictArray = [NSArray arrayWithContentsOfFile:path]; // 将字典数组转换成模型数组 NSArray *emotionArray = [DJEmotion mj_objectArrayWithKeyValuesArray:dictArray]; defaultEmotionView.emotions = emotionArray; } return _defaultEmotionView; } - (DJEmotionListView *)emojiEmotionView { if (!_emojiEmotionView) { DJEmotionListView *emojiEmotionView = [[DJEmotionListView alloc] init]; _emojiEmotionView = emojiEmotionView; emojiEmotionView.backgroundColor = DJRandomColor; NSString *path = [[NSBundle mainBundle] pathForResource:@"EmotionIcons/emoji/info.plist" ofType:nil]; NSArray *dictArray = [NSArray arrayWithContentsOfFile:path]; // 将字典数组转换成模型数组 NSArray *emotionArray = [DJEmotion mj_objectArrayWithKeyValuesArray:dictArray]; emojiEmotionView.emotions = emotionArray; } return _emojiEmotionView; } - (DJEmotionListView *)lxhEmotionView { if (!_lxhEmotionView) { DJEmotionListView *lxhEmotionView = [[DJEmotionListView alloc] init]; _lxhEmotionView = lxhEmotionView; lxhEmotionView.backgroundColor = DJRandomColor; NSString *path = [[NSBundle mainBundle] pathForResource:@"EmotionIcons/lxh/info.plist" ofType:nil]; NSArray *dictArray = [NSArray arrayWithContentsOfFile:path]; // 将字典数组转换成模型数组 NSArray *emotionArray = [DJEmotion mj_objectArrayWithKeyValuesArray:dictArray]; lxhEmotionView.emotions = emotionArray; } return _lxhEmotionView; } - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"emoticon_keyboard_background"]]; UIView *placeView = [[UIView alloc] init]; [self addSubview:placeView]; self.placeView = placeView; // emotionListView.backgroundColor = DJRandomColor; UIView *dividerView = [[UIView alloc] init]; [self addSubview:dividerView]; self.dividerView = dividerView; self.dividerView.backgroundColor = DJColor(187, 187, 187); DJEmotionTabBar *emotionTabBar = [[DJEmotionTabBar alloc] init]; [self addSubview:emotionTabBar]; self.emotionTabBar = emotionTabBar; self.emotionTabBar.delegate = self; // emotionTabBar.backgroundColor = DJRandomColor; } return self; } - (void)layoutSubviews { [super layoutSubviews]; // emotionTabBar CGFloat tabBarW = self.width; CGFloat tabBarH = 44; CGFloat tabBarX = 0; CGFloat tabBarY = self.height - tabBarH; self.emotionTabBar.frame = CGRectMake(tabBarX, tabBarY, tabBarW, tabBarH); // dividerView; CGFloat dividerW = self.width; CGFloat dividerH = 0.5; CGFloat dividerX = 0; CGFloat dividerY = tabBarY - 0.5; self.dividerView.frame = CGRectMake(dividerX, dividerY, dividerW, dividerH); // placeView CGFloat placeViewX = 0; CGFloat placeViewY = 0; CGFloat placeViewW = self.width; CGFloat placeViewH = tabBarY; self.placeView.frame = CGRectMake(placeViewX, placeViewY, placeViewW, placeViewH); // placeView 子元素 UIView *childView = [self.placeView.subviews lastObject]; childView.frame = self.placeView.bounds; } #pragma mark - DJEmotionTabBar 的代理方法 - (void)emotionTabBar:(DJEmotionTabBar *)tabBar didSelectedButtonType:(DJEmotionTabBarButtonType)buttonType { // 1. 清空placeView中之前存在的其它View(类似于android中的ViewGroup.removeAllViews) [self.placeView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; // 2. 切换contentView switch (buttonType) { case DJEmotionTabBarButtonTypeRecent: // 最近 [self.placeView addSubview:self.recentEmotionView]; break; case DJEmotionTabBarButtonTypeDefault: // 默认 [self.placeView addSubview:self.defaultEmotionView]; break; case DJEmotionTabBarButtonTypeEmoji: // Emoji [self.placeView addSubview:self.emojiEmotionView]; break; case DJEmotionTabBarButtonTypeLxh: // 浪小花 [self.placeView addSubview:self.lxhEmotionView]; break; default: break; } // 3.切换完毕后通知系统重新布局,相当于再次调用layoutSubViews [self setNeedsLayout]; } @end
最终效果:
以上是关于新浪微博客户端(43)-切换表情控件的主要内容,如果未能解决你的问题,请参考以下文章