123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- //
- // NTESInputMoreContainerView.m
- // NIMDemo
- //
- // Created by chris.
- // Copyright (c) 2015年 Netease. All rights reserved.
- //
- #import "YOUPAINIMInputMoreContainerView.h"
- #import "NIMPageView.h"
- #import "NIMMediaItem.h"
- #import "UIView+NIM.h"
- #import "NIMKit.h"
- NSInteger NIMMaxItemCountInPage = 8;
- NSInteger NIMButtonItemWidth = 75;
- NSInteger NIMButtonItemHeight = 85;
- NSInteger NIMPageRowCount = 2;
- NSInteger NIMPageColumnCount = 4;
- NSInteger NIMButtonBegintLeftX = 11;
- @interface YOUPAINIMInputMoreContainerView() <NIMPageViewDataSource,NIMPageViewDelegate>
- {
- NSArray *_mediaButtons;
- NSArray *_mediaItems;
- }
- @property (nonatomic, strong) NIMPageView *pageView;
- @end
- @implementation YOUPAINIMInputMoreContainerView
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- _pageView = [[NIMPageView alloc] initWithFrame:CGRectZero];
- _pageView.dataSource = self;
- [self addSubview:_pageView];
- }
- return self;
- }
- - (void)setConfig:(id<NIMSessionConfig>)config
- {
- _config = config;
- [self genMediaButtons];
- [self.pageView reloadData];
- }
- - (CGSize)sizeThatFits:(CGSize)size
- {
- return CGSizeMake(size.width, 216.f);
- }
- - (void)genMediaButtons
- {
- NSMutableArray *mediaButtons = [NSMutableArray array];
- NSMutableArray *mediaItems = [NSMutableArray array];
- NSArray *items;
- if (!self.config)
- {
- items = [NIMKit sharedKit].config.defaultMediaItems;
- }
- else if([self.config respondsToSelector:@selector(mediaItems)])
- {
- items = [self.config mediaItems];
- }
- [items enumerateObjectsUsingBlock:^(NIMMediaItem *item, NSUInteger idx, BOOL *stop) {
- [mediaItems addObject:item];
-
- UIButton *btn = [[UIButton alloc] init];
- btn.tag = idx;
- [btn setImage:item.normalImage forState:UIControlStateNormal];
- [btn setImage:item.selectedImage forState:UIControlStateHighlighted];
- [btn setTitle:item.title forState:UIControlStateNormal];
- [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
- [btn setTitleEdgeInsets:UIEdgeInsetsMake(76, -75, 0, 0)];
- [btn.titleLabel setFont:[UIFont systemFontOfSize:14.0]];
- btn.titleLabel.textAlignment = NSTextAlignmentCenter;
- [mediaButtons addObject:btn];
- }];
- _mediaButtons = mediaButtons;
- _mediaItems = mediaItems;
- }
- - (void)setFrame:(CGRect)frame{
- CGFloat originalWidth = self.frame.size.width;
- [super setFrame:frame];
- if (originalWidth != frame.size.width)
- {
- self.pageView.frame = self.bounds;
- [self.pageView reloadData];
- }
- }
- - (void)dealloc
- {
- _pageView.dataSource = nil;
- }
- #pragma mark PageViewDataSource
- - (NSInteger)numberOfPages: (NIMPageView *)pageView
- {
- NSInteger count = [_mediaButtons count] / NIMMaxItemCountInPage;
- count = ([_mediaButtons count] % NIMMaxItemCountInPage == 0) ? count: count + 1;
- return MAX(count, 1);
- }
- - (UIView*)mediaPageView:(NIMPageView*)pageView beginItem:(NSInteger)begin endItem:(NSInteger)end
- {
- UIView *subView = [[UIView alloc] init];
- NSInteger span = (self.nim_width - NIMPageColumnCount * NIMButtonItemWidth) / (NIMPageColumnCount +1);
- CGFloat startY = NIMButtonBegintLeftX;
- NSInteger coloumnIndex = 0;
- NSInteger rowIndex = 0;
- NSInteger indexInPage = 0;
- for (NSInteger index = begin; index < end; index ++)
- {
- UIButton *button = [_mediaButtons objectAtIndex:index];
- [button addTarget:self action:@selector(onTouchButton:) forControlEvents:UIControlEventTouchUpInside];
- //计算位置
- rowIndex = indexInPage / NIMPageColumnCount;
- coloumnIndex= indexInPage % NIMPageColumnCount;
- CGFloat x = span + (NIMButtonItemWidth + span) * coloumnIndex;
- CGFloat y = 0.0;
- if (rowIndex > 0)
- {
- y = rowIndex * NIMButtonItemHeight + startY + 15;
- }
- else
- {
- y = rowIndex * NIMButtonItemHeight + startY;
- }
- [button setFrame:CGRectMake(x, y, NIMButtonItemWidth, NIMButtonItemHeight)];
- [subView addSubview:button];
- indexInPage ++;
- }
- return subView;
- }
- - (UIView*)oneLineMediaInPageView:(NIMPageView *)pageView
- viewInPage: (NSInteger)index
- count:(NSInteger)count
- {
- UIView *subView = [[UIView alloc] init];
- NSInteger span = (self.nim_width - count * NIMButtonItemWidth) / (count +1);
-
- for (NSInteger btnIndex = 0; btnIndex < count; btnIndex ++)
- {
- UIButton *button = [_mediaButtons objectAtIndex:btnIndex];
- [button addTarget:self action:@selector(onTouchButton:) forControlEvents:UIControlEventTouchUpInside];
- CGRect iconRect = CGRectMake(span + (NIMButtonItemWidth + span) * btnIndex, 58, NIMButtonItemWidth, NIMButtonItemHeight);
- [button setFrame:iconRect];
- [subView addSubview:button];
- }
- return subView;
- }
- - (UIView *)pageView: (NIMPageView *)pageView viewInPage: (NSInteger)index
- {
- if ([_mediaButtons count] == 2 || [_mediaButtons count] == 3) //一行显示2个或者3个
- {
- return [self oneLineMediaInPageView:pageView viewInPage:index count:[_mediaButtons count]];
- }
-
- if (index < 0)
- {
- assert(0);
- index = 0;
- }
- NSInteger begin = index * NIMMaxItemCountInPage;
- NSInteger end = (index + 1) * NIMMaxItemCountInPage;
- if (end > [_mediaButtons count])
- {
- end = [_mediaButtons count];
- }
- return [self mediaPageView:pageView beginItem:begin endItem:end];
- }
- #pragma mark - button actions
- - (void)onTouchButton:(id)sender
- {
- NSInteger index = [(UIButton *)sender tag];
- NIMMediaItem *item = _mediaItems[index];
- if (_actionDelegate && [_actionDelegate respondsToSelector:@selector(onTapMediaItem:)]) {
- BOOL handled = [_actionDelegate onTapMediaItem:item];
- if (!handled) {
- NSAssert(0, @"invalid item selector!");
- }
- }
-
- }
- @end
|