美文网首页iOS学习资料
ios聊天界面SSChat(OC版)

ios聊天界面SSChat(OC版)

作者: 索德罗斯 | 来源:发表于2018-11-21 14:29 被阅读1129次

    代码地址:https://github.com/Soldoros/SSChat (帮我打星,谢谢啦)

    SSChat参考目前比较主流的聊天系统做的布局,整体功能是比较通用的。每个模块都支持高度自定义,包括聊天气泡、头像、多媒体键盘的Emotion、键盘的功能拓展等,更新都挺方便。值得注意的是目前短视频播放采用的AVPlayerLayer不能在模拟器打开,大家可以用真机运行,后期更新后再行通知。SSChat的图片短视频缩放,键盘模块,消息数据模块和布局模块都单独封装,可以单独使用,也可以直接使用SSChatController!

    1.png

    一、键盘的使用

    1.将 SSChatKeyBoard 文件夹拖入到工程

    2.plist文件需要设置权限 访问相机 麦克风 相册

    3.在需要用键盘的控制器引用头文件 #import "SSChatKeyBoardInputView.h" 并设置代理 SSChatKeyBoardInputViewDelegate

    4.声明对象来

    //底部输入框 携带表情视图和多功能视图
    @property(nonatomic,strong)SSChatKeyBoardInputView *mInputView;
    

    5.初始化多媒体键盘

    _mInputView = [SSChatKeyBoardInputView new];
    _mInputView.delegate = self;
    [self.view addSubview:_mInputView]; 
    

    6.聊天界面通常是一个表单UITableView,这个时候需要在表单点击回调和滚动视图的滚动回调里面对键盘弹出收起做一个简单处理。

    //键盘和列表视图归位
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        [_mInputView SetSSChatKeyBoardInputViewEndEditing];
    }
    
    -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
        [_mInputView SetSSChatKeyBoardInputViewEndEditing];
    }
    
    

    7.在键盘的回调方法中,改变输入框高度和键盘位置的方法回调中,需要处理当前表单的frame,具体frame调整需要针对界面的布局来定,这里只对UITableView和它的父视图做个简单调整。

    #pragma SSChatKeyBoardInputViewDelegate 底部输入框代理回调
    //点击按钮视图frame发生变化 调整当前列表frame
    -(void)SSChatKeyBoardInputViewHeight:(CGFloat)keyBoardHeight changeTime:(CGFloat)changeTime{
     
        CGFloat height = _backViewH - keyBoardHeight;
        [UIView animateWithDuration:changeTime animations:^{
            self.mBackView.frame = CGRectMake(0, SafeAreaTop_Height, SCREEN_Width, height);
            self.mTableView.frame = self.mBackView.bounds;
            NSIndexPath *indexPath = [NSIndexPath     indexPathForRow:self.datas.count-1 inSection:0];
            [self.mTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
        } completion:^(BOOL finished) {
            
        }];
        
    }
    
    

    8.其它功能根据需求而定,文本消息在跟后台对接时只能使用字符串,布局是需要做图文混排处理,生成富文本。多功能视图简单处理了图片、视频和定位,大家可以自己拓展需要的功能,并在回调方法直接编写逻辑。

    //发送文本信息
    -(void)SSChatKeyBoardInputViewBtnClick:(NSString *)string;
    
    //发送语音消息
    - (void)SSChatKeyBoardInputViewBtnClick:(SSChatKeyBoardInputView *)view sendVoice:(NSData *)voice time:(NSInteger)second;
    
    //多功能视图按钮点击回调
    -(void)SSChatKeyBoardInputViewBtnClickFunction:(NSInteger)index;
    
    10.png

    二、图片和短视频缩放

    1.添加AVFoundation.framework系统库

    2.引用头文件#import "SSImageGroupView.h"

    3.在点击图片或短视频的时候对图片、短视频的数组做处理,有一些必传的参数

    #pragma SSChatBaseCellDelegate 点击图片 点击短视频
    -(void)SSChatImageVideoCellClick:(NSIndexPath *)indexPath layout:(SSChatMessagelLayout *)layout{
        
        NSInteger currentIndex = 0;
        NSMutableArray *groupItems = [NSMutableArray new];
        
        for(int i=0;i<self.datas.count;++i){
            
            NSIndexPath *ip = [NSIndexPath indexPathForRow:i inSection:0];
            SSChatBaseCell *cell = [_mTableView cellForRowAtIndexPath:ip];
            SSChatMessagelLayout *mLayout = self.datas[I];
            
            SSImageGroupItem *item = [SSImageGroupItem new];
            if(mLayout.message.messageType == SSChatMessageTypeImage){
                item.imageType = SSImageGroupImage;
                item.fromImgView = cell.mImgView;
                item.fromImage = mLayout.message.image;
            }
            else if (mLayout.message.messageType == SSChatMessageTypeVideo){
                item.imageType = SSImageGroupVideo;
                item.videoPath = mLayout.message.videoLocalPath;
                item.fromImgView = cell.mImgView;
                item.fromImage = mLayout.message.videoImage;
            }
            else continue;
            
            item.contentMode = mLayout.message.contentMode;
            item.itemTag = groupItems.count + 10;
            if([mLayout isEqual:layout])currentIndex = groupItems.count;
            [groupItems addObject:item];
            
        }
        
        SSImageGroupView *imageGroupView = [[SSImageGroupView alloc]initWithGroupItems:groupItems currentIndex:currentIndex];
        [self.navigationController.view addSubview:imageGroupView];
        
        __block SSImageGroupView *blockView = imageGroupView;
        blockView.dismissBlock = ^{
            [blockView removeFromSuperview];
            blockView = nil;
        };
        
        //这一段是对聊天界面键盘回收的处理 单独使用媒体缩放功能可以不写
        [self.mInputView SetSSChatKeyBoardInputViewEndEditing];
    }
    

    三、直接使用SSChat

    1.引用头文件#import "SSChatController.h",有一部分的类别大家参考使用,可以改成自己封装的,后期完善后再更新上来。

    2.初始化聊天界面,sessionId为会话Id,对接后台时需要传递,这里在做时间5分钟间隔的时候用到了。chatType为会话类型,区分群聊和单聊。群聊和单聊界面相似,后期会更新上来。

    SSChatController *vc = [SSChatController new];
    vc.chatType = (SSChatConversationType)[_datas[indexPath.row][@"type"]integerValue];
    vc.sessionId = _datas[indexPath.row][@"sectionId"];
    vc.titleString = _datas[indexPath.row][@"title"];
    [self.navigationController pushViewController:vc animated:YES];
    
    

    代码地址:https://github.com/Soldoros/SSChat (帮我打星,谢谢啦)

    相关文章

      网友评论

        本文标题:ios聊天界面SSChat(OC版)

        本文链接:https://www.haomeiwen.com/subject/cnccqqtx.html