Commit 3c969894c61da03430820d4ad893ce130859dd82

Authored by 王军波
1 parent 4e70cf52

优化

CNLiveChatSDKDemo/CNLiveChatSDKDemo/Assets.xcassets/fanhui.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "idiom" : "universal",
  9 + "filename" : "fanhui.png",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "idiom" : "universal",
  14 + "scale" : "3x"
  15 + }
  16 + ],
  17 + "info" : {
  18 + "version" : 1,
  19 + "author" : "xcode"
  20 + }
  21 +}
0 22 \ No newline at end of file
... ...
CNLiveChatSDKDemo/CNLiveChatSDKDemo/Assets.xcassets/fanhui.imageset/fanhui.png 0 → 100644

1.57 KB

CNLiveChatSDKDemo/CNLiveChatSDKDemo/CNLiveVoiceTableViewCell.h
... ... @@ -10,6 +10,10 @@
10 10  
11 11 @interface CNLiveVoiceTableViewCell : UITableViewCell
12 12  
13   -@property (nonatomic, strong) MessageModel *model;
  13 +@property (nonatomic, strong) NSIndexPath *indexPath;
  14 +
  15 +@property (nonatomic, strong) UIButton *voicePlayBtn;
  16 +
  17 +@property (nonatomic, strong) UILabel *timeLabel;
14 18  
15 19 @end
... ...
CNLiveChatSDKDemo/CNLiveChatSDKDemo/CNLiveVoiceTableViewCell.m
... ... @@ -8,18 +8,7 @@
8 8  
9 9 #import "CNLiveVoiceTableViewCell.h"
10 10  
11   -@interface CNLiveVoiceTableViewCell()<AVAudioPlayerDelegate> {
12   -
13   - BOOL _isPlaying;
14   - NSTimer *_voiceTimer;
15   - long _voiceTime;
16   -}
17   -
18   -@property (nonatomic, strong) UIButton *voicePlayBtn;
19   -
20   -@property (nonatomic, strong) UILabel *timeLabel;
21   -
22   -@property (nonatomic, strong) AVAudioPlayer *player;
  11 +@interface CNLiveVoiceTableViewCell()
23 12  
24 13 @end
25 14  
... ... @@ -34,63 +23,12 @@
34 23 return self;
35 24 }
36 25  
37   -- (void)setModel:(MessageModel *)model {
38   - if (_model != model) {
39   - _model = model;
40   - }
41   - _voiceTime = model.duration;
42   -}
43   -
44   -- (void)timeCountDown {
45   -
46   - if (_voiceTime > 0) {
47   - _voiceTime = _voiceTime - 1;
48   - NSLog(@"%ld",_voiceTime);
49   - self.timeLabel.text = [NSString stringWithFormat:@"%ld s",_voiceTime];
50   - } else {
51   - [_player stop];
52   - _player = nil;
53   - _isPlaying = NO;
54   - [_voiceTimer invalidate];
55   - _voiceTimer = nil;
56   - [self.voicePlayBtn setImage:[UIImage imageNamed:@"语音播放"] forState:UIControlStateNormal];
57   - [self.timeLabel removeFromSuperview];
58   - _voiceTime = _model.duration;
59   - }
60   -}
61   -
62   -- (void)voicePlay {
63   -
64   - if (_isPlaying) {
65   - [_player stop];
66   - _player = nil;
67   - [self.voicePlayBtn setImage:[UIImage imageNamed:@"语音播放"] forState:UIControlStateNormal];
68   - } else {
69   - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
70   - NSError *error=nil;
71   - _player = [[AVAudioPlayer alloc] initWithData:_model.wavAudioData error:&error];
72   - _player.delegate = self;
73   - _player.numberOfLoops = 0;
74   - [_player prepareToPlay];
75   - if (error) {
76   - NSLog(@"初始化播放器过程发生错误,错误信息:%@",error.localizedDescription);
77   - }
78   - [_player play];
79   - [self.voicePlayBtn setImage:[UIImage imageNamed:@"语音播"] forState:UIControlStateNormal];
80   - [self.contentView addSubview:self.timeLabel];
81   - self.timeLabel.text = [NSString stringWithFormat:@"%ld s",_voiceTime];
82   - _voiceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeCountDown) userInfo:nil repeats:YES];
83   - }
84   - _isPlaying = !_isPlaying;
85   -}
86   -
87 26 - (UIButton *)voicePlayBtn {
88 27 if (!_voicePlayBtn) {
89 28 _voicePlayBtn = [UIButton buttonWithType:UIButtonTypeCustom];
90 29 [_voicePlayBtn setFrame:CGRectMake(10, 5, 100, 40)];
91 30 [_voicePlayBtn setImage:[UIImage imageNamed:@"语音播放"] forState:UIControlStateNormal];
92 31 _voicePlayBtn.backgroundColor = [UIColor lightGrayColor];
93   - [_voicePlayBtn addTarget:self action:@selector(voicePlay) forControlEvents:UIControlEventTouchUpInside];
94 32 }
95 33 return _voicePlayBtn;
96 34 }
... ...
CNLiveChatSDKDemo/CNLiveChatSDKDemo/ChatRoomViewController.m
... ... @@ -14,11 +14,15 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
14 14  
15 15 #define chatRoomId @"67_78734255"
16 16  
17   -@interface ChatRoomViewController ()<UITextFieldDelegate, CNLiveChatManagerDelegate, UITableViewDelegate, UITableViewDataSource> {
  17 +@interface ChatRoomViewController ()<UITextFieldDelegate, CNLiveChatManagerDelegate, UITableViewDelegate, UITableViewDataSource, AVAudioPlayerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
18 18  
19 19 NSMutableArray *_messageArrayM;
20 20 BOOL _isVoice;
21 21 NSTimer *_getCountTimer;
  22 + NSTimer *_voiceTimer;
  23 + BOOL _isPlaying;
  24 + long _voiceTime;
  25 + CNLiveVoiceTableViewCell *_preCell;
22 26 }
23 27  
24 28 @property (nonatomic, strong) UIView *textViewBackView;
... ... @@ -40,6 +44,8 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
40 44 @property (nonatomic, strong) NSData *recordedData; // 录音数据
41 45 @property (nonatomic, assign) NSTimeInterval duration; // 录音时长
42 46  
  47 +@property (nonatomic, strong) AVAudioPlayer *player;
  48 +
43 49 @end
44 50  
45 51 @implementation ChatRoomViewController
... ... @@ -49,6 +55,7 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
49 55  
50 56 self.view.backgroundColor = [UIColor whiteColor];
51 57 self.title = @"聊天室";
  58 + [self createBackButton];
52 59 [self addNotification];
53 60 self.automaticallyAdjustsScrollViewInsets = NO;
54 61  
... ... @@ -78,21 +85,35 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
78 85 _messageArrayM = [[NSMutableArray alloc] init];
79 86 }
80 87  
81   -- (void)viewWillDisappear:(BOOL)animated {
82   -
83   - [super viewWillDisappear:animated];
  88 +- (void)createBackButton {
  89 + self.navigationItem.hidesBackButton = YES;
  90 + UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
  91 + [button setImage:[[UIImage imageNamed:@"fanhui"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
  92 + [button addTarget:self action:@selector(quitChatRoom) forControlEvents:UIControlEventTouchUpInside];
  93 + UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:button];
  94 + UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
  95 + initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
  96 + target:nil action:nil];
  97 + negativeSpacer.width = -15;
  98 + self.navigationItem.leftBarButtonItems = @[negativeSpacer, backItem];
  99 +}
  100 +
  101 +- (void)quitChatRoom {
84 102  
85 103 [_getCountTimer invalidate];
86 104 _getCountTimer = nil;
  105 + [_voiceTimer invalidate];
  106 + _voiceTimer = nil;
87 107  
88 108 [[CNLiveChatManager sharedCNLiveChatManager] quitChatRoom:chatRoomId success:^(NSString *targetId) {
89 109 NSLog(@"退出聊天室:%@成功",targetId);
90 110 } error:^(CNLiveChatErrorCode errors, NSString *targetId) {
91 111 NSLog(@"退出聊天室:%@失败,错误码:%ld",targetId,(long)errors);
92 112 }];
  113 +
  114 + [self.navigationController popViewControllerAnimated:YES];
93 115 }
94 116  
95   -
96 117 #pragma mark - 获取聊天室人数
97 118 - (void)getChatRoomPersonCount {
98 119  
... ... @@ -138,7 +159,8 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
138 159 } else if (model.wavAudioData) { // 语音消息
139 160  
140 161 CNLiveVoiceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:voiceCellId forIndexPath:indexPath];
141   - cell.model = model;
  162 + [cell.voicePlayBtn addTarget:self action:@selector(voicePlay:) forControlEvents:UIControlEventTouchUpInside];
  163 + cell.indexPath = indexPath;
142 164 return cell;
143 165 } else if (model.wavAudioData || model.thumbnailImage) {
144 166  
... ... @@ -278,10 +300,44 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
278 300 }
279 301  
280 302 #pragma mark - 图片 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
281   -- (void)sendImage {
  303 +- (void)getImageFromIpc
  304 +{
  305 + // 1.判断相册是否可以打开
  306 + if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;
  307 + // 2. 创建图片选择控制器
  308 + UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
  309 + /**
  310 + typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
  311 + UIImagePickerControllerSourceTypePhotoLibrary, // 相册
  312 + UIImagePickerControllerSourceTypeCamera, // 用相机拍摄获取
  313 + UIImagePickerControllerSourceTypeSavedPhotosAlbum // 相簿
  314 + }
  315 + */
  316 + // 3. 设置打开照片相册类型(显示所有相簿)
  317 + ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  318 + // ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
  319 + // ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
282 320  
283   - NSString *path = [[NSBundle mainBundle] pathForResource:@"tu.jpg" ofType:nil];
284   - CNliveChatImageMessage *imageMsg = [CNliveChatImageMessage messageWithImageURI:path];
  321 + ipc.delegate = self;
  322 +
  323 + [self presentViewController:ipc animated:YES completion:nil];
  324 +}
  325 +
  326 +#pragma mark -- <UIImagePickerControllerDelegate>--
  327 +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { // 获取图片后的操作
  328 +
  329 + [picker dismissViewControllerAnimated:YES completion:nil];
  330 +
  331 + // 设置图片
  332 + UIImage *img = info[UIImagePickerControllerOriginalImage];
  333 + [self sendImage:img];
  334 +}
  335 +
  336 +- (void)sendImage:(UIImage *)image {
  337 +
  338 +// NSString *path = [[NSBundle mainBundle] pathForResource:@"tu.jpg" ofType:nil];
  339 +// CNliveChatImageMessage *imageMsg = [CNliveChatImageMessage messageWithImageURI:path];
  340 + CNliveChatImageMessage *imageMsg = [CNliveChatImageMessage messageWithImage:image];
285 341  
286 342 [[CNLiveChatManager sharedCNLiveChatManager] sendMediaMessage:CNLive_ConversationType_CHATROOM targetId:chatRoomId content:imageMsg progress:^(int progress, NSString *messageId) {
287 343 NSLog(@"发送进度");
... ... @@ -312,7 +368,7 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
312 368 }];
313 369 }
314 370  
315   -#pragma mark - 语音 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
  371 +#pragma mark - 语音 录音 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
316 372 - (void)voiceAction {
317 373  
318 374 _isVoice = !_isVoice;
... ... @@ -385,6 +441,73 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
385 441 }
386 442 }
387 443  
  444 +#pragma mark - 语音 播放 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
  445 +- (void)voicePlay:(UIButton *)button {
  446 +
  447 + if (_isPlaying) {
  448 + [_player stop];
  449 + _player = nil;
  450 + _isPlaying = NO;
  451 + [_voiceTimer invalidate];
  452 + _voiceTimer = nil;
  453 + [_preCell.voicePlayBtn setImage:[UIImage imageNamed:@"语音播放"] forState:UIControlStateNormal];
  454 + [_preCell.timeLabel removeFromSuperview];
  455 + CNLiveVoiceTableViewCell *cell = (CNLiveVoiceTableViewCell *)[[button superview] superview];
  456 + if (_preCell == cell) {
  457 + return;
  458 + } else {
  459 + [self voicePlayStart:button];
  460 + }
  461 + } else {
  462 + [self voicePlayStart:button];
  463 + }
  464 + _isPlaying = !_isPlaying;
  465 +}
  466 +
  467 +- (void)voicePlayStart:(UIButton *)button {
  468 +
  469 + CNLiveVoiceTableViewCell *cell = (CNLiveVoiceTableViewCell *)[[button superview] superview];
  470 + _preCell = cell;
  471 + [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
  472 + NSError *error=nil;
  473 + MessageModel *model = _messageArrayM[cell.indexPath.row];
  474 + _voiceTime = model.duration;
  475 + _player = [[AVAudioPlayer alloc] initWithData:model.wavAudioData error:&error];
  476 + _player.delegate = self;
  477 + _player.numberOfLoops = 0;
  478 + [_player prepareToPlay];
  479 + if (error) {
  480 + NSLog(@"初始化播放器过程发生错误,错误信息:%@",error.localizedDescription);
  481 + }
  482 + [_player play];
  483 + [cell.voicePlayBtn setImage:[UIImage imageNamed:@"语音播"] forState:UIControlStateNormal];
  484 + [cell.contentView addSubview:cell.timeLabel];
  485 + cell.timeLabel.text = [NSString stringWithFormat:@"%ld s",_voiceTime];
  486 + NSDictionary *dict = @{@"cell":cell,
  487 + @"model":model};
  488 + _voiceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeCountDown:) userInfo:dict repeats:YES];
  489 +}
  490 +
  491 +- (void)timeCountDown:(NSTimer *)timer {
  492 +
  493 + NSDictionary *dict = [timer userInfo];
  494 + CNLiveVoiceTableViewCell *cell = (CNLiveVoiceTableViewCell *)dict[@"cell"];
  495 + MessageModel *model = dict[@"model"];
  496 + if (_voiceTime > 0) {
  497 + _voiceTime = _voiceTime - 1;
  498 + cell.timeLabel.text = [NSString stringWithFormat:@"%ld s",_voiceTime];
  499 + } else {
  500 + [_player stop];
  501 + _player = nil;
  502 + _isPlaying = NO;
  503 + [_voiceTimer invalidate];
  504 + _voiceTimer = nil;
  505 + [cell.voicePlayBtn setImage:[UIImage imageNamed:@"语音播放"] forState:UIControlStateNormal];
  506 + [cell.timeLabel removeFromSuperview];
  507 + _voiceTime = model.duration;
  508 + }
  509 +}
  510 +
388 511 #pragma mark - Get Method !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
389 512 - (UIView *)textViewBackView {
390 513 if (!_textViewBackView) {
... ... @@ -432,7 +555,7 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
432 555 _imgButton = [UIButton buttonWithType:UIButtonTypeCustom];
433 556 _imgButton.frame = CGRectMake(KScreenWidth - 40, 5, 40, 40);
434 557 [_imgButton setImage:[UIImage imageNamed:@"加号"] forState:UIControlStateNormal];
435   - [_imgButton addTarget:self action:@selector(sendImage) forControlEvents:UIControlEventTouchUpInside];
  558 + [_imgButton addTarget:self action:@selector(getImageFromIpc) forControlEvents:UIControlEventTouchUpInside];
436 559 }
437 560 return _imgButton;
438 561 }
... ...
CNLiveChatSDKDemo/CNLiveChatSDKDemo/Info.plist
... ... @@ -2,6 +2,8 @@
2 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 3 <plist version="1.0">
4 4 <dict>
  5 + <key>NSPhotoLibraryUsageDescription</key>
  6 + <string>请求打开相册</string>
5 7 <key>CFBundleDevelopmentRegion</key>
6 8 <string>en</string>
7 9 <key>CFBundleExecutable</key>
... ... @@ -28,7 +30,7 @@
28 30 <key>NSCameraUsageDescription</key>
29 31 <string></string>
30 32 <key>NSMicrophoneUsageDescription</key>
31   - <string></string>
  33 + <string>请求打开话筒</string>
32 34 <key>UILaunchStoryboardName</key>
33 35 <string>LaunchScreen</string>
34 36 <key>UIMainStoryboardFile</key>
... ...
CNLiveChatSDKDemo/CNLiveChatSDKDemo/PrivateViewController.m
... ... @@ -14,11 +14,15 @@ static NSString *textCellId = @&quot;textCellId&quot;;
14 14 static NSString *voiceCellId = @"voiceCellId";
15 15 static NSString *imageCellId = @"imageCellId";
16 16  
17   -@interface PrivateViewController ()<UITextFieldDelegate, CNLiveChatManagerDelegate, UITableViewDelegate, UITableViewDataSource> {
  17 +@interface PrivateViewController ()<UITextFieldDelegate, CNLiveChatManagerDelegate, UITableViewDelegate, UITableViewDataSource, AVAudioPlayerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
18 18  
19 19 NSMutableArray *_messageArrayM;
20 20 BOOL _isVoice;
21 21 NSTimer *_getCountTimer;
  22 + NSTimer *_voiceTimer;
  23 + BOOL _isPlaying;
  24 + long _voiceTime;
  25 + CNLiveVoiceTableViewCell *_preCell;
22 26 }
23 27  
24 28 @property (nonatomic, strong) UIView *textViewBackView;
... ... @@ -38,6 +42,8 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
38 42 @property (nonatomic, strong) NSData *recordedData; // 录音数据
39 43 @property (nonatomic, assign) NSTimeInterval duration; // 录音时长
40 44  
  45 +@property (nonatomic, strong) AVAudioPlayer *player;
  46 +
41 47 @end
42 48  
43 49 @implementation PrivateViewController
... ... @@ -47,6 +53,7 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
47 53  
48 54 self.view.backgroundColor = [UIColor whiteColor];
49 55 self.title = @"单聊";
  56 + [self createBackButton];
50 57 [self addNotification];
51 58 self.automaticallyAdjustsScrollViewInsets = NO;
52 59  
... ... @@ -64,6 +71,27 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
64 71 [self getPrivateChattingRecords];
65 72 }
66 73  
  74 +- (void)createBackButton {
  75 + self.navigationItem.hidesBackButton = YES;
  76 + UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
  77 + [button setImage:[[UIImage imageNamed:@"fanhui"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
  78 + [button addTarget:self action:@selector(quitChatRoom) forControlEvents:UIControlEventTouchUpInside];
  79 + UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:button];
  80 + UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
  81 + initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
  82 + target:nil action:nil];
  83 + negativeSpacer.width = -15;
  84 + self.navigationItem.leftBarButtonItems = @[negativeSpacer, backItem];
  85 +}
  86 +
  87 +- (void)quitChatRoom {
  88 +
  89 + [_voiceTimer invalidate];
  90 + _voiceTimer = nil;
  91 +
  92 + [self.navigationController popViewControllerAnimated:YES];
  93 +}
  94 +
67 95 #pragma mark - 获取私聊最新历史聊天记录 !!!!!!!!!!!!!!!!!!!!!!!!!!!!
68 96 - (void)getPrivateChattingRecords {
69 97  
... ... @@ -153,7 +181,8 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
153 181 } else if (model.wavAudioData) { // 语音消息
154 182  
155 183 CNLiveVoiceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:voiceCellId forIndexPath:indexPath];
156   - cell.model = model;
  184 + [cell.voicePlayBtn addTarget:self action:@selector(voicePlay:) forControlEvents:UIControlEventTouchUpInside];
  185 + cell.indexPath = indexPath;
157 186 return cell;
158 187 } else if (model.wavAudioData || model.thumbnailImage) { // 图片消息
159 188  
... ... @@ -273,10 +302,44 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
273 302 }
274 303  
275 304 #pragma mark - 图片 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
276   -- (void)sendImage {
  305 +- (void)getImageFromIpc
  306 +{
  307 + // 1.判断相册是否可以打开
  308 + if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;
  309 + // 2. 创建图片选择控制器
  310 + UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
  311 + /**
  312 + typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
  313 + UIImagePickerControllerSourceTypePhotoLibrary, // 相册
  314 + UIImagePickerControllerSourceTypeCamera, // 用相机拍摄获取
  315 + UIImagePickerControllerSourceTypeSavedPhotosAlbum // 相簿
  316 + }
  317 + */
  318 + // 3. 设置打开照片相册类型(显示所有相簿)
  319 + ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  320 + // ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
  321 + // ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
  322 +
  323 + ipc.delegate = self;
  324 +
  325 + [self presentViewController:ipc animated:YES completion:nil];
  326 +}
  327 +
  328 +#pragma mark -- <UIImagePickerControllerDelegate>--
  329 +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { // 获取图片后的操作
  330 +
  331 + [picker dismissViewControllerAnimated:YES completion:nil];
  332 +
  333 + // 设置图片
  334 + UIImage *img = info[UIImagePickerControllerOriginalImage];
  335 + [self sendImage:img];
  336 +}
  337 +
  338 +- (void)sendImage:(UIImage *)image {
277 339  
278   - NSString *path = [[NSBundle mainBundle] pathForResource:@"tu.jpg" ofType:nil];
279   - CNliveChatImageMessage *imageMsg = [CNliveChatImageMessage messageWithImageURI:path];
  340 + // NSString *path = [[NSBundle mainBundle] pathForResource:@"tu.jpg" ofType:nil];
  341 + // CNliveChatImageMessage *imageMsg = [CNliveChatImageMessage messageWithImageURI:path];
  342 + CNliveChatImageMessage *imageMsg = [CNliveChatImageMessage messageWithImage:image];
280 343  
281 344 [[CNLiveChatManager sharedCNLiveChatManager] sendMediaMessage:CNLive_ConversationType_PRIVATE targetId:privateUserId content:imageMsg progress:^(int progress, NSString *messageId) {
282 345 NSLog(@"发送进度");
... ... @@ -307,7 +370,7 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
307 370 }];
308 371 }
309 372  
310   -#pragma mark - 语音 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
  373 +#pragma mark - 语音 录制 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
311 374 - (void)voiceAction {
312 375  
313 376 _isVoice = !_isVoice;
... ... @@ -380,6 +443,73 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
380 443 }
381 444 }
382 445  
  446 +#pragma mark - 语音 播放 Button Action !!!!!!!!!!!!!!!!!!!!!!!!
  447 +- (void)voicePlay:(UIButton *)button {
  448 +
  449 + if (_isPlaying) {
  450 + [_player stop];
  451 + _player = nil;
  452 + _isPlaying = NO;
  453 + [_voiceTimer invalidate];
  454 + _voiceTimer = nil;
  455 + [_preCell.voicePlayBtn setImage:[UIImage imageNamed:@"语音播放"] forState:UIControlStateNormal];
  456 + [_preCell.timeLabel removeFromSuperview];
  457 + CNLiveVoiceTableViewCell *cell = (CNLiveVoiceTableViewCell *)[[button superview] superview];
  458 + if (_preCell == cell) {
  459 + return;
  460 + } else {
  461 + [self voicePlayStart:button];
  462 + }
  463 + } else {
  464 + [self voicePlayStart:button];
  465 + }
  466 + _isPlaying = !_isPlaying;
  467 +}
  468 +
  469 +- (void)voicePlayStart:(UIButton *)button {
  470 +
  471 + CNLiveVoiceTableViewCell *cell = (CNLiveVoiceTableViewCell *)[[button superview] superview];
  472 + _preCell = cell;
  473 + [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
  474 + NSError *error=nil;
  475 + MessageModel *model = _messageArrayM[cell.indexPath.row];
  476 + _voiceTime = model.duration;
  477 + _player = [[AVAudioPlayer alloc] initWithData:model.wavAudioData error:&error];
  478 + _player.delegate = self;
  479 + _player.numberOfLoops = 0;
  480 + [_player prepareToPlay];
  481 + if (error) {
  482 + NSLog(@"初始化播放器过程发生错误,错误信息:%@",error.localizedDescription);
  483 + }
  484 + [_player play];
  485 + [cell.voicePlayBtn setImage:[UIImage imageNamed:@"语音播"] forState:UIControlStateNormal];
  486 + [cell.contentView addSubview:cell.timeLabel];
  487 + cell.timeLabel.text = [NSString stringWithFormat:@"%ld s",_voiceTime];
  488 + NSDictionary *dict = @{@"cell":cell,
  489 + @"model":model};
  490 + _voiceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeCountDown:) userInfo:dict repeats:YES];
  491 +}
  492 +
  493 +- (void)timeCountDown:(NSTimer *)timer {
  494 +
  495 + NSDictionary *dict = [timer userInfo];
  496 + CNLiveVoiceTableViewCell *cell = (CNLiveVoiceTableViewCell *)dict[@"cell"];
  497 + MessageModel *model = dict[@"model"];
  498 + if (_voiceTime > 0) {
  499 + _voiceTime = _voiceTime - 1;
  500 + cell.timeLabel.text = [NSString stringWithFormat:@"%ld s",_voiceTime];
  501 + } else {
  502 + [_player stop];
  503 + _player = nil;
  504 + _isPlaying = NO;
  505 + [_voiceTimer invalidate];
  506 + _voiceTimer = nil;
  507 + [cell.voicePlayBtn setImage:[UIImage imageNamed:@"语音播放"] forState:UIControlStateNormal];
  508 + [cell.timeLabel removeFromSuperview];
  509 + _voiceTime = model.duration;
  510 + }
  511 +}
  512 +
383 513 #pragma mark - Get Method !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
384 514 - (UIView *)textViewBackView {
385 515 if (!_textViewBackView) {
... ... @@ -419,7 +549,7 @@ static NSString *imageCellId = @&quot;imageCellId&quot;;
419 549 _imgButton = [UIButton buttonWithType:UIButtonTypeCustom];
420 550 _imgButton.frame = CGRectMake(KScreenWidth - 40, 5, 40, 40);
421 551 [_imgButton setImage:[UIImage imageNamed:@"加号"] forState:UIControlStateNormal];
422   - [_imgButton addTarget:self action:@selector(sendImage) forControlEvents:UIControlEventTouchUpInside];
  552 + [_imgButton addTarget:self action:@selector(getImageFromIpc) forControlEvents:UIControlEventTouchUpInside];
423 553 }
424 554 return _imgButton;
425 555 }
... ...