TUIFaceSegementScrollView.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //
  2. // TUIFaceSegementScrollView.m
  3. // TUIEmojiPlugin
  4. //
  5. // Created by wyl on 2023/11/15.
  6. // Copyright © 2023 Tencent. All rights reserved.
  7. //
  8. #import "TUIFaceSegementScrollView.h"
  9. #import <TIMCommon/TIMDefine.h>
  10. #import <TIMCommon/TUIFitButton.h>
  11. #import <TUICore/TUIThemeManager.h>
  12. #import <TIMCommon/TIMCommonMediator.h>
  13. #import <TIMCommon/TUIEmojiMeditorProtocol.h>
  14. @interface TUIFaceSegementScrollView () <UIScrollViewDelegate>
  15. @property(nonatomic, strong) NSArray<TUIFaceGroup *> *items;
  16. @property(nonatomic, strong) NSMutableArray<TUIFaceVerticalView*> * viewArray;
  17. @end
  18. @implementation TUIFaceSegementScrollView
  19. - (void)setItems:(NSArray<TUIFaceGroup *> *)items delegate:(id <TUIFaceViewDelegate>) delegate {
  20. _items = items;
  21. for (UIView *view in self.pageScrollView.subviews) {
  22. if (view) {
  23. [view removeFromSuperview];
  24. }
  25. }
  26. [self.viewArray removeAllObjects];
  27. for (int i = 0; i < items.count; i++) {
  28. TUIFaceVerticalView* faceView = [[TUIFaceVerticalView alloc] initWithFrame:CGRectMake(0,
  29. 0, self.frame.size.width, self.pageScrollView.frame.size.height)];
  30. TUIFaceGroup *indexGroup = items[i];
  31. if (indexGroup.recentGroup) {
  32. [faceView setData:[NSMutableArray arrayWithArray:@[indexGroup.recentGroup,indexGroup]]];
  33. }
  34. else {
  35. [faceView setData:[NSMutableArray arrayWithArray:@[indexGroup]]];
  36. }
  37. faceView.frame = CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.pageScrollView.frame.size.height);
  38. faceView.delegate = delegate;
  39. [self.pageScrollView addSubview:faceView];
  40. [self.viewArray addObject:faceView];
  41. }
  42. self.pageScrollView.contentSize = CGSizeMake(self.viewArray.count * self.frame.size.width, self.pageScrollView.frame.size.height);
  43. if (isRTL()) {
  44. _pageScrollView.transform = CGAffineTransformMakeRotation(M_PI);
  45. NSArray *subViews = _pageScrollView.subviews;
  46. for (UIView *subView in subViews) {
  47. subView.transform = CGAffineTransformMakeRotation(M_PI);
  48. }
  49. }
  50. }
  51. - (void)updateContainerView {
  52. self.pageScrollView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
  53. for (int i = 0; i < self.viewArray.count; i++) {
  54. TUIFaceVerticalView* view = self.viewArray[i];
  55. view.frame = CGRectMake(i * self.pageScrollView.frame.size.width, 0, self.pageScrollView.frame.size.width, self.pageScrollView.frame.size.height);
  56. }
  57. self.pageScrollView.contentSize = CGSizeMake(self.viewArray.count * self.frame.size.width, self.pageScrollView.frame.size.height);
  58. }
  59. - (UIScrollView *)pageScrollView {
  60. if (_pageScrollView == nil) {
  61. _pageScrollView = [[UIScrollView alloc]
  62. initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
  63. _pageScrollView.backgroundColor = [UIColor clearColor];
  64. _pageScrollView.delegate = self;
  65. _pageScrollView.showsVerticalScrollIndicator = NO;
  66. _pageScrollView.showsHorizontalScrollIndicator = NO;
  67. _pageScrollView.bounces = NO;
  68. _pageScrollView.scrollsToTop = NO;
  69. _pageScrollView.pagingEnabled = YES;
  70. [self addSubview:_pageScrollView];
  71. }
  72. return _pageScrollView;
  73. }
  74. - (NSMutableArray<TUIFaceVerticalView *> *)viewArray {
  75. if(!_viewArray) {
  76. _viewArray = [NSMutableArray arrayWithCapacity:3];
  77. }
  78. return _viewArray;
  79. }
  80. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  81. if (scrollView == _pageScrollView) {
  82. int p = _pageScrollView.contentOffset.x / self.frame.size.width;
  83. if (self.onScrollCallback){
  84. self.onScrollCallback(p);
  85. }
  86. }
  87. }
  88. - (void)setPageIndex:(NSInteger)index {
  89. CGPoint p = CGPointMake(_pageScrollView.frame.size.width * index,0);
  90. [_pageScrollView setContentOffset:p animated:NO];
  91. }
  92. - (void)setAllFloatCtrlViewAllowSendSwitch:(BOOL)isAllow {
  93. for (TUIFaceVerticalView *view in self.viewArray) {
  94. [view setFloatCtrlViewAllowSendSwitch:isAllow];
  95. }
  96. }
  97. - (void)updateRecentView {
  98. id<TUIEmojiMeditorProtocol> service = [[TIMCommonMediator share] getObject:@protocol(TUIEmojiMeditorProtocol)];
  99. TUIFaceVerticalView* faceView = self.viewArray[0];
  100. TUIFaceGroup *indexGroup = self.items[0];
  101. indexGroup.recentGroup = [service getChatPopMenuRecentQueue];
  102. indexGroup.recentGroup.rowCount = 1;
  103. indexGroup.recentGroup.itemCountPerRow = 8;
  104. indexGroup.recentGroup.groupName = TIMCommonLocalizableString(TUIChatFaceGroupRecentEmojiName);
  105. if (indexGroup.isNeedAddInInputBar && indexGroup.recentGroup) {
  106. [faceView setData:[NSMutableArray arrayWithArray:@[indexGroup.recentGroup,indexGroup]]];
  107. }
  108. else {
  109. [faceView setData:[NSMutableArray arrayWithArray:@[indexGroup]]];
  110. }
  111. }
  112. @end