123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- //
- // TradeInputContainer.m
- // NIMKit
- //
- // Created by Fenix Wang on 2017/7/2.
- // Copyright © 2017年 NetEase. All rights reserved.
- //
- #import "TradeInputContainer.h"
- #import "NIMGrowingTextView.h"
- #import "UIView+NIM.h"
- #import <NIMSDK/NIMSDK.h>
- #import "NIMKitMediaFetcher.h"
- #import "SVProgressHUD.h"
- @interface TradeInputContainer()<NIMGrowingTextViewDelegate, UIScrollViewDelegate>
- @property (nonatomic, strong) UILabel *countLabel;
- @property (nonatomic, strong) UIButton *countBtn;
- @property (nonatomic, strong) UISlider *slider;
- @property (nonatomic, strong) UIView *textViewContainer;
- @property (nonatomic, strong) UIView *textViewBg;
- @property (nonatomic, strong) NIMGrowingTextView *growTextView;
- @property (nonatomic, strong) UIButton *sendBtn;
- @property (nonatomic, strong) UIScrollView *picContainer;
- @property (nonatomic, strong) UIButton *picAddBtn;
- @property (nonatomic, strong) NSMutableArray *picArr;
- @property (nonatomic, strong) NSMutableArray *imgViewArr;
- @property (nonatomic, strong) NSMutableArray *picDataArr;
- @property (nonatomic, assign) int picUploadIndex;
- @property (nonatomic, strong) NIMKitMediaFetcher *mediaFetcher;
- @end
- @implementation TradeInputContainer
- - (instancetype)initWithFrame:(CGRect)frame
- {
- if (self = [super initWithFrame:frame]) {
- [self loadUIComponents];
- }
- return self;
- }
- - (void)loadUIComponents{
-
- _layoutHold = NO;
- _imgViewArr = [[NSMutableArray alloc] init];
-
- UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.nim_width, self.nim_height)];
- btn.backgroundColor = UIColor.whiteColor;
- [btn setTitle:@"" forState:UIControlStateNormal];
- [self addSubview:btn];
-
- _countLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.nim_width - 150, 5, 100, 40)];
- _countLabel.textAlignment = NSTextAlignmentRight;
- [self addSubview:_countLabel];
-
- UIButton *countBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- countBtn.frame = CGRectMake(self.nim_width - 50, 5, 30, 30);
- [countBtn setImage:[UIImage imageNamed:@"箭头_下"] forState:UIControlStateNormal];
- [countBtn addTarget:self action:@selector(toggleSlider:) forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:countBtn];
-
- _slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 40, self.nim_width-20, 40)];
- _slider.minimumValue = 1;
- _slider.maximumValue = 100;
- _slider.value = 1;
- [_slider addTarget:self
- action:@selector(sliderValueChanged)
- forControlEvents:UIControlEventValueChanged
- ];
- [self addSubview:_slider];
-
-
- _textViewContainer = [[UIView alloc] initWithFrame:CGRectMake(10, 80, self.nim_width-20, 40)];
- [self addSubview:_textViewContainer];
-
- _textViewBg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, _textViewContainer.nim_width-80, 40)];
- _textViewBg.layer.cornerRadius = 20;
- _textViewBg.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1];
- [_textViewContainer addSubview:_textViewBg];
-
- _growTextView = [[NIMGrowingTextView alloc] initWithFrame:CGRectMake(10, 0, _textViewContainer.nim_width-100, 40)];
- _growTextView.textViewDelegate = self;
- _growTextView.font = [UIFont systemFontOfSize:14.0f];
- _growTextView.maxNumberOfLines = 1;
- _growTextView.minNumberOfLines = 1;
- _growTextView.textColor = [UIColor blackColor];
- _growTextView.backgroundColor = [UIColor clearColor];
- _growTextView.returnKeyType = UIReturnKeyDone;
- [_textViewContainer addSubview:_growTextView];
-
- _sendBtn = [[UIButton alloc] initWithFrame:CGRectMake(_textViewContainer.nim_width-75, 0, 75, 40)];
- _sendBtn.layer.cornerRadius = 20;
- _sendBtn.backgroundColor = [UIColor colorWithRed:(255.0 / 255.0) green:(171.0 / 255.0) blue:(8.0 / 255.0) alpha:1.0];
- [_sendBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
- [_sendBtn setTitle:@"发送" forState:UIControlStateNormal];
- [_sendBtn addTarget:self action:@selector(onTouchPublish:) forControlEvents:UIControlEventTouchUpInside];
- [_textViewContainer addSubview:_sendBtn];
-
- _picContainer = [[UIScrollView alloc] initWithFrame:CGRectMake(10, self.nim_height-55, self.nim_width-20, 50)];
- [self addSubview:_picContainer];
-
- _picAddBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- _picAddBtn.frame = CGRectMake(_picContainer.nim_right+5, _picContainer.nim_top, 10, 10);
- [_picAddBtn setImage:[UIImage imageNamed:@"帮助与反馈_03"] forState:UIControlStateNormal];
- [_picAddBtn addTarget:self action:@selector(onTouchPicAdd:) forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:_picAddBtn];
- }
- - (void)reset{
- _picArr = [[NSMutableArray alloc] init];
- _picDataArr = [[NSMutableArray alloc] init];
- _growTextView.text = @"";
- _slider.value = 1;
- [self sliderValueChanged];
-
- [self layoutPictures];
- }
- - (void)toggleSlider:(int)sender{
- _slider.hidden = !_slider.isHidden;
- }
- - (void)sliderValueChanged{
- _countLabel.text = [NSString stringWithFormat:@"x%.0f", roundf(_slider.value)];
- }
- - (void)didChangeHeight:(CGFloat)height
- {
- NSLog(@"height changed %f", height);
- _textViewBg.nim_height = height + 4;
- }
- - (BOOL)shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
- {
- if ([text isEqualToString:@"\n"]) {
- [_growTextView resignFirstResponder];
- return NO;
- }
- return YES;
- }
- - (void)layoutPictures
- {
- int maxCountPictures = 9;
- CGFloat picPadding = 2;
- float picSize = (self.nim_width - 20 - picPadding * (maxCountPictures - 1)) / maxCountPictures;
-
- CGFloat startX = 0;
-
- int count = (int)_picArr.count;
- int i = 0;
- for(i=0; i<count; i++){
- startX = i * (picSize + picPadding);
-
- UIImageView *imgView = nil;
- if(i >= _imgViewArr.count){
- imgView = [[UIImageView alloc] initWithFrame:CGRectMake(startX, 0, picSize, picSize)];
- [_picContainer addSubview:imgView];
- [_imgViewArr addObject:imgView];
- }
- else{
- imgView = [_imgViewArr objectAtIndex:i];
- imgView.nim_left = startX;
- }
-
- UIImage *img = [_picArr objectAtIndex:i];
- [imgView setImage:img];
- [imgView setHidden:NO];
- }
-
- if(i < _imgViewArr.count)
- {
- for(int j=i; j<_imgViewArr.count; j++)
- {
- [[_imgViewArr objectAtIndex:j] setHidden:YES];
- }
- }
-
- _picContainer.nim_width = _picArr.count * (picSize + picPadding);
- _picAddBtn.nim_left = _picContainer.nim_right + 5;
- _picAddBtn.nim_width = picSize;
- _picAddBtn.nim_height = picSize;
-
- if(count < maxCountPictures)
- {
- _picAddBtn.hidden = NO;
- }
- else
- {
- _picAddBtn.hidden = YES;
- }
- }
- - (void)onTouchPicAdd:(int)sender{
- [self showImagePicker:UIImagePickerControllerSourceTypePhotoLibrary];
- }
- - (NIMKitMediaFetcher *)mediaFetcher
- {
- if (!_mediaFetcher) {
- _mediaFetcher = [[NIMKitMediaFetcher alloc] init];
- }
- return _mediaFetcher;
- }
- - (void)showImagePicker:(UIImagePickerControllerSourceType)type{
-
- __weak typeof(self) weakSelf = self;
- _layoutHold = YES;
- [self.mediaFetcher fetchPhotoFromLibrary:^(NSArray *images, NSString *path, PHAssetMediaType type) {
-
- _layoutHold = NO;
-
- switch (type) {
- case PHAssetMediaTypeImage:
- {
- for (UIImage *image in images) {
- [weakSelf.picArr addObject:image];
- }
- [weakSelf layoutPictures];
- }
- break;
- case PHAssetMediaTypeVideo:
- {
- }
- break;
- default:
- return;
- }
-
- }];
- }
- - (void)onTouchPublish:(int)sender{
-
- if (self.delegate && [self.delegate respondsToSelector:@selector(sendTrade:picArr:priority:type:)]) {
-
- int count = (int)roundf(_slider.value);
- [self.delegate sendTrade:_growTextView.text picArr:_picArr priority:count type:self.tradeType];
-
- }
- }
- @end
|