LZBFaceView.m 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. //
  2. // LZBFaceView.m
  3. // LZBKeyBoardView
  4. //
  5. // demo地址:https://github.com/lzbgithubcode/LZBKeyBoardView.git
  6. // Created by zibin on 16/12/6.
  7. // Copyright © 2016年 apple. All rights reserved.
  8. //
  9. #import "LZBFaceView.h"
  10. #import "LZBFaceSignlePageView.h"
  11. #define LZBColorRGB(r,g,b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]
  12. @interface LZBFaceView()<UIScrollViewDelegate>
  13. //View
  14. @property (nonatomic, strong) UIScrollView *scroollView;
  15. @property (nonatomic, strong) UIPageControl *pageControl;
  16. @property (nonatomic, strong) UIButton *sendButton;
  17. @property (nonatomic, strong) UIButton *chatEmojiBtn;
  18. @property (nonatomic, strong) UIButton *animationEmojiBtn;
  19. //data
  20. @property (nonatomic, strong) NSArray <LZBEmojiModel *> *emojiModles; //表情赋值
  21. @property (nonatomic, copy) void (^emojiDidDeleteBlock)(void); //表情删除回调
  22. @property (nonatomic, copy) void (^emojiDidSendBlock)(void); //表情发送回调
  23. @property (nonatomic, copy) void (^emojiDidSelectBlock)(LZBEmojiModel *emojiModel); //选中某个表情回调
  24. @end
  25. @implementation LZBFaceView
  26. - (instancetype)initWithFrame:(CGRect)frame
  27. {
  28. if(self = [super initWithFrame:frame])
  29. {
  30. self.backgroundColor = HexColorFromRGB(0x2A2935);
  31. [self addSubview:self.scroollView];
  32. [self addSubview:self.pageControl];
  33. [self addSubview:self.sendButton];
  34. [self addSubview:self.chatEmojiBtn];
  35. [self addSubview:self.animationEmojiBtn];
  36. }
  37. return self;
  38. }
  39. - (void)layoutSubviews
  40. {
  41. [super layoutSubviews];
  42. //发送按钮
  43. self.sendButton.frame = CGRectMake(self.bounds.size.width - 62.0f - 14.0f, self.bounds.size.height - 33.0f - 7.0f - SafeHeight, 62.0f, 33.0f);
  44. self.chatEmojiBtn.frame = CGRectMake(0, self.bounds.size.height - 33.0f - 7.0f - SafeHeight, 84.0f, 33.0f);
  45. self.animationEmojiBtn.frame = CGRectMake(self.chatEmojiBtn.mj_w, self.bounds.size.height - 33.0f - 7.0f - SafeHeight, 84.0f, 33.0f);
  46. //scrollView
  47. self.scroollView.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height - self.sendButton.bounds.size.height - 14.0f - SafeHeight);
  48. self.pageControl.frame = CGRectMake(0, self.scroollView.mj_h - 8.0f, self.bounds.size.width, 8.0f);
  49. //单个面板控件
  50. NSInteger count = self.scroollView.subviews.count;
  51. for (NSInteger i = 0; i < count; i++)
  52. {
  53. LZBFaceSignlePageView *pageView = self.scroollView.subviews[i];
  54. CGFloat pageViewW = self.scroollView.bounds.size.width;
  55. CGFloat pageViewH = self.scroollView.bounds.size.height;
  56. CGFloat pageViewY = 0;
  57. CGFloat pageViewX = pageViewW * i;
  58. pageView.frame = CGRectMake(pageViewX, pageViewY, pageViewW, pageViewH);
  59. }
  60. self.scroollView.contentSize = CGSizeMake(self.scroollView.bounds.size.width * count, 0);
  61. }
  62. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
  63. {
  64. double pageNo = scrollView.contentOffset.x / scrollView.bounds.size.width;
  65. self.pageControl.currentPage = (int)(pageNo + 0.5);
  66. }
  67. #pragma mark - handle
  68. - (void)setEmojiModles:(NSArray <LZBEmojiModel *>*)emojiModles selectEmojiModelBlock:(void(^)(LZBEmojiModel*selectModel))selectBlock deleteBlcok:(void(^)())deleteBlcok sendBlcok:(void(^)())sendBlock
  69. {
  70. self.emojiDidSendBlock = sendBlock;
  71. self.emojiDidDeleteBlock = deleteBlcok;
  72. self.emojiDidSelectBlock = selectBlock;
  73. self.emojiModles = emojiModles;
  74. }
  75. - (void)sendButtonClick
  76. {
  77. if(self.emojiDidSendBlock)
  78. self.emojiDidSendBlock();
  79. }
  80. - (void)animationEmojiBtnClick{
  81. if (self.animationEmojiBtnClickBlock != nil) {
  82. self.animationEmojiBtnClickBlock();
  83. }
  84. }
  85. - (void)setEmojiModles:(NSArray<LZBEmojiModel *> *)emojiModles
  86. {
  87. _emojiModles = emojiModles;
  88. [self.scroollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
  89. NSInteger pageCount = (emojiModles.count + LZBFaceSignlePageView_AllEmjoiCount - 1)/LZBFaceSignlePageView_AllEmjoiCount;
  90. self.pageControl.numberOfPages = pageCount;
  91. for (NSInteger i = 0; i < pageCount; i++)
  92. {
  93. LZBFaceSignlePageView *pageView = [[LZBFaceSignlePageView alloc]init];
  94. pageView.emojiDidDeleteBlock = self.emojiDidDeleteBlock;
  95. pageView.emojiDidSelectBlock = self.emojiDidSelectBlock;
  96. NSRange range;
  97. range.location = i * LZBFaceSignlePageView_AllEmjoiCount;
  98. NSInteger remainCount = emojiModles.count - range.location;
  99. if(remainCount >= LZBFaceSignlePageView_AllEmjoiCount)
  100. range.length = LZBFaceSignlePageView_AllEmjoiCount;
  101. else
  102. range.length = remainCount;
  103. pageView.emojiSignlePageModles = [emojiModles subarrayWithRange:range];
  104. [self.scroollView addSubview:pageView];
  105. }
  106. [self setNeedsLayout];
  107. }
  108. #pragma mark - lazy
  109. - (UIScrollView *)scroollView
  110. {
  111. if(_scroollView == nil)
  112. {
  113. _scroollView = [[UIScrollView alloc]init];
  114. _scroollView.pagingEnabled = YES;
  115. _scroollView.delegate = self;
  116. _scroollView.showsHorizontalScrollIndicator = NO;
  117. _scroollView.showsVerticalScrollIndicator = NO;
  118. }
  119. return _scroollView;
  120. }
  121. - (UIPageControl *)pageControl
  122. {
  123. if(_pageControl == nil)
  124. {
  125. _pageControl = [[UIPageControl alloc]init];
  126. _pageControl.hidesForSinglePage = YES;
  127. _pageControl.userInteractionEnabled = NO;
  128. _pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
  129. _pageControl.pageIndicatorTintColor = [[UIColor whiteColor] colorWithAlphaComponent:0.4f];
  130. }
  131. return _pageControl;
  132. }
  133. - (UIButton *)sendButton{
  134. if (_sendButton == nil) {
  135. _sendButton = [UIButton buttonWithType:UIButtonTypeCustom];
  136. [_sendButton setBackgroundImage:[LCTools ColorImage:CGSizeMake(62.0f, 33.0f) FromColors:@[HexColorFromRGB(0xFF0084),HexColorFromRGB(0xFF3A00)] ByGradientType:GradientLeftToRight] forState:UIControlStateNormal];
  137. _sendButton.layer.cornerRadius = 16.5f;
  138. _sendButton.clipsToBounds = YES;
  139. [_sendButton setTitle:@"发送" forState:UIControlStateNormal];
  140. [_sendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  141. _sendButton.titleLabel.font = LCFont(14.0f);
  142. [_sendButton addTarget:self action:@selector(sendButtonClick) forControlEvents:UIControlEventTouchUpInside];
  143. }
  144. return _sendButton;
  145. }
  146. - (UIButton *)chatEmojiBtn{
  147. if(!_chatEmojiBtn){
  148. _chatEmojiBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  149. [_chatEmojiBtn setTitle:@"聊天表情" forState:UIControlStateNormal];
  150. [_chatEmojiBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  151. _chatEmojiBtn.titleLabel.font = LCFont(12.0f);
  152. _chatEmojiBtn.userInteractionEnabled = NO;
  153. }
  154. return _chatEmojiBtn;
  155. }
  156. - (UIButton *)animationEmojiBtn{
  157. if(!_animationEmojiBtn){
  158. _animationEmojiBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  159. [_animationEmojiBtn setTitle:@"互动表情" forState:UIControlStateNormal];
  160. [_animationEmojiBtn setTitleColor:HexColorFromRGB(0x9F9DA5) forState:UIControlStateNormal];
  161. _animationEmojiBtn.titleLabel.font = LCFont(12.0f);
  162. _animationEmojiBtn.hidden = YES;
  163. [_animationEmojiBtn addTarget:self action:@selector(animationEmojiBtnClick) forControlEvents:UIControlEventTouchUpInside];
  164. }
  165. return _animationEmojiBtn;
  166. }
  167. - (void)setIsCurrentUserUpSeat:(BOOL)isCurrentUserUpSeat{
  168. _isCurrentUserUpSeat = isCurrentUserUpSeat;
  169. if (isCurrentUserUpSeat) {
  170. self.animationEmojiBtn.hidden = NO;
  171. }else{
  172. self.animationEmojiBtn.hidden = YES;
  173. }
  174. }
  175. @end