TradeInputContainer.m 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. //
  2. // TradeInputContainer.m
  3. // NIMKit
  4. //
  5. // Created by Fenix Wang on 2017/7/2.
  6. // Copyright © 2017年 NetEase. All rights reserved.
  7. //
  8. #import "TradeInputContainer.h"
  9. #import "NIMGrowingTextView.h"
  10. #import "UIView+NIM.h"
  11. #import <NIMSDK/NIMSDK.h>
  12. #import "NIMKitMediaFetcher.h"
  13. #import "SVProgressHUD.h"
  14. @interface TradeInputContainer()<NIMGrowingTextViewDelegate, UIScrollViewDelegate>
  15. @property (nonatomic, strong) UILabel *countLabel;
  16. @property (nonatomic, strong) UIButton *countBtn;
  17. @property (nonatomic, strong) UISlider *slider;
  18. @property (nonatomic, strong) UIView *textViewContainer;
  19. @property (nonatomic, strong) UIView *textViewBg;
  20. @property (nonatomic, strong) NIMGrowingTextView *growTextView;
  21. @property (nonatomic, strong) UIButton *sendBtn;
  22. @property (nonatomic, strong) UIScrollView *picContainer;
  23. @property (nonatomic, strong) UIButton *picAddBtn;
  24. @property (nonatomic, strong) NSMutableArray *picArr;
  25. @property (nonatomic, strong) NSMutableArray *imgViewArr;
  26. @property (nonatomic, strong) NSMutableArray *picDataArr;
  27. @property (nonatomic, assign) int picUploadIndex;
  28. @property (nonatomic, strong) NIMKitMediaFetcher *mediaFetcher;
  29. @end
  30. @implementation TradeInputContainer
  31. - (instancetype)initWithFrame:(CGRect)frame
  32. {
  33. if (self = [super initWithFrame:frame]) {
  34. [self loadUIComponents];
  35. }
  36. return self;
  37. }
  38. - (void)loadUIComponents{
  39. _layoutHold = NO;
  40. _imgViewArr = [[NSMutableArray alloc] init];
  41. UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.nim_width, self.nim_height)];
  42. btn.backgroundColor = UIColor.whiteColor;
  43. [btn setTitle:@"" forState:UIControlStateNormal];
  44. [self addSubview:btn];
  45. _countLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.nim_width - 150, 5, 100, 40)];
  46. _countLabel.textAlignment = NSTextAlignmentRight;
  47. [self addSubview:_countLabel];
  48. UIButton *countBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  49. countBtn.frame = CGRectMake(self.nim_width - 50, 5, 30, 30);
  50. [countBtn setImage:[UIImage imageNamed:@"箭头_下"] forState:UIControlStateNormal];
  51. [countBtn addTarget:self action:@selector(toggleSlider:) forControlEvents:UIControlEventTouchUpInside];
  52. [self addSubview:countBtn];
  53. _slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 40, self.nim_width-20, 40)];
  54. _slider.minimumValue = 1;
  55. _slider.maximumValue = 100;
  56. _slider.value = 1;
  57. [_slider addTarget:self
  58. action:@selector(sliderValueChanged)
  59. forControlEvents:UIControlEventValueChanged
  60. ];
  61. [self addSubview:_slider];
  62. _textViewContainer = [[UIView alloc] initWithFrame:CGRectMake(10, 80, self.nim_width-20, 40)];
  63. [self addSubview:_textViewContainer];
  64. _textViewBg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, _textViewContainer.nim_width-80, 40)];
  65. _textViewBg.layer.cornerRadius = 20;
  66. _textViewBg.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1];
  67. [_textViewContainer addSubview:_textViewBg];
  68. _growTextView = [[NIMGrowingTextView alloc] initWithFrame:CGRectMake(10, 0, _textViewContainer.nim_width-100, 40)];
  69. _growTextView.textViewDelegate = self;
  70. _growTextView.font = [UIFont systemFontOfSize:14.0f];
  71. _growTextView.maxNumberOfLines = 1;
  72. _growTextView.minNumberOfLines = 1;
  73. _growTextView.textColor = [UIColor blackColor];
  74. _growTextView.backgroundColor = [UIColor clearColor];
  75. _growTextView.returnKeyType = UIReturnKeyDone;
  76. [_textViewContainer addSubview:_growTextView];
  77. _sendBtn = [[UIButton alloc] initWithFrame:CGRectMake(_textViewContainer.nim_width-75, 0, 75, 40)];
  78. _sendBtn.layer.cornerRadius = 20;
  79. _sendBtn.backgroundColor = [UIColor colorWithRed:(255.0 / 255.0) green:(171.0 / 255.0) blue:(8.0 / 255.0) alpha:1.0];
  80. [_sendBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
  81. [_sendBtn setTitle:@"发送" forState:UIControlStateNormal];
  82. [_sendBtn addTarget:self action:@selector(onTouchPublish:) forControlEvents:UIControlEventTouchUpInside];
  83. [_textViewContainer addSubview:_sendBtn];
  84. _picContainer = [[UIScrollView alloc] initWithFrame:CGRectMake(10, self.nim_height-55, self.nim_width-20, 50)];
  85. [self addSubview:_picContainer];
  86. _picAddBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  87. _picAddBtn.frame = CGRectMake(_picContainer.nim_right+5, _picContainer.nim_top, 10, 10);
  88. [_picAddBtn setImage:[UIImage imageNamed:@"帮助与反馈_03"] forState:UIControlStateNormal];
  89. [_picAddBtn addTarget:self action:@selector(onTouchPicAdd:) forControlEvents:UIControlEventTouchUpInside];
  90. [self addSubview:_picAddBtn];
  91. }
  92. - (void)reset{
  93. _picArr = [[NSMutableArray alloc] init];
  94. _picDataArr = [[NSMutableArray alloc] init];
  95. _growTextView.text = @"";
  96. _slider.value = 1;
  97. [self sliderValueChanged];
  98. [self layoutPictures];
  99. }
  100. - (void)toggleSlider:(int)sender{
  101. _slider.hidden = !_slider.isHidden;
  102. }
  103. - (void)sliderValueChanged{
  104. _countLabel.text = [NSString stringWithFormat:@"x%.0f", roundf(_slider.value)];
  105. }
  106. - (void)didChangeHeight:(CGFloat)height
  107. {
  108. NSLog(@"height changed %f", height);
  109. _textViewBg.nim_height = height + 4;
  110. }
  111. - (BOOL)shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
  112. {
  113. if ([text isEqualToString:@"\n"]) {
  114. [_growTextView resignFirstResponder];
  115. return NO;
  116. }
  117. return YES;
  118. }
  119. - (void)layoutPictures
  120. {
  121. int maxCountPictures = 9;
  122. CGFloat picPadding = 2;
  123. float picSize = (self.nim_width - 20 - picPadding * (maxCountPictures - 1)) / maxCountPictures;
  124. CGFloat startX = 0;
  125. int count = (int)_picArr.count;
  126. int i = 0;
  127. for(i=0; i<count; i++){
  128. startX = i * (picSize + picPadding);
  129. UIImageView *imgView = nil;
  130. if(i >= _imgViewArr.count){
  131. imgView = [[UIImageView alloc] initWithFrame:CGRectMake(startX, 0, picSize, picSize)];
  132. [_picContainer addSubview:imgView];
  133. [_imgViewArr addObject:imgView];
  134. }
  135. else{
  136. imgView = [_imgViewArr objectAtIndex:i];
  137. imgView.nim_left = startX;
  138. }
  139. UIImage *img = [_picArr objectAtIndex:i];
  140. [imgView setImage:img];
  141. [imgView setHidden:NO];
  142. }
  143. if(i < _imgViewArr.count)
  144. {
  145. for(int j=i; j<_imgViewArr.count; j++)
  146. {
  147. [[_imgViewArr objectAtIndex:j] setHidden:YES];
  148. }
  149. }
  150. _picContainer.nim_width = _picArr.count * (picSize + picPadding);
  151. _picAddBtn.nim_left = _picContainer.nim_right + 5;
  152. _picAddBtn.nim_width = picSize;
  153. _picAddBtn.nim_height = picSize;
  154. if(count < maxCountPictures)
  155. {
  156. _picAddBtn.hidden = NO;
  157. }
  158. else
  159. {
  160. _picAddBtn.hidden = YES;
  161. }
  162. }
  163. - (void)onTouchPicAdd:(int)sender{
  164. [self showImagePicker:UIImagePickerControllerSourceTypePhotoLibrary];
  165. }
  166. - (NIMKitMediaFetcher *)mediaFetcher
  167. {
  168. if (!_mediaFetcher) {
  169. _mediaFetcher = [[NIMKitMediaFetcher alloc] init];
  170. }
  171. return _mediaFetcher;
  172. }
  173. - (void)showImagePicker:(UIImagePickerControllerSourceType)type{
  174. __weak typeof(self) weakSelf = self;
  175. _layoutHold = YES;
  176. [self.mediaFetcher fetchPhotoFromLibrary:^(NSArray *images, NSString *path, PHAssetMediaType type) {
  177. _layoutHold = NO;
  178. switch (type) {
  179. case PHAssetMediaTypeImage:
  180. {
  181. for (UIImage *image in images) {
  182. [weakSelf.picArr addObject:image];
  183. }
  184. [weakSelf layoutPictures];
  185. }
  186. break;
  187. case PHAssetMediaTypeVideo:
  188. {
  189. }
  190. break;
  191. default:
  192. return;
  193. }
  194. }];
  195. }
  196. - (void)onTouchPublish:(int)sender{
  197. if (self.delegate && [self.delegate respondsToSelector:@selector(sendTrade:picArr:priority:type:)]) {
  198. int count = (int)roundf(_slider.value);
  199. [self.delegate sendTrade:_growTextView.text picArr:_picArr priority:count type:self.tradeType];
  200. }
  201. }
  202. @end