Commit 72fef683efb7002d8732e7efbfb8c1084fdc6f82
1 parent
a4a54f89
聊天室页面搭建
Showing
20 changed files
with
350 additions
and
94 deletions
LiveVideoCloud/LiveVideoCloud.xcodeproj/project.pbxproj
| @@ -158,6 +158,7 @@ | @@ -158,6 +158,7 @@ | ||
| 158 | D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB01E6EC05F003A77C8 /* TempViewController.m */; }; | 158 | D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB01E6EC05F003A77C8 /* TempViewController.m */; }; |
| 159 | D2888DB41E6EC154003A77C8 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB31E6EC154003A77C8 /* HomeViewController.m */; }; | 159 | D2888DB41E6EC154003A77C8 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB31E6EC154003A77C8 /* HomeViewController.m */; }; |
| 160 | D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */; }; | 160 | D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */; }; |
| 161 | + D2A803081E80BD6F009D6F1C /* TopToolView.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A803071E80BD6F009D6F1C /* TopToolView.m */; }; | ||
| 161 | /* End PBXBuildFile section */ | 162 | /* End PBXBuildFile section */ |
| 162 | 163 | ||
| 163 | /* Begin PBXContainerItemProxy section */ | 164 | /* Begin PBXContainerItemProxy section */ |
| @@ -508,6 +509,8 @@ | @@ -508,6 +509,8 @@ | ||
| 508 | D2888DB31E6EC154003A77C8 /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; }; | 509 | D2888DB31E6EC154003A77C8 /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; }; |
| 509 | D2888DB51E6EC1B8003A77C8 /* LVCMyViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCMyViewController.h; sourceTree = "<group>"; }; | 510 | D2888DB51E6EC1B8003A77C8 /* LVCMyViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCMyViewController.h; sourceTree = "<group>"; }; |
| 510 | D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMyViewController.m; sourceTree = "<group>"; }; | 511 | D2888DB61E6EC1B8003A77C8 /* LVCMyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCMyViewController.m; sourceTree = "<group>"; }; |
| 512 | + D2A803061E80BD6F009D6F1C /* TopToolView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopToolView.h; sourceTree = "<group>"; }; | ||
| 513 | + D2A803071E80BD6F009D6F1C /* TopToolView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopToolView.m; sourceTree = "<group>"; }; | ||
| 511 | /* End PBXFileReference section */ | 514 | /* End PBXFileReference section */ |
| 512 | 515 | ||
| 513 | /* Begin PBXFrameworksBuildPhase section */ | 516 | /* Begin PBXFrameworksBuildPhase section */ |
| @@ -1256,6 +1259,8 @@ | @@ -1256,6 +1259,8 @@ | ||
| 1256 | D22830F81E77C2A700627701 /* TopToolView */ = { | 1259 | D22830F81E77C2A700627701 /* TopToolView */ = { |
| 1257 | isa = PBXGroup; | 1260 | isa = PBXGroup; |
| 1258 | children = ( | 1261 | children = ( |
| 1262 | + D2A803061E80BD6F009D6F1C /* TopToolView.h */, | ||
| 1263 | + D2A803071E80BD6F009D6F1C /* TopToolView.m */, | ||
| 1259 | ); | 1264 | ); |
| 1260 | path = TopToolView; | 1265 | path = TopToolView; |
| 1261 | sourceTree = "<group>"; | 1266 | sourceTree = "<group>"; |
| @@ -1664,6 +1669,7 @@ | @@ -1664,6 +1669,7 @@ | ||
| 1664 | D2029CD01E6EADE10027CD92 /* SearchPresenter.m in Sources */, | 1669 | D2029CD01E6EADE10027CD92 /* SearchPresenter.m in Sources */, |
| 1665 | D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */, | 1670 | D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */, |
| 1666 | D2029CBE1E6EADE10027CD92 /* SDWebImagePrefetcher.m in Sources */, | 1671 | D2029CBE1E6EADE10027CD92 /* SDWebImagePrefetcher.m in Sources */, |
| 1672 | + D2A803081E80BD6F009D6F1C /* TopToolView.m in Sources */, | ||
| 1667 | 810B65011E779B1F00133E15 /* MASLayoutConstraint.m in Sources */, | 1673 | 810B65011E779B1F00133E15 /* MASLayoutConstraint.m in Sources */, |
| 1668 | D2029CCE1E6EADE10027CD92 /* SearchRecomListModel.m in Sources */, | 1674 | D2029CCE1E6EADE10027CD92 /* SearchRecomListModel.m in Sources */, |
| 1669 | D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */, | 1675 | D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */, |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/BottomToolView/BottomToolView.h
| @@ -16,7 +16,7 @@ typedef NS_ENUM(NSInteger, BtnClickType) {//底部按钮类型 | @@ -16,7 +16,7 @@ typedef NS_ENUM(NSInteger, BtnClickType) {//底部按钮类型 | ||
| 16 | 16 | ||
| 17 | @protocol bottomBtnDeledate <NSObject> | 17 | @protocol bottomBtnDeledate <NSObject> |
| 18 | 18 | ||
| 19 | -- (void)bottomActionWithType:(BtnClickType)btnType; | 19 | +- (void)bottomActionWithType:(BtnClickType)btnType button:(UIButton *)button; |
| 20 | 20 | ||
| 21 | @end | 21 | @end |
| 22 | @interface BottomToolView : BaseView | 22 | @interface BottomToolView : BaseView |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/BottomToolView/BottomToolView.m
| @@ -31,22 +31,22 @@ | @@ -31,22 +31,22 @@ | ||
| 31 | #pragma mark - buttonClick | 31 | #pragma mark - buttonClick |
| 32 | - (void)chatAction | 32 | - (void)chatAction |
| 33 | { | 33 | { |
| 34 | - if ([self.delegate respondsToSelector:@selector(bottomActionWithType:)]) { | ||
| 35 | - [self.delegate bottomActionWithType:BtnClickTypeChat]; | 34 | + if ([self.delegate respondsToSelector:@selector(bottomActionWithType:button:)]) { |
| 35 | + [self.delegate bottomActionWithType:BtnClickTypeChat button:self.chatBtn]; | ||
| 36 | } | 36 | } |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | - (void)privateChatAction | 39 | - (void)privateChatAction |
| 40 | { | 40 | { |
| 41 | - if ([self.delegate respondsToSelector:@selector(bottomActionWithType:)]) { | ||
| 42 | - [self.delegate bottomActionWithType:BtnClickTypePriChat]; | 41 | + if ([self.delegate respondsToSelector:@selector(bottomActionWithType:button:)]) { |
| 42 | + [self.delegate bottomActionWithType:BtnClickTypePriChat button:self.privateChatBtn]; | ||
| 43 | } | 43 | } |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | - (void)giftAction | 46 | - (void)giftAction |
| 47 | { | 47 | { |
| 48 | - if ([self.delegate respondsToSelector:@selector(bottomActionWithType:)]) { | ||
| 49 | - [self.delegate bottomActionWithType:BtnClickTypeGift]; | 48 | + if ([self.delegate respondsToSelector:@selector(bottomActionWithType:button:)]) { |
| 49 | + [self.delegate bottomActionWithType:BtnClickTypeGift button:self.giftBtn]; | ||
| 50 | } | 50 | } |
| 51 | } | 51 | } |
| 52 | 52 |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Chat/ChatMsgModel/chatMsgModel.h
| @@ -14,9 +14,11 @@ | @@ -14,9 +14,11 @@ | ||
| 14 | @property (nonatomic ,copy ) NSString * _Nullable name;//姓名 | 14 | @property (nonatomic ,copy ) NSString * _Nullable name;//姓名 |
| 15 | @property (nonatomic ,copy ) NSString * _Nullable content;//内容 | 15 | @property (nonatomic ,copy ) NSString * _Nullable content;//内容 |
| 16 | 16 | ||
| 17 | +@property (nonatomic ,assign) CGFloat level;//等级 | ||
| 17 | @property (nonatomic ,assign) CGFloat cellWidth;//内容宽度 | 18 | @property (nonatomic ,assign) CGFloat cellWidth;//内容宽度 |
| 18 | @property (nonatomic ,assign) CGFloat cellHeight;//内容高度 | 19 | @property (nonatomic ,assign) CGFloat cellHeight;//内容高度 |
| 19 | 20 | ||
| 20 | @property (nonatomic) BOOL isMine;//消息是否是自己发送 | 21 | @property (nonatomic) BOOL isMine;//消息是否是自己发送 |
| 22 | +@property (nonatomic ,copy) NSString * _Nullable ID;//唯一标识 | ||
| 21 | 23 | ||
| 22 | @end | 24 | @end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Chat/ChatMsgModel/chatMsgModel.m
| @@ -17,16 +17,16 @@ | @@ -17,16 +17,16 @@ | ||
| 17 | //如果计算过高度,直接返回 | 17 | //如果计算过高度,直接返回 |
| 18 | if (_cellHeight) return _cellHeight; | 18 | if (_cellHeight) return _cellHeight; |
| 19 | 19 | ||
| 20 | - //头像 | ||
| 21 | - _cellHeight = 40; | 20 | + _cellHeight = 0; |
| 21 | + NSString *content = [NSString stringWithFormat:@"%@:%@",self.name,self.content]; | ||
| 22 | //文字 | 22 | //文字 |
| 23 | - CGFloat textMaxW = self.cellWidth - 2 * ChatCellMargin; | 23 | + CGFloat textMaxW = self.cellWidth; |
| 24 | CGSize textMaxSize = CGSizeMake(textMaxW, MAXFLOAT); | 24 | CGSize textMaxSize = CGSizeMake(textMaxW, MAXFLOAT); |
| 25 | - CGSize textSize = [self.content boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:16]} context:nil].size; | 25 | + CGSize textSize = [content boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14]} context:nil].size; |
| 26 | 26 | ||
| 27 | //底部空隙 | 27 | //底部空隙 |
| 28 | _cellHeight += textSize.height + ChatCellMargin; | 28 | _cellHeight += textSize.height + ChatCellMargin; |
| 29 | - // NSLog(@"cellHeight = %f",_cellHeight); | 29 | + NSLog(@"cellHeight = %f",_cellHeight); |
| 30 | return _cellHeight; | 30 | return _cellHeight; |
| 31 | } | 31 | } |
| 32 | @end | 32 | @end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Chat/ChatViews/chatListCell.h
| @@ -8,8 +8,16 @@ | @@ -8,8 +8,16 @@ | ||
| 8 | 8 | ||
| 9 | #import "BaseTableViewCell.h" | 9 | #import "BaseTableViewCell.h" |
| 10 | @class chatMsgModel; | 10 | @class chatMsgModel; |
| 11 | + | ||
| 12 | +@protocol userClickDelegate <NSObject> | ||
| 13 | + | ||
| 14 | +- (void)userClickWithModel:(chatMsgModel *)model; | ||
| 15 | + | ||
| 16 | +@end | ||
| 17 | + | ||
| 11 | @interface chatListCell : BaseTableViewCell | 18 | @interface chatListCell : BaseTableViewCell |
| 12 | 19 | ||
| 13 | - (void)loadUIWithModel:(chatMsgModel *)model; | 20 | - (void)loadUIWithModel:(chatMsgModel *)model; |
| 14 | 21 | ||
| 22 | +@property (nonatomic ,strong) id <userClickDelegate> delegate; | ||
| 15 | @end | 23 | @end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Chat/ChatViews/chatListCell.m
| @@ -10,11 +10,8 @@ | @@ -10,11 +10,8 @@ | ||
| 10 | #import "chatMsgModel.h" | 10 | #import "chatMsgModel.h" |
| 11 | @interface chatListCell () | 11 | @interface chatListCell () |
| 12 | 12 | ||
| 13 | -@property (nonatomic ,strong) UIImageView * _Nullable iconImageView;//头像图片 | ||
| 14 | -@property (nonatomic ,strong) UILabel * _Nullable nameLabel;//名字 | 13 | +@property (nonatomic ,strong) UIImageView * _Nullable iconImageView;//等级图片 |
| 15 | @property (nonatomic ,strong) UILabel * _Nullable contentLabel;//内容 | 14 | @property (nonatomic ,strong) UILabel * _Nullable contentLabel;//内容 |
| 16 | -@property (nonatomic ,strong) UIImageView * _Nullable lineImageView;//分割线 | ||
| 17 | - | ||
| 18 | @property (nonatomic ,strong) chatMsgModel * _Nullable model; | 15 | @property (nonatomic ,strong) chatMsgModel * _Nullable model; |
| 19 | 16 | ||
| 20 | @end | 17 | @end |
| @@ -38,50 +35,54 @@ | @@ -38,50 +35,54 @@ | ||
| 38 | 35 | ||
| 39 | [self bindView];//更新cell高度后再初始化UI | 36 | [self bindView];//更新cell高度后再初始化UI |
| 40 | [self.iconImageView sd_setImageWithURL:[NSURL URLWithString:model.icon] placeholderImage:nil]; | 37 | [self.iconImageView sd_setImageWithURL:[NSURL URLWithString:model.icon] placeholderImage:nil]; |
| 41 | - // self.iconImageView.backgroundColor = [UIColor greenColor]; | ||
| 42 | - self.nameLabel.text = [NSString stringWithFormat:@"%@:",model.name]; | ||
| 43 | - CGSize labelSize = [self.nameLabel labelSize]; | ||
| 44 | - self.nameLabel.frame = CGRectMake(self.iconImageView.right + 10, self.iconImageView.top, labelSize.width, labelSize.height); | ||
| 45 | - self.nameLabel.centerY = self.iconImageView.centerY; | ||
| 46 | - self.contentLabel.text = model.content; | ||
| 47 | - CGSize contentLabelSize = [self.contentLabel labelSizeWithWidth:self.width - 2 * self.iconImageView.left]; | ||
| 48 | - self.contentLabel.frame = CGRectMake(self.iconImageView.left, self.iconImageView.bottom + 10, contentLabelSize.width, contentLabelSize.height); | 38 | + self.iconImageView.backgroundColor = ZXRandomColor; |
| 39 | + self.contentLabel.text = [NSString stringWithFormat:@"%@:%@",model.name,model.content]; | ||
| 40 | + CGSize contentLabelSize = [self.contentLabel labelSizeWithWidth:self.width - self.iconImageView.right - 4]; | ||
| 41 | + self.contentLabel.frame = CGRectMake(20, 0, contentLabelSize.width, contentLabelSize.height); | ||
| 42 | + self.contentLabel.centerY = self.height * 0.5; | ||
| 43 | + | ||
| 44 | + NSString *name = [NSString stringWithFormat:@"%@:",model.name]; | ||
| 45 | + NSString *content = model.content; | ||
| 46 | + // 创建NSMutableAttributedString | ||
| 47 | + NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:self.contentLabel.text]; | ||
| 48 | + // 设置文字颜色 | ||
| 49 | + [str addAttribute:NSForegroundColorAttributeName value:ZXRandomColor range:NSMakeRange(0, name.length)]; | ||
| 50 | + [str addAttribute:NSForegroundColorAttributeName value:[UIColor cyanColor] range:NSMakeRange(name.length, content.length)]; | ||
| 51 | + // 将配置好的NSMutableAttributedString传给attributedText属性 | ||
| 52 | + self.contentLabel.attributedText = str; | ||
| 49 | 53 | ||
| 50 | - self.lineImageView.frame = CGRectMake(self.iconImageView.left, self.contentLabel.bottom + 5, self.width - self.iconImageView.left * 2, 1); | 54 | + UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(detailInfo)]; |
| 55 | + [self.contentLabel addGestureRecognizer:gesture]; | ||
| 51 | } | 56 | } |
| 52 | 57 | ||
| 53 | - (void)bindView | 58 | - (void)bindView |
| 54 | { | 59 | { |
| 55 | - self.iconImageView.frame = CGRectMake(10, 10, 30, 30); | ||
| 56 | - self.nameLabel.frame = CGRectMake(self.iconImageView.right + 10, self.iconImageView.top, self.width - self.iconImageView.right - 20, 25); | ||
| 57 | - self.nameLabel.centerY = self.iconImageView.centerY; | ||
| 58 | - self.contentLabel.frame = CGRectMake(self.iconImageView.left, self.iconImageView.bottom + 10, self.width - 2 * self.iconImageView.left, 25); | 60 | + self.iconImageView.frame = CGRectMake(4, 0, 16, 10); |
| 61 | + self.contentLabel.frame = CGRectMake(self.iconImageView.right + 4, 0, self.width - 20, 25); | ||
| 62 | + self.contentLabel.centerY = self.height * 0.5; | ||
| 63 | + self.iconImageView.centerY = 13.353516; | ||
| 64 | +// NSLog(@"Y:%f",self.contentLabel.centerY);//13.353516 | ||
| 59 | } | 65 | } |
| 60 | 66 | ||
| 61 | -#pragma mark - getter | ||
| 62 | -- (UILabel * _Nullable)nameLabel | 67 | +- (void)detailInfo |
| 63 | { | 68 | { |
| 64 | - if (!_nameLabel) | ||
| 65 | - { | ||
| 66 | - _nameLabel = [[UILabel alloc] init]; | ||
| 67 | - _nameLabel.textAlignment = NSTextAlignmentLeft; | ||
| 68 | - _nameLabel.textColor = [UIColor redColor]; | ||
| 69 | - _nameLabel.font = [UIFont systemFontOfSize:15.f]; | ||
| 70 | - [self addSubview:_nameLabel]; | 69 | + if ([self.delegate respondsToSelector:@selector(userClickWithModel:)]) { |
| 70 | + [self.delegate userClickWithModel:self.model]; | ||
| 71 | } | 71 | } |
| 72 | - return _nameLabel; | ||
| 73 | } | 72 | } |
| 74 | 73 | ||
| 74 | +#pragma mark - getter | ||
| 75 | - (UILabel * _Nullable)contentLabel | 75 | - (UILabel * _Nullable)contentLabel |
| 76 | { | 76 | { |
| 77 | if (!_contentLabel) | 77 | if (!_contentLabel) |
| 78 | { | 78 | { |
| 79 | _contentLabel = [[UILabel alloc] init]; | 79 | _contentLabel = [[UILabel alloc] init]; |
| 80 | _contentLabel.textAlignment = NSTextAlignmentLeft; | 80 | _contentLabel.textAlignment = NSTextAlignmentLeft; |
| 81 | - _contentLabel.textColor = [UIColor lightGrayColor]; | 81 | + _contentLabel.textColor = [UIColor blackColor]; |
| 82 | _contentLabel.numberOfLines = 0; | 82 | _contentLabel.numberOfLines = 0; |
| 83 | - _contentLabel.font = [UIFont systemFontOfSize:12.f]; | 83 | + _contentLabel.font = [UIFont systemFontOfSize:14.f]; |
| 84 | [self addSubview:_contentLabel]; | 84 | [self addSubview:_contentLabel]; |
| 85 | + _contentLabel.userInteractionEnabled = YES; | ||
| 85 | } | 86 | } |
| 86 | return _contentLabel; | 87 | return _contentLabel; |
| 87 | } | 88 | } |
| @@ -98,18 +99,6 @@ | @@ -98,18 +99,6 @@ | ||
| 98 | return _iconImageView; | 99 | return _iconImageView; |
| 99 | } | 100 | } |
| 100 | 101 | ||
| 101 | -- (UIImageView * _Nullable)lineImageView | ||
| 102 | -{ | ||
| 103 | - if (!_lineImageView) | ||
| 104 | - { | ||
| 105 | - _lineImageView = [[UIImageView alloc] init]; | ||
| 106 | - _lineImageView.image = [UIImage imageNamed:@"分割线(聊天复用)"]; | ||
| 107 | - [self addSubview:_lineImageView]; | ||
| 108 | - } | ||
| 109 | - return _lineImageView; | ||
| 110 | -} | ||
| 111 | - | ||
| 112 | - | ||
| 113 | /* | 102 | /* |
| 114 | // Only override drawRect: if you perform custom drawing. | 103 | // Only override drawRect: if you perform custom drawing. |
| 115 | // An empty implementation adversely affects performance during animation. | 104 | // An empty implementation adversely affects performance during animation. |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Gift/GiftAnimOperation.m
| @@ -33,6 +33,11 @@ | @@ -33,6 +33,11 @@ | ||
| 33 | + (GiftAnimOperation *)addGiftAnimOperationWithGiftModel:(GiftModel *)model animContentView:(UIView *)animContentView{ | 33 | + (GiftAnimOperation *)addGiftAnimOperationWithGiftModel:(GiftModel *)model animContentView:(UIView *)animContentView{ |
| 34 | 34 | ||
| 35 | GiftAnimOperation *giftAnimOperation = [[GiftAnimOperation alloc]initWithGiftModel:model animContentView:animContentView]; | 35 | GiftAnimOperation *giftAnimOperation = [[GiftAnimOperation alloc]initWithGiftModel:model animContentView:animContentView]; |
| 36 | + | ||
| 37 | + if (model.giftStyle == GiftStyleFighter) { | ||
| 38 | + [[NSNotificationCenter defaultCenter] addObserver:giftAnimOperation selector:@selector(fighterAnimationDidStart) name:NSNotificationAnimationDidStart object:nil]; | ||
| 39 | + [[NSNotificationCenter defaultCenter] addObserver:giftAnimOperation selector:@selector(fighterAnimationDidStop) name:NSNotificationAnimationDidStop object:nil]; | ||
| 40 | + } | ||
| 36 | return giftAnimOperation; | 41 | return giftAnimOperation; |
| 37 | } | 42 | } |
| 38 | 43 | ||
| @@ -101,7 +106,6 @@ | @@ -101,7 +106,6 @@ | ||
| 101 | 106 | ||
| 102 | [self didChangeValueForKey:@"isFinished"]; | 107 | [self didChangeValueForKey:@"isFinished"]; |
| 103 | }]; | 108 | }]; |
| 104 | - | ||
| 105 | }); | 109 | }); |
| 106 | } | 110 | } |
| 107 | 111 | ||
| @@ -113,18 +117,23 @@ | @@ -113,18 +117,23 @@ | ||
| 113 | 117 | ||
| 114 | [self.giftFighterView addAnimationsMoveToPoint:CGPointMake(SCREEN_WIDTH, 60) endPoint:CGPointMake( -500, 600)]; | 118 | [self.giftFighterView addAnimationsMoveToPoint:CGPointMake(SCREEN_WIDTH, 60) endPoint:CGPointMake( -500, 600)]; |
| 115 | [self.animContentView addSubview:self.giftFighterView]; | 119 | [self.animContentView addSubview:self.giftFighterView]; |
| 116 | - | ||
| 117 | - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(12 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | ||
| 118 | - [self willChangeValueForKey:@"isFinished"]; | ||
| 119 | - | ||
| 120 | - _finished = YES; | ||
| 121 | - | ||
| 122 | - [self didChangeValueForKey:@"isFinished"]; | ||
| 123 | - | ||
| 124 | - }); | ||
| 125 | }); | 120 | }); |
| 126 | } | 121 | } |
| 127 | 122 | ||
| 123 | +- (void)fighterAnimationDidStart | ||
| 124 | +{ | ||
| 125 | + | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +- (void)fighterAnimationDidStop | ||
| 129 | +{ | ||
| 130 | + [self willChangeValueForKey:@"isFinished"]; | ||
| 131 | + | ||
| 132 | + _finished = YES; | ||
| 133 | + | ||
| 134 | + [self didChangeValueForKey:@"isFinished"]; | ||
| 135 | +} | ||
| 136 | + | ||
| 128 | - (void)planeAnimation | 137 | - (void)planeAnimation |
| 129 | { | 138 | { |
| 130 | weakself | 139 | weakself |
| @@ -142,7 +151,6 @@ | @@ -142,7 +151,6 @@ | ||
| 142 | 151 | ||
| 143 | [self didChangeValueForKey:@"isFinished"]; | 152 | [self didChangeValueForKey:@"isFinished"]; |
| 144 | }]; | 153 | }]; |
| 145 | - | ||
| 146 | }); | 154 | }); |
| 147 | } | 155 | } |
| 148 | 156 |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Gift/GiftAnimationAction.h
| @@ -8,6 +8,9 @@ | @@ -8,6 +8,9 @@ | ||
| 8 | 8 | ||
| 9 | #import <UIKit/UIKit.h> | 9 | #import <UIKit/UIKit.h> |
| 10 | 10 | ||
| 11 | +static NSString *NSNotificationAnimationDidStart = @"NSNotificationAnimationDidStart"; | ||
| 12 | + | ||
| 13 | +static NSString *NSNotificationAnimationDidStop = @"NSNotificationAnimationDidStop"; | ||
| 11 | /** | 14 | /** |
| 12 | 动画完成回调 | 15 | 动画完成回调 |
| 13 | */ | 16 | */ |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/Gift/GiftResource/NHFighterView+animDelegagte.m
| @@ -13,14 +13,12 @@ | @@ -13,14 +13,12 @@ | ||
| 13 | 13 | ||
| 14 | - (void)animationDidStart:(CAAnimation *)anim | 14 | - (void)animationDidStart:(CAAnimation *)anim |
| 15 | { | 15 | { |
| 16 | - NSLog(@"did start"); | 16 | + [[NSNotificationCenter defaultCenter] postNotificationName:NSNotificationAnimationDidStart object:nil]; |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag | 19 | - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag |
| 20 | { | 20 | { |
| 21 | -// _giftAnimationCompletion(); | ||
| 22 | - | ||
| 23 | - NSLog(@"did stop"); | 21 | + [[NSNotificationCenter defaultCenter] postNotificationName:NSNotificationAnimationDidStop object:nil]; |
| 24 | } | 22 | } |
| 25 | 23 | ||
| 26 | @end | 24 | @end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LVCAnimationManager.h
| @@ -32,4 +32,9 @@ | @@ -32,4 +32,9 @@ | ||
| 32 | @param speed 每s执行的次数 | 32 | @param speed 每s执行的次数 |
| 33 | */ | 33 | */ |
| 34 | - (void)bubblingWithCenterPoint:(CGPoint)centerPoint toView:(UIView *_Nonnull)toView speed:(CGFloat)speed; | 34 | - (void)bubblingWithCenterPoint:(CGPoint)centerPoint toView:(UIView *_Nonnull)toView speed:(CGFloat)speed; |
| 35 | + | ||
| 36 | +- (void)suspend; | ||
| 37 | + | ||
| 38 | +- (void)resume; | ||
| 39 | + | ||
| 35 | @end | 40 | @end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LVCAnimationManager.m
| @@ -81,4 +81,20 @@ static LVCAnimationManager * __singleton__; | @@ -81,4 +81,20 @@ static LVCAnimationManager * __singleton__; | ||
| 81 | [self.toView bubblingWithImage:[UIImage imageNamed:loveImageName] center:self.centerPoint]; | 81 | [self.toView bubblingWithImage:[UIImage imageNamed:loveImageName] center:self.centerPoint]; |
| 82 | [self.toView bubblingWithImages:__singleton__.images center:self.centerPoint]; | 82 | [self.toView bubblingWithImages:__singleton__.images center:self.centerPoint]; |
| 83 | } | 83 | } |
| 84 | + | ||
| 85 | +/** | ||
| 86 | + 暂停飘心 | ||
| 87 | + */ | ||
| 88 | +- (void)suspend | ||
| 89 | +{ | ||
| 90 | + [self.link setPaused:YES]; | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +/** | ||
| 94 | + 恢复飘心 | ||
| 95 | + */ | ||
| 96 | +- (void)resume | ||
| 97 | +{ | ||
| 98 | + [self.link setPaused:NO]; | ||
| 99 | +} | ||
| 84 | @end | 100 | @end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/LiveBaseView.m
| @@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
| 16 | #import "LVCAnimationManager.h" | 16 | #import "LVCAnimationManager.h" |
| 17 | #import "chatListCell.h" | 17 | #import "chatListCell.h" |
| 18 | #import "chatMsgModel.h" | 18 | #import "chatMsgModel.h" |
| 19 | +#import "TopToolView.h" | ||
| 19 | 20 | ||
| 20 | #define BottomToolHeight 60 | 21 | #define BottomToolHeight 60 |
| 21 | 22 | ||
| @@ -25,7 +26,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -25,7 +26,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 25 | PopTypePriMessage //私信弹窗 | 26 | PopTypePriMessage //私信弹窗 |
| 26 | }; | 27 | }; |
| 27 | 28 | ||
| 28 | -@interface LiveBaseView ()<bottomBtnDeledate,PresentViewDelegate,UIScrollViewDelegate,UITableViewDelegate,UITableViewDataSource> | 29 | +@interface LiveBaseView ()<bottomBtnDeledate,PresentViewDelegate,UIScrollViewDelegate,UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,userClickDelegate> |
| 29 | 30 | ||
| 30 | @property (nonatomic ,strong ) UIScrollView * _Nullable scrollView; | 31 | @property (nonatomic ,strong ) UIScrollView * _Nullable scrollView; |
| 31 | @property (nonatomic ,strong ,readwrite) UIView * _Nullable animationBaseView;//展示层View | 32 | @property (nonatomic ,strong ,readwrite) UIView * _Nullable animationBaseView;//展示层View |
| @@ -36,6 +37,11 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -36,6 +37,11 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 36 | @property (nonatomic ,assign ) PopType popType; | 37 | @property (nonatomic ,assign ) PopType popType; |
| 37 | @property (nonatomic ,strong) UITableView * _Nullable chatTableView; | 38 | @property (nonatomic ,strong) UITableView * _Nullable chatTableView; |
| 38 | @property (nonatomic ,strong) NSMutableArray * _Nullable chatMsgArray;//聊天消息数组 | 39 | @property (nonatomic ,strong) NSMutableArray * _Nullable chatMsgArray;//聊天消息数组 |
| 40 | +@property (nonatomic ,strong) TopToolView * _Nullable topToolsView; | ||
| 41 | +@property (nonatomic ,strong) UIView * _Nullable commentsView; | ||
| 42 | +@property (nonatomic ,strong) UITextField * _Nullable commentText; | ||
| 43 | +@property (nonatomic ,assign) CGFloat offsetHeight; | ||
| 44 | +@property (nonatomic ,strong) UISwitch * _Nullable barrageSwitch; | ||
| 39 | 45 | ||
| 40 | @end | 46 | @end |
| 41 | 47 | ||
| @@ -52,26 +58,105 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -52,26 +58,105 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 52 | [self addSubview:self.closeBtn]; | 58 | [self addSubview:self.closeBtn]; |
| 53 | [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureClick:)]]; | 59 | [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureClick:)]]; |
| 54 | [[LVCAnimationManager shareManager] bubblingWithCenterPoint:CGPointMake(SCREEN_WIDTH - 50, SCREEN_HEIGHT - 50) toView:self.animationBaseView speed:1]; | 60 | [[LVCAnimationManager shareManager] bubblingWithCenterPoint:CGPointMake(SCREEN_WIDTH - 50, SCREEN_HEIGHT - 50) toView:self.animationBaseView speed:1]; |
| 55 | -// ChatView *chatView = [[ChatView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT - 150, 200, 100)]; | ||
| 56 | -// chatView.backgroundColor = ZXRandomColor; | ||
| 57 | -// [self addSubview:chatView]; | 61 | + |
| 58 | [self.animationBaseView addSubview:self.chatTableView]; | 62 | [self.animationBaseView addSubview:self.chatTableView]; |
| 59 | - self.chatTableView.backgroundColor = ZXRandomColor; | ||
| 60 | - chatMsgModel *model = [[chatMsgModel alloc] init]; | ||
| 61 | - model.name = @"张旭"; | ||
| 62 | - [self.chatMsgArray addObject:model]; | 63 | + self.chatTableView.backgroundColor = [UIColor whiteColor]; |
| 64 | + self.chatTableView.alpha = 0.7; | ||
| 65 | + | ||
| 66 | + [self.animationBaseView addSubview:self.topToolsView]; | ||
| 67 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; | ||
| 68 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil]; | ||
| 63 | } | 69 | } |
| 64 | return self; | 70 | return self; |
| 65 | } | 71 | } |
| 66 | 72 | ||
| 67 | -#pragma mark - bottomBtnDelegate | ||
| 68 | -- (void)bottomActionWithType:(BtnClickType)btnType | 73 | +- (void)keyboardWillShow:(NSNotification *)notify { |
| 74 | + | ||
| 75 | + NSDictionary *userInfo = notify.userInfo; | ||
| 76 | + CGRect newFrameKeyboard = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];//变化前的frame | ||
| 77 | + [UIView animateWithDuration:0.25 animations:^{ | ||
| 78 | + self.animationBaseView.top = - newFrameKeyboard.size.height + self.bottomToolView.height; | ||
| 79 | + }]; | ||
| 80 | + self.bottomToolView.hidden = YES; | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +- (void)keyboardWillHidden:(NSNotification *)notify { | ||
| 84 | + | ||
| 85 | + [UIView animateWithDuration:0.1 animations:^{ | ||
| 86 | + self.animationBaseView.top = 0; | ||
| 87 | + [self.animationBaseView setNeedsDisplay]; | ||
| 88 | + }]; | ||
| 89 | + self.bottomToolView.hidden = NO; | ||
| 90 | +} | ||
| 91 | + | ||
| 92 | +#pragma mark - UITextFieldDelegate | ||
| 93 | +- (BOOL)textFieldShouldReturn:(UITextField *)textField | ||
| 94 | +{ | ||
| 95 | + if (![textField.text isEqualToString:@""]) { | ||
| 96 | + //send message | ||
| 97 | + NSLog(@"send message"); | ||
| 98 | + textField.text = @""; | ||
| 99 | + } | ||
| 100 | + [textField resignFirstResponder]; | ||
| 101 | + return YES; | ||
| 102 | +} | ||
| 103 | + | ||
| 104 | +- (void)createCommentsView { | ||
| 105 | + if (!_commentsView) { | ||
| 106 | + | ||
| 107 | + _commentsView = [[UIView alloc] initWithFrame:CGRectMake(0.0, SCREEN_HEIGHT - 340.0, SCREEN_WIDTH, 40.0)]; | ||
| 108 | + _commentsView.backgroundColor = [UIColor clearColor]; | ||
| 109 | + | ||
| 110 | + UIImageView *bgView = [[UIImageView alloc] initWithFrame:_commentsView.bounds]; | ||
| 111 | + bgView.image = [[UIImage imageNamed:@"textInputBgColor"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch]; | ||
| 112 | + bgView.alpha = 0.6; | ||
| 113 | + bgView.userInteractionEnabled = YES; | ||
| 114 | + [_commentsView addSubview:bgView]; | ||
| 115 | + | ||
| 116 | + _barrageSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, 10, 40, 30)]; | ||
| 117 | + _barrageSwitch.tintColor = [UIColor orangeColor]; | ||
| 118 | + _barrageSwitch.onTintColor = [UIColor orangeColor]; | ||
| 119 | + _barrageSwitch.thumbTintColor = [UIColor lightGrayColor]; | ||
| 120 | + _barrageSwitch.centerY = _commentsView.height * 0.5; | ||
| 121 | + [bgView addSubview:_barrageSwitch]; | ||
| 122 | + | ||
| 123 | + UIButton *sendBtn = [[UIButton alloc] initWithFrame:CGRectMake(_commentsView.width - 80, 0, 80, _commentsView.height)]; | ||
| 124 | + [sendBtn addTarget:self action:@selector(sendClick) forControlEvents:UIControlEventTouchUpInside]; | ||
| 125 | + [sendBtn setTitle:@"发送" forState:UIControlStateNormal]; | ||
| 126 | + [sendBtn setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal]; | ||
| 127 | + [bgView addSubview:sendBtn]; | ||
| 128 | + | ||
| 129 | + _commentText = [[UITextField alloc] initWithFrame:CGRectMake(_barrageSwitch.right + 20, 5, _commentsView.width - _barrageSwitch.right - 20 - 100, _commentsView.height - 10)]; | ||
| 130 | + _commentText.layer.borderColor = [UIColor blueColor].CGColor; | ||
| 131 | + _commentText.layer.borderWidth = 1.0; | ||
| 132 | + _commentText.layer.cornerRadius = 2.0; | ||
| 133 | + _commentText.layer.masksToBounds = YES; | ||
| 134 | + _commentText.inputAccessoryView = _commentsView; | ||
| 135 | + _commentText.backgroundColor = [UIColor clearColor]; | ||
| 136 | + _commentText.returnKeyType = UIReturnKeySend; | ||
| 137 | + _commentText.delegate = self; | ||
| 138 | + _commentText.font = [UIFont systemFontOfSize:15.0]; | ||
| 139 | + [bgView addSubview:_commentText]; | ||
| 140 | + } | ||
| 141 | + [[[UIApplication sharedApplication]keyWindow] addSubview:_commentsView];//添加到window上,在视图以外 | ||
| 142 | + [_commentText becomeFirstResponder]; | ||
| 143 | +} | ||
| 144 | + | ||
| 145 | +- (void)showCommentText { | ||
| 146 | + [self createCommentsView]; | ||
| 147 | + [_commentText becomeFirstResponder];//再次让textView成为第一响应者 | ||
| 148 | +} | ||
| 149 | + | ||
| 150 | +#pragma mark - bottomBtnActionDelegate | ||
| 151 | +- (void)bottomActionWithType:(BtnClickType)btnType button:(UIButton *)button | ||
| 69 | { | 152 | { |
| 70 | switch (btnType) { | 153 | switch (btnType) { |
| 71 | case BtnClickTypeChat: | 154 | case BtnClickTypeChat: |
| 72 | { | 155 | { |
| 73 | self.popType = PopTypeChat; | 156 | self.popType = PopTypeChat; |
| 74 | 157 | ||
| 158 | + [self showCommentText]; | ||
| 159 | + [[LVCAnimationManager shareManager] suspend]; | ||
| 75 | } | 160 | } |
| 76 | break; | 161 | break; |
| 77 | case BtnClickTypePriChat: | 162 | case BtnClickTypePriChat: |
| @@ -82,6 +167,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -82,6 +167,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 82 | case BtnClickTypeGift: | 167 | case BtnClickTypeGift: |
| 83 | { | 168 | { |
| 84 | self.popType = PopTypeGift; | 169 | self.popType = PopTypeGift; |
| 170 | + [[LVCAnimationManager shareManager] suspend]; | ||
| 85 | [self hiddenView:YES]; | 171 | [self hiddenView:YES]; |
| 86 | GiftListView *giftListView = [[GiftListView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT - 250, SCREEN_WIDTH, 250) liveBaseView:self]; | 172 | GiftListView *giftListView = [[GiftListView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT - 250, SCREEN_WIDTH, 250) liveBaseView:self]; |
| 87 | [self addSubview:giftListView]; | 173 | [self addSubview:giftListView]; |
| @@ -93,8 +179,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -93,8 +179,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 93 | giftBg.centerY = giftListView.height * 0.5; | 179 | giftBg.centerY = giftListView.height * 0.5; |
| 94 | giftBg.alpha = 0.4; | 180 | giftBg.alpha = 0.4; |
| 95 | [giftListView addSubview:giftBg]; | 181 | [giftListView addSubview:giftBg]; |
| 96 | - | ||
| 97 | - | ||
| 98 | } | 182 | } |
| 99 | break; | 183 | break; |
| 100 | default: | 184 | default: |
| @@ -109,6 +193,9 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -109,6 +193,9 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 109 | self.chatTableView.hidden = isHidden; | 193 | self.chatTableView.hidden = isHidden; |
| 110 | } | 194 | } |
| 111 | 195 | ||
| 196 | +/** | ||
| 197 | + 清除当前pop的弹窗 | ||
| 198 | + */ | ||
| 112 | - (void)clearCurrentPopView | 199 | - (void)clearCurrentPopView |
| 113 | { | 200 | { |
| 114 | switch (self.popType) { | 201 | switch (self.popType) { |
| @@ -118,6 +205,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -118,6 +205,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 118 | 205 | ||
| 119 | self.giftPopView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT); | 206 | self.giftPopView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT); |
| 120 | [self hiddenView:NO]; | 207 | [self hiddenView:NO]; |
| 208 | + [[LVCAnimationManager shareManager] resume]; | ||
| 121 | } completion:^(BOOL finished) { | 209 | } completion:^(BOOL finished) { |
| 122 | [self.giftPopView removeFromSuperview]; | 210 | [self.giftPopView removeFromSuperview]; |
| 123 | }]; | 211 | }]; |
| @@ -125,7 +213,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -125,7 +213,8 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 125 | break; | 213 | break; |
| 126 | case PopTypeChat: | 214 | case PopTypeChat: |
| 127 | { | 215 | { |
| 128 | - | 216 | + [self.commentText resignFirstResponder]; |
| 217 | + [[LVCAnimationManager shareManager] resume]; | ||
| 129 | } | 218 | } |
| 130 | break; | 219 | break; |
| 131 | case PopTypePriMessage: | 220 | case PopTypePriMessage: |
| @@ -136,8 +225,32 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -136,8 +225,32 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 136 | default: | 225 | default: |
| 137 | break; | 226 | break; |
| 138 | } | 227 | } |
| 139 | - | ||
| 140 | } | 228 | } |
| 229 | + | ||
| 230 | + | ||
| 231 | +#pragma mark - buttonClick | ||
| 232 | +- (void)tapGestureClick:(UITapGestureRecognizer *)gesture | ||
| 233 | +{ | ||
| 234 | + [[LVCAnimationManager shareManager] bubblingWithCenterPoint:CGPointMake(SCREEN_WIDTH - 50, SCREEN_HEIGHT - 50) toView:self.animationBaseView]; | ||
| 235 | + [self clearCurrentPopView]; | ||
| 236 | +} | ||
| 237 | + | ||
| 238 | +- (void)closeAction | ||
| 239 | +{ | ||
| 240 | + [self.viewController.navigationController popViewControllerAnimated:YES]; | ||
| 241 | +} | ||
| 242 | + | ||
| 243 | +- (void)sendClick | ||
| 244 | +{ | ||
| 245 | + [self textFieldShouldReturn:self.commentText]; | ||
| 246 | +} | ||
| 247 | + | ||
| 248 | +#pragma mark - userDetailDelegate | ||
| 249 | +- (void)userClickWithModel:(chatMsgModel *)model | ||
| 250 | +{ | ||
| 251 | + NSLog(@"点击人:%@",model.name); | ||
| 252 | +} | ||
| 253 | + | ||
| 141 | #pragma mark - 聊天消息列表 | 254 | #pragma mark - 聊天消息列表 |
| 142 | #pragma mark - UITableViewDataSource | 255 | #pragma mark - UITableViewDataSource |
| 143 | 256 | ||
| @@ -149,6 +262,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -149,6 +262,7 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 149 | -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath | 262 | -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
| 150 | { | 263 | { |
| 151 | chatListCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([chatListCell class]) forIndexPath:indexPath]; | 264 | chatListCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([chatListCell class]) forIndexPath:indexPath]; |
| 265 | + cell.delegate = self; | ||
| 152 | [cell loadUIWithModel:self.chatMsgArray[indexPath.row]]; | 266 | [cell loadUIWithModel:self.chatMsgArray[indexPath.row]]; |
| 153 | return cell; | 267 | return cell; |
| 154 | } | 268 | } |
| @@ -183,18 +297,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -183,18 +297,6 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 183 | NSLog(@"%@礼物的连送动画执行完成", model.giftName); | 297 | NSLog(@"%@礼物的连送动画执行完成", model.giftName); |
| 184 | } | 298 | } |
| 185 | 299 | ||
| 186 | -#pragma mark - buttonClick | ||
| 187 | -- (void)tapGestureClick:(UITapGestureRecognizer *)gesture | ||
| 188 | -{ | ||
| 189 | - [[LVCAnimationManager shareManager] bubblingWithCenterPoint:CGPointMake(SCREEN_WIDTH - 50, SCREEN_HEIGHT - 50) toView:self.animationBaseView]; | ||
| 190 | - [self clearCurrentPopView]; | ||
| 191 | -} | ||
| 192 | - | ||
| 193 | -- (void)closeAction | ||
| 194 | -{ | ||
| 195 | - [self.viewController.navigationController popViewControllerAnimated:YES]; | ||
| 196 | -} | ||
| 197 | - | ||
| 198 | #pragma mark - UIScrollViewDelegate | 300 | #pragma mark - UIScrollViewDelegate |
| 199 | - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView | 301 | - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView |
| 200 | { | 302 | { |
| @@ -247,6 +349,15 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -247,6 +349,15 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 247 | return _presentView; | 349 | return _presentView; |
| 248 | } | 350 | } |
| 249 | 351 | ||
| 352 | +- (UISwitch *)barrageSwitch | ||
| 353 | +{ | ||
| 354 | + if (!_barrageSwitch) | ||
| 355 | + { | ||
| 356 | + _barrageSwitch = [[UISwitch alloc] init]; | ||
| 357 | + } | ||
| 358 | + return _barrageSwitch; | ||
| 359 | +} | ||
| 360 | + | ||
| 250 | - (BottomToolView *)bottomToolView | 361 | - (BottomToolView *)bottomToolView |
| 251 | { | 362 | { |
| 252 | if (!_bottomToolView) | 363 | if (!_bottomToolView) |
| @@ -259,6 +370,15 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -259,6 +370,15 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 259 | return _bottomToolView; | 370 | return _bottomToolView; |
| 260 | } | 371 | } |
| 261 | 372 | ||
| 373 | +- (TopToolView *)topToolsView | ||
| 374 | +{ | ||
| 375 | + if (!_topToolsView) | ||
| 376 | + { | ||
| 377 | + _topToolsView = [[TopToolView alloc] initWithFrame:CGRectMake(10, 20, 150, 30)]; | ||
| 378 | + _topToolsView.backgroundColor = ZXRandomColor; | ||
| 379 | + } | ||
| 380 | + return _topToolsView; | ||
| 381 | +} | ||
| 262 | - (UITableView *)chatTableView | 382 | - (UITableView *)chatTableView |
| 263 | { | 383 | { |
| 264 | if (!_chatTableView) { | 384 | if (!_chatTableView) { |
| @@ -279,7 +399,17 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | @@ -279,7 +399,17 @@ typedef NS_ENUM(NSInteger, PopType) {//弹窗类型 | ||
| 279 | - (NSMutableArray *)chatMsgArray | 399 | - (NSMutableArray *)chatMsgArray |
| 280 | { | 400 | { |
| 281 | if (!_chatMsgArray) { | 401 | if (!_chatMsgArray) { |
| 402 | + | ||
| 282 | _chatMsgArray = [NSMutableArray array]; | 403 | _chatMsgArray = [NSMutableArray array]; |
| 404 | + NSArray *names = [NSArray arrayWithObjects:@"张旭",@"老大",@"老六",@"什么人",@"金光",@"银光",@"阳光", nil]; | ||
| 405 | + NSArray *contents = [NSArray arrayWithObjects:@"阿萨德请问发群里发",@"阿萨德请问发群里发发染发我if顽皮的发球局平均分配WiF",@"阿萨德请问发群里发发染发我if顽皮的发球局平均分配WiFi我if为打破我姐夫我批发价为破房间我批发价我批发价为 爱神的箭怕我的哦期",@"里发发染发我if顽",@"金光神的箭怕我的哦期间",@"银光",@"阳光神的箭怕我的哦期间", nil]; | ||
| 406 | + for (int i = 0 ; i < names.count; i ++) { | ||
| 407 | + chatMsgModel *model = [[chatMsgModel alloc] init]; | ||
| 408 | + model.name = names[i]; | ||
| 409 | + model.content = contents[i]; | ||
| 410 | + model.cellWidth = self.chatTableView.width - 20; | ||
| 411 | + [self.chatMsgArray addObject:model]; | ||
| 412 | + } | ||
| 283 | } | 413 | } |
| 284 | return _chatMsgArray; | 414 | return _chatMsgArray; |
| 285 | } | 415 | } |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/TopToolView/TopToolView.h
0 → 100644
| 1 | +// | ||
| 2 | +// TopToolView.h | ||
| 3 | +// LiveVideoCloud | ||
| 4 | +// | ||
| 5 | +// Created by 张旭 on 2017/3/21. | ||
| 6 | +// Copyright © 2017年 cnlive. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import <UIKit/UIKit.h> | ||
| 10 | + | ||
| 11 | +@interface TopToolView : UIView | ||
| 12 | + | ||
| 13 | +- (instancetype)initWithFrame:(CGRect)frame isHost:(BOOL)isHost; | ||
| 14 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/InteractionSections/TopToolView/TopToolView.m
0 → 100644
| 1 | +// | ||
| 2 | +// TopToolView.m | ||
| 3 | +// LiveVideoCloud | ||
| 4 | +// | ||
| 5 | +// Created by 张旭 on 2017/3/21. | ||
| 6 | +// Copyright © 2017年 cnlive. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "TopToolView.h" | ||
| 10 | + | ||
| 11 | +@implementation TopToolView | ||
| 12 | + | ||
| 13 | +- (instancetype)initWithFrame:(CGRect)frame isHost:(BOOL)isHost | ||
| 14 | +{ | ||
| 15 | + if (self = [super initWithFrame:frame]) { | ||
| 16 | + | ||
| 17 | + if (isHost) { | ||
| 18 | + //主播端没有自己头像 | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + }else | ||
| 22 | + {//观众端有主播头像 | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + return self; | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +/* | ||
| 31 | +// Only override drawRect: if you perform custom drawing. | ||
| 32 | +// An empty implementation adversely affects performance during animation. | ||
| 33 | +- (void)drawRect:(CGRect)rect { | ||
| 34 | + // Drawing code | ||
| 35 | +} | ||
| 36 | +*/ | ||
| 37 | + | ||
| 38 | +@end |
LiveVideoCloud/LiveVideoCloud/PrefixHeader.pch
| @@ -25,6 +25,7 @@ | @@ -25,6 +25,7 @@ | ||
| 25 | #import "AFNetworking.h" | 25 | #import "AFNetworking.h" |
| 26 | #import "Masonry.h" | 26 | #import "Masonry.h" |
| 27 | #import <CNLivePlayerSDK/CNLiveWebcastManager.h> | 27 | #import <CNLivePlayerSDK/CNLiveWebcastManager.h> |
| 28 | + #import <CNLiveMsgTools/CNLiveMsgManager.h> | ||
| 28 | 29 | ||
| 29 | #if TARGET_OS_IPHONE | 30 | #if TARGET_OS_IPHONE |
| 30 | 31 |
LiveVideoCloud/LiveVideoCloud/animation.xcassets/Interaction/Chat/Contents.json
0 → 100644
LiveVideoCloud/LiveVideoCloud/animation.xcassets/Interaction/Chat/textInputBgColor.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "filename" : "textInputBgColor.png", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 15 | + } | ||
| 16 | + ], | ||
| 17 | + "info" : { | ||
| 18 | + "version" : 1, | ||
| 19 | + "author" : "xcode" | ||
| 20 | + }, | ||
| 21 | + "properties" : { | ||
| 22 | + "template-rendering-intent" : "original" | ||
| 23 | + } | ||
| 24 | +} | ||
| 0 | \ No newline at end of file | 25 | \ No newline at end of file |
LiveVideoCloud/LiveVideoCloud/animation.xcassets/Interaction/Chat/textInputBgColor.imageset/textInputBgColor.png
0 → 100644
1014 Bytes
LiveVideoCloud/LiveVideoCloud/animation.xcassets/Interaction/Gift/fighter_small80.imageset/Contents.json
| @@ -4,6 +4,14 @@ | @@ -4,6 +4,14 @@ | ||
| 4 | "idiom" : "universal", | 4 | "idiom" : "universal", |
| 5 | "filename" : "fighter_small80.png", | 5 | "filename" : "fighter_small80.png", |
| 6 | "scale" : "1x" | 6 | "scale" : "1x" |
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "idiom" : "universal", | ||
| 14 | + "scale" : "3x" | ||
| 7 | } | 15 | } |
| 8 | ], | 16 | ], |
| 9 | "info" : { | 17 | "info" : { |