├── .gitignore ├── Podfile ├── Podfile.lock ├── RChat.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── RChat.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── RChat ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist ├── MessageIcon │ ├── icon_inputBox_recoder_too_short.png │ ├── icon_inputBox_recorder_prompt1.png │ ├── icon_inputBox_recorder_prompt2.png │ ├── icon_inputBox_recorder_prompt3.png │ ├── icon_inputBox_recorder_prompt4.png │ ├── icon_inputBox_recorder_prompt5.png │ ├── icon_inputBox_recorder_prompt_recall.png │ ├── icon_inputBox_recorder_prompt_voice.png │ ├── icon_message_attachments@3x.png │ ├── icon_message_send_failure.png │ ├── icon_message_sending@3x.png │ ├── icon_message_voice_receive_0@2x.png │ ├── icon_message_voice_receive_0@3x.png │ ├── icon_message_voice_receive_1@2x.png │ ├── icon_message_voice_receive_1@3x.png │ ├── icon_message_voice_receive_2@2x.png │ ├── icon_message_voice_receive_2@3x.png │ ├── icon_message_voice_send_0@2x.png │ ├── icon_message_voice_send_0@3x.png │ ├── icon_message_voice_send_1@2x.png │ ├── icon_message_voice_send_1@3x.png │ ├── icon_message_voice_send_2@2x.png │ ├── icon_message_voice_send_2@3x.png │ ├── receiver_message_background@3x.png │ └── sender_message_background@3x.png ├── Messages │ ├── BAPhotoBrowser │ │ ├── KPhotoBrowserConfig.h │ │ ├── Model │ │ │ ├── KPhoto.h │ │ │ └── KPhoto.m │ │ ├── Resource │ │ │ ├── icon_inputBox_thumb@3x.png │ │ │ ├── icon_inputBox_videoPlay_cancel@3x.png │ │ │ ├── icon_inputBox_video_ pause@3x.png │ │ │ ├── icon_inputBox_video_bttom_play@3x.png │ │ │ └── icon_inputBox_video_play@3x.png │ │ └── View │ │ │ ├── BAProgressView.h │ │ │ ├── BAProgressView.m │ │ │ ├── FSActionSheet │ │ │ ├── FSActionSheet.h │ │ │ ├── FSActionSheet.m │ │ │ ├── FSActionSheetCell.h │ │ │ ├── FSActionSheetCell.m │ │ │ ├── FSActionSheetConfig.h │ │ │ ├── FSActionSheetConfig.m │ │ │ ├── FSActionSheetItem.h │ │ │ └── FSActionSheetItem.m │ │ │ ├── KPhotoBrowser.h │ │ │ ├── KPhotoBrowser.m │ │ │ ├── KVideoPlayView.h │ │ │ ├── KVideoPlayView.m │ │ │ ├── KZoomingScrollView.h │ │ │ ├── KZoomingScrollView.m │ │ │ └── PageControl │ │ │ ├── TAAbstractDotView.h │ │ │ ├── TAAbstractDotView.m │ │ │ ├── TAAnimatedDotView.h │ │ │ ├── TAAnimatedDotView.m │ │ │ ├── TADotView.h │ │ │ ├── TADotView.m │ │ │ ├── TAPageControl.h │ │ │ └── TAPageControl.m │ ├── Category │ │ ├── KNetworkDetection.h │ │ ├── KNetworkDetection.m │ │ ├── NSArray+Json.h │ │ ├── NSArray+Json.m │ │ ├── NSAttributedString+Addition.h │ │ ├── NSAttributedString+Addition.m │ │ ├── NSDate+KCategory.h │ │ ├── NSDate+KCategory.m │ │ ├── NSDictionary+Json.h │ │ ├── NSDictionary+Json.m │ │ ├── NSString+Category.h │ │ ├── NSString+Category.m │ │ ├── NSString+Size.h │ │ ├── NSString+Size.m │ │ ├── NSTextAttachment+Emoji.h │ │ ├── NSTextAttachment+Emoji.m │ │ ├── UIImage+Color.h │ │ ├── UIImage+Color.m │ │ ├── UIImage+Compression.h │ │ ├── UIImage+Compression.m │ │ ├── UIImage+KVideo.h │ │ ├── UIImage+KVideo.m │ │ ├── UILabel+KAutoLabelHeightAndWidth.h │ │ ├── UILabel+KAutoLabelHeightAndWidth.m │ │ ├── UIScrollView+Addition.h │ │ ├── UIScrollView+Addition.m │ │ ├── UIView+KExtension.h │ │ ├── UIView+KExtension.m │ │ ├── UIViewController+KCategory.h │ │ └── UIViewController+KCategory.m │ ├── Common │ │ ├── BaseViewController.h │ │ ├── BaseViewController.m │ │ ├── KFileCache.h │ │ ├── KFileCache.m │ │ ├── KFileManagement.h │ │ ├── KFileManagement.m │ │ ├── KSystemAuthorization.h │ │ └── KSystemAuthorization.m │ ├── Controller │ │ ├── KChatViewController+Image.h │ │ ├── KChatViewController+Image.m │ │ ├── KChatViewController+Voice.h │ │ ├── KChatViewController+Voice.m │ │ ├── KChatViewController.h │ │ ├── KChatViewController.m │ │ ├── KMessagesViewController.h │ │ ├── KMessagesViewController.m │ │ ├── KSearchMessageViewController.h │ │ └── KSearchMessageViewController.m │ ├── InputBox │ │ ├── Controller │ │ │ ├── KVideoViewController.h │ │ │ └── KVideoViewController.m │ │ ├── Model │ │ │ ├── KEmojiGroup.h │ │ │ ├── KEmojiGroup.m │ │ │ ├── KEmojiModel.h │ │ │ ├── KEmojiModel.m │ │ │ ├── KInputBoxMoreModel.h │ │ │ ├── KInputBoxMoreModel.m │ │ │ ├── KTextBackedString.h │ │ │ └── KTextBackedString.m │ │ ├── Resource │ │ │ ├── Face │ │ │ │ ├── emoji_delete.png │ │ │ │ ├── emoji_normal.png │ │ │ │ ├── emotion_aini.png │ │ │ │ ├── emotion_aini_gif.gif │ │ │ │ ├── emotion_aiqing.png │ │ │ │ ├── emotion_aiqing_gif.gif │ │ │ │ ├── emotion_aixin.png │ │ │ │ ├── emotion_aixin_gif.gif │ │ │ │ ├── emotion_aoman.png │ │ │ │ ├── emotion_aoman_gif.gif │ │ │ │ ├── emotion_baiyan.png │ │ │ │ ├── emotion_baiyan_gif.gif │ │ │ │ ├── emotion_bangbangtang.png │ │ │ │ ├── emotion_bangbangtang_gif.gif │ │ │ │ ├── emotion_baobao.png │ │ │ │ ├── emotion_baobao_gif.gif │ │ │ │ ├── emotion_baojing.png │ │ │ │ ├── emotion_baojing_gif.gif │ │ │ │ ├── emotion_baoquan.png │ │ │ │ ├── emotion_baoquan_gif.gif │ │ │ │ ├── emotion_bianbian.png │ │ │ │ ├── emotion_bianbian_gif.gif │ │ │ │ ├── emotion_bianpao.png │ │ │ │ ├── emotion_bianpao_gif.gif │ │ │ │ ├── emotion_biezui.png │ │ │ │ ├── emotion_biezui_gif.gif │ │ │ │ ├── emotion_bishi.png │ │ │ │ ├── emotion_bishi_gif.gif │ │ │ │ ├── emotion_bizui.png │ │ │ │ ├── emotion_bizui_gif.gif │ │ │ │ ├── emotion_cahan.png │ │ │ │ ├── emotion_cahan_gif.gif │ │ │ │ ├── emotion_caidao.png │ │ │ │ ├── emotion_caidao_gif.gif │ │ │ │ ├── emotion_caiqiu.png │ │ │ │ ├── emotion_caiqiu_gif.gif │ │ │ │ ├── emotion_chajing.png │ │ │ │ ├── emotion_chajing_gif.gif │ │ │ │ ├── emotion_chaopiao.png │ │ │ │ ├── emotion_chaopiao_gif.gif │ │ │ │ ├── emotion_chexiang.png │ │ │ │ ├── emotion_chexiang_gif.gif │ │ │ │ ├── emotion_ciya.png │ │ │ │ ├── emotion_ciya_gif.gif │ │ │ │ ├── emotion_dabing.png │ │ │ │ ├── emotion_dabing_gif.gif │ │ │ │ ├── emotion_daku.png │ │ │ │ ├── emotion_daku_gif.gif │ │ │ │ ├── emotion_dangao.png │ │ │ │ ├── emotion_dangao_gif.gif │ │ │ │ ├── emotion_dao.png │ │ │ │ ├── emotion_dao_gif.gif │ │ │ │ ├── emotion_dashan.png │ │ │ │ ├── emotion_dashan_gif.gif │ │ │ │ ├── emotion_dashuai.png │ │ │ │ ├── emotion_dashuai_gif.gif │ │ │ │ ├── emotion_denglong.png │ │ │ │ ├── emotion_denglong_gif.gif │ │ │ │ ├── emotion_dengpao.png │ │ │ │ ├── emotion_dengpao_gif.gif │ │ │ │ ├── emotion_deyi.png │ │ │ │ ├── emotion_deyi_gif.gif │ │ │ │ ├── emotion_diaoxie.png │ │ │ │ ├── emotion_diaoxie_gif.gif │ │ │ │ ├── emotion_duoyun.png │ │ │ │ ├── emotion_duoyun_gif.gif │ │ │ │ ├── emotion_facai.png │ │ │ │ ├── emotion_facai_gif.gif │ │ │ │ ├── emotion_fadai.png │ │ │ │ ├── emotion_fadai_gif.gif │ │ │ │ ├── emotion_fadou.png │ │ │ │ ├── emotion_fadou_gif.gif │ │ │ │ ├── emotion_fakuang.png │ │ │ │ ├── emotion_fakuang_gif.gif │ │ │ │ ├── emotion_fan.png │ │ │ │ ├── emotion_fan_gif.gif │ │ │ │ ├── emotion_fanu.png │ │ │ │ ├── emotion_fanu_gif.gif │ │ │ │ ├── emotion_feiji.png │ │ │ │ ├── emotion_feiji_gif.gif │ │ │ │ ├── emotion_feiwen.png │ │ │ │ ├── emotion_feiwen_gif.gif │ │ │ │ ├── emotion_fendou.png │ │ │ │ ├── emotion_fendou_gif.gif │ │ │ │ ├── emotion_fengche.png │ │ │ │ ├── emotion_fengche_gif.gif │ │ │ │ ├── emotion_ganga.png │ │ │ │ ├── emotion_ganga_gif.gif │ │ │ │ ├── emotion_gouwu.png │ │ │ │ ├── emotion_gouwu_gif.gif │ │ │ │ ├── emotion_gouying.png │ │ │ │ ├── emotion_gouying_gif.gif │ │ │ │ ├── emotion_guzhang.png │ │ │ │ ├── emotion_guzhang_gif.gif │ │ │ │ ├── emotion_haixiu.png │ │ │ │ ├── emotion_haixiu_gif.gif │ │ │ │ ├── emotion_hanxiao.png │ │ │ │ ├── emotion_hanxiao_gif.gif │ │ │ │ ├── emotion_haqian.png │ │ │ │ ├── emotion_haqian_gif.gif │ │ │ │ ├── emotion_hecai.png │ │ │ │ ├── emotion_hecai_gif.gif │ │ │ │ ├── emotion_henai.png │ │ │ │ ├── emotion_henai_gif.gif │ │ │ │ ├── emotion_huaixiao.png │ │ │ │ ├── emotion_huaixiao_gif.gif │ │ │ │ ├── emotion_huishou.png │ │ │ │ ├── emotion_huishou_gif.gif │ │ │ │ ├── emotion_huitou.png │ │ │ │ ├── emotion_huitou_gif.gif │ │ │ │ ├── emotion_jidong.png │ │ │ │ ├── emotion_jidong_gif.gif │ │ │ │ ├── emotion_jie.png │ │ │ │ ├── emotion_jie_gif.gif │ │ │ │ ├── emotion_jiewu.png │ │ │ │ ├── emotion_jiewu_gif.gif │ │ │ │ ├── emotion_jingkong.png │ │ │ │ ├── emotion_jingkong_gif.gif │ │ │ │ ├── emotion_jingya.png │ │ │ │ ├── emotion_jingya_gif.gif │ │ │ │ ├── emotion_kafei.png │ │ │ │ ├── emotion_kafei_gif.gif │ │ │ │ ├── emotion_kaiche.png │ │ │ │ ├── emotion_kaiche_gif.gif │ │ │ │ ├── emotion_keai.png │ │ │ │ ├── emotion_keai_gif.gif │ │ │ │ ├── emotion_kelian.png │ │ │ │ ├── emotion_kelian_gif.gif │ │ │ │ ├── emotion_ketou.png │ │ │ │ ├── emotion_ketou_gif.gif │ │ │ │ ├── emotion_kge.png │ │ │ │ ├── emotion_kge_gif.gif │ │ │ │ ├── emotion_koubi.png │ │ │ │ ├── emotion_koubi_gif.gif │ │ │ │ ├── emotion_ku.png │ │ │ │ ├── emotion_ku_gif.gif │ │ │ │ ├── emotion_kuaikule.png │ │ │ │ ├── emotion_kuaikule_gif.gif │ │ │ │ ├── emotion_kulou.png │ │ │ │ ├── emotion_kulou_gif.gif │ │ │ │ ├── emotion_kun.png │ │ │ │ ├── emotion_kun_gif.gif │ │ │ │ ├── emotion_lanqiu.png │ │ │ │ ├── emotion_lanqiu_gif.gif │ │ │ │ ├── emotion_lenghan.png │ │ │ │ ├── emotion_lenghan_gif.gif │ │ │ │ ├── emotion_liuhan.png │ │ │ │ ├── emotion_liuhan_gif.gif │ │ │ │ ├── emotion_liulei.png │ │ │ │ ├── emotion_liulei_gif.gif │ │ │ │ ├── emotion_liwu.png │ │ │ │ ├── emotion_liwu_gif.gif │ │ │ │ ├── emotion_meigui.png │ │ │ │ ├── emotion_meigui_gif.gif │ │ │ │ ├── emotion_nanguo.png │ │ │ │ ├── emotion_nanguo_gif.gif │ │ │ │ ├── emotion_naozhong.png │ │ │ │ ├── emotion_naozhong_gif.gif │ │ │ │ ├── emotion_no.png │ │ │ │ ├── emotion_no_gif.gif │ │ │ │ ├── emotion_ok.png │ │ │ │ ├── emotion_ok_gif.gif │ │ │ │ ├── emotion_ouhuo.png │ │ │ │ ├── emotion_ouhuo_gif.gif │ │ │ │ ├── emotion_pachong.png │ │ │ │ ├── emotion_pachong_gif.gif │ │ │ │ ├── emotion_pijiu.png │ │ │ │ ├── emotion_pijiu_gif.gif │ │ │ │ ├── emotion_pingpang.png │ │ │ │ ├── emotion_pingpang_gif.gif │ │ │ │ ├── emotion_qiang.png │ │ │ │ ├── emotion_qiang_gif.gif │ │ │ │ ├── emotion_qiaoda.png │ │ │ │ ├── emotion_qiaoda_gif.gif │ │ │ │ ├── emotion_qidao.png │ │ │ │ ├── emotion_qidao_gif.gif │ │ │ │ ├── emotion_qingwa.png │ │ │ │ ├── emotion_qingwa_gif.gif │ │ │ │ ├── emotion_qinqin.png │ │ │ │ ├── emotion_qinqin_gif.gif │ │ │ │ ├── emotion_qiudale.png │ │ │ │ ├── emotion_qiudale_gif.gif │ │ │ │ ├── emotion_quantou.png │ │ │ │ ├── emotion_quantou_gif.gif │ │ │ │ ├── emotion_ruo.png │ │ │ │ ├── emotion_ruo_gif.gif │ │ │ │ ├── emotion_se.png │ │ │ │ ├── emotion_se_gif.gif │ │ │ │ ├── emotion_shafa.png │ │ │ │ ├── emotion_shafa_gif.gif │ │ │ │ ├── emotion_shandian.png │ │ │ │ ├── emotion_shandian_gif.gif │ │ │ │ ├── emotion_shengli.png │ │ │ │ ├── emotion_shengli_gif.gif │ │ │ │ ├── emotion_shiai.png │ │ │ │ ├── emotion_shiai_gif.gif │ │ │ │ ├── emotion_shouqiang.png │ │ │ │ ├── emotion_shouqiang_gif.gif │ │ │ │ ├── emotion_shuai.png │ │ │ │ ├── emotion_shuai_gif.gif │ │ │ │ ├── emotion_shuangxi.png │ │ │ │ ├── emotion_shuangxi_gif.gif │ │ │ │ ├── emotion_shui.png │ │ │ │ ├── emotion_shui_gif.gif │ │ │ │ ├── emotion_taiyang.png │ │ │ │ ├── emotion_taiyang_gif.gif │ │ │ │ ├── emotion_tiaopi.png │ │ │ │ ├── emotion_tiaopi_gif.gif │ │ │ │ ├── emotion_tiaosheng.png │ │ │ │ ├── emotion_tiaosheng_gif.gif │ │ │ │ ├── emotion_tiaotiao.png │ │ │ │ ├── emotion_tiaotiao_gif.gif │ │ │ │ ├── emotion_touxiao.png │ │ │ │ ├── emotion_touxiao_gif.gif │ │ │ │ ├── emotion_tu.png │ │ │ │ ├── emotion_tu_gif.gif │ │ │ │ ├── emotion_weiqu.png │ │ │ │ ├── emotion_weiqu_gif.gif │ │ │ │ ├── emotion_weixiao.png │ │ │ │ ├── emotion_weixiao_gif.gif │ │ │ │ ├── emotion_woshou.png │ │ │ │ ├── emotion_woshou_gif.gif │ │ │ │ ├── emotion_xia.png │ │ │ │ ├── emotion_xia_gif.gif │ │ │ │ ├── emotion_xiamian.png │ │ │ │ ├── emotion_xiamian_gif.gif │ │ │ │ ├── emotion_xiangjiao.png │ │ │ │ ├── emotion_xiangjiao_gif.gif │ │ │ │ ├── emotion_xianwen.png │ │ │ │ ├── emotion_xianwen_gif.gif │ │ │ │ ├── emotion_xiayu.png │ │ │ │ ├── emotion_xiayu_gif.gif │ │ │ │ ├── emotion_xigua.png │ │ │ │ ├── emotion_xigua_gif.gif │ │ │ │ ├── emotion_xinsui.png │ │ │ │ ├── emotion_xinsui_gif.gif │ │ │ │ ├── emotion_xiongmao.png │ │ │ │ ├── emotion_xiongmao_gif.gif │ │ │ │ ├── emotion_xu.png │ │ │ │ ├── emotion_xu_gif.gif │ │ │ │ ├── emotion_yao.png │ │ │ │ ├── emotion_yao_gif.gif │ │ │ │ ├── emotion_yingxian.png │ │ │ │ ├── emotion_yingxian_gif.gif │ │ │ │ ├── emotion_yiwen.png │ │ │ │ ├── emotion_yiwen_gif.gif │ │ │ │ ├── emotion_youchexiang.png │ │ │ │ ├── emotion_youchexiang_gif.gif │ │ │ │ ├── emotion_youhengheng.png │ │ │ │ ├── emotion_youhengheng_gif.gif │ │ │ │ ├── emotion_youjian.png │ │ │ │ ├── emotion_youjian_gif.gif │ │ │ │ ├── emotion_youtaiji.png │ │ │ │ ├── emotion_youtaiji_gif.gif │ │ │ │ ├── emotion_yueliang.png │ │ │ │ ├── emotion_yueliang_gif.gif │ │ │ │ ├── emotion_yun.png │ │ │ │ ├── emotion_yun_gif.gif │ │ │ │ ├── emotion_zaijian.png │ │ │ │ ├── emotion_zaijian_gif.gif │ │ │ │ ├── emotion_zhadan.png │ │ │ │ ├── emotion_zhadan_gif.gif │ │ │ │ ├── emotion_zhijing.png │ │ │ │ ├── emotion_zhijing_gif.gif │ │ │ │ ├── emotion_zhuakuang.png │ │ │ │ ├── emotion_zhuakuang_gif.gif │ │ │ │ ├── emotion_zhuanjie.png │ │ │ │ ├── emotion_zhuanjie_gif.gif │ │ │ │ ├── emotion_zhuanquan.png │ │ │ │ ├── emotion_zhuanquan_gif.gif │ │ │ │ ├── emotion_zhuqiu.png │ │ │ │ ├── emotion_zhuqiu_gif.gif │ │ │ │ ├── emotion_zhutou.png │ │ │ │ ├── emotion_zhutou_gif.gif │ │ │ │ ├── emotion_zouma.png │ │ │ │ ├── emotion_zouma_gif.gif │ │ │ │ ├── emotion_zuochetou.png │ │ │ │ ├── emotion_zuochetou_gif.gif │ │ │ │ ├── emotion_zuohengheng.png │ │ │ │ ├── emotion_zuohengheng_gif.gif │ │ │ │ ├── emotion_zuotaiji.png │ │ │ │ ├── emotion_zuotaiji_gif.gif │ │ │ │ └── msg_state_fail_resend.png │ │ │ ├── InputBoxMore.plist │ │ │ ├── icon_inputBox_menu_add@3x.png │ │ │ ├── icon_inputBox_more_mail@3x.png │ │ │ ├── icon_inputBox_more_mobile@3x.png │ │ │ ├── icon_inputBox_more_photo@3x.png │ │ │ ├── icon_inputBox_more_takeVideo_back@3x.png │ │ │ ├── icon_inputBox_more_takeVideo_camera@3x.png │ │ │ ├── icon_inputBox_more_takeVideo_cancel@3x.png │ │ │ ├── icon_inputBox_more_takeVideo_confirm@3x.png │ │ │ ├── icon_inputBox_more_takeVideo_focusing@3x.png │ │ │ ├── icon_inputBox_more_takeVideo_photograph@3x.png │ │ │ ├── icon_inputBox_more_take_photo@3x.png │ │ │ ├── icon_inputBox_more_take_video@3x.png │ │ │ ├── icon_message_emoji_delete@2x.png │ │ │ ├── icon_message_expression@3x.png │ │ │ ├── icon_message_keyboard@3x.png │ │ │ ├── icon_message_more@3x.png │ │ │ ├── icon_message_voiceBtn@3x.png │ │ │ └── normal_emoji.plist │ │ └── View │ │ │ ├── KEmojiCollectionViewCell.h │ │ │ ├── KEmojiCollectionViewCell.m │ │ │ ├── KHorizontalPageFlowlayout.h │ │ │ ├── KHorizontalPageFlowlayout.m │ │ │ ├── KInputBoxEmojiMenuView.h │ │ │ ├── KInputBoxEmojiMenuView.m │ │ │ ├── KInputBoxEmojiView.h │ │ │ ├── KInputBoxEmojiView.m │ │ │ ├── KInputBoxMoreItemView.h │ │ │ ├── KInputBoxMoreItemView.m │ │ │ ├── KInputBoxMoreUnitView.h │ │ │ ├── KInputBoxMoreUnitView.m │ │ │ ├── KInputBoxMoreView.h │ │ │ ├── KInputBoxMoreView.m │ │ │ ├── KInputBoxRecorderView.h │ │ │ ├── KInputBoxRecorderView.m │ │ │ ├── KInputBoxView.h │ │ │ ├── KInputBoxView.m │ │ │ ├── KInputBoxViewCtrl.h │ │ │ ├── KInputBoxViewCtrl.m │ │ │ ├── KInputBoxViewDelegate.h │ │ │ ├── KPlayer.h │ │ │ ├── KPlayer.m │ │ │ ├── KRecordView.h │ │ │ ├── KRecordView.m │ │ │ ├── KTextView.h │ │ │ ├── KTextView.m │ │ │ ├── KVideoProgressView.h │ │ │ └── KVideoProgressView.m │ ├── Model │ │ ├── KChatMessageHelper.h │ │ ├── KChatMessageHelper.m │ │ ├── KConversationModel.h │ │ ├── KConversationModel.m │ │ ├── KMailAccountInfoModel.h │ │ ├── KMailAccountInfoModel.m │ │ ├── KMessageModel.h │ │ ├── KMessageModel.m │ │ ├── KPhotoPreviewModel.h │ │ └── KPhotoPreviewModel.m │ ├── Resource │ │ ├── conversationList │ │ ├── messageList101824_143701 │ │ ├── previewPicture.jpeg │ │ └── reviewVideo.mp4 │ ├── Utils │ │ ├── ColorTools.h │ │ ├── ColorTools.m │ │ ├── KAppDefaultUtil.h │ │ ├── KAppDefaultUtil.m │ │ ├── KProgressView.h │ │ └── KProgressView.m │ └── View │ │ ├── KChatImageTableViewCell.h │ │ ├── KChatImageTableViewCell.m │ │ ├── KChatMailTableViewCell.h │ │ ├── KChatMailTableViewCell.m │ │ ├── KChatTableViewCell.h │ │ ├── KChatTableViewCell.m │ │ ├── KChatTableViewCellDelegate.h │ │ ├── KChatTextTableViewCell.h │ │ ├── KChatTextTableViewCell.m │ │ ├── KChatVideoTableViewCell.h │ │ ├── KChatVideoTableViewCell.m │ │ ├── KChatVoiceTableViewCell.h │ │ ├── KChatVoiceTableViewCell.m │ │ ├── KMessagesListTableViewCell.h │ │ └── KMessagesListTableViewCell.m ├── PrefixHeader.pch └── main.m ├── RChatTests ├── Info.plist └── RChatTests.m ├── RChatUITests ├── Info.plist └── RChatUITests.m └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | # Mac OS X Finder and whatnot 5 | .DS_Store 6 | ## Build generated 7 | build/ 8 | DerivedData/ 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | ## Other 20 | *.moved-aside 21 | *.xcuserstate 22 | *.xccheckout 23 | ## Obj-C/Swift specific 24 | *.hmap 25 | *.ipa 26 | *.dSYM.zip 27 | *.dSYM 28 | #CocoaPods 29 | Pods/ -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'RChat' do 5 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks 6 | # use_frameworks! 7 | pod 'MJRefresh' #上下拉刷新 8 | pod 'SDAutoLayout' #自动约束布局 9 | pod 'SDWebImage' #图片加载库 10 | pod 'SVProgressHUD' #弹窗指示器 11 | pod 'AFNetworking' #网络请求库 12 | pod 'TZImagePickerController' 13 | # Pods for RChat 14 | 15 | target 'RChatTests' do 16 | inherit! :search_paths 17 | # Pods for testing 18 | end 19 | 20 | target 'RChatUITests' do 21 | inherit! :search_paths 22 | # Pods for testing 23 | end 24 | 25 | end 26 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AFNetworking (3.2.1): 3 | - AFNetworking/NSURLSession (= 3.2.1) 4 | - AFNetworking/Reachability (= 3.2.1) 5 | - AFNetworking/Security (= 3.2.1) 6 | - AFNetworking/Serialization (= 3.2.1) 7 | - AFNetworking/UIKit (= 3.2.1) 8 | - AFNetworking/NSURLSession (3.2.1): 9 | - AFNetworking/Reachability 10 | - AFNetworking/Security 11 | - AFNetworking/Serialization 12 | - AFNetworking/Reachability (3.2.1) 13 | - AFNetworking/Security (3.2.1) 14 | - AFNetworking/Serialization (3.2.1) 15 | - AFNetworking/UIKit (3.2.1): 16 | - AFNetworking/NSURLSession 17 | - MJRefresh (3.1.15.3) 18 | - SDAutoLayout (2.2.1) 19 | - SDWebImage (4.4.2): 20 | - SDWebImage/Core (= 4.4.2) 21 | - SDWebImage/Core (4.4.2) 22 | - SVProgressHUD (2.2.5) 23 | - TZImagePickerController (2.2.5) 24 | 25 | DEPENDENCIES: 26 | - AFNetworking 27 | - MJRefresh 28 | - SDAutoLayout 29 | - SDWebImage 30 | - SVProgressHUD 31 | - TZImagePickerController 32 | 33 | SPEC REPOS: 34 | https://github.com/CocoaPods/Specs.git: 35 | - AFNetworking 36 | - MJRefresh 37 | - SDAutoLayout 38 | - SDWebImage 39 | - SVProgressHUD 40 | - TZImagePickerController 41 | 42 | SPEC CHECKSUMS: 43 | AFNetworking: b6f891fdfaed196b46c7a83cf209e09697b94057 44 | MJRefresh: b48380ae2b927b46c4ef000de9adb8dc748e1df7 45 | SDAutoLayout: 8bf6b3bbc8b01f775d4defbb4fda2ace805461be 46 | SDWebImage: 624d6e296c69b244bcede364c72ae0430ac14681 47 | SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 48 | TZImagePickerController: cf5c9f0ae343e2eb1912b26e4d9fa811b3159319 49 | 50 | PODFILE CHECKSUM: e802b9d5080f7f738aaeffa5622da4b3427c4473 51 | 52 | COCOAPODS: 1.5.0 53 | -------------------------------------------------------------------------------- /RChat.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RChat.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /RChat.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /RChat.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /RChat/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // RChat 4 | // 5 | // Created by eims on 2018/9/4. 6 | // Copyright © 2018年 RPK. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /RChat/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /RChat/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /RChat/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /RChat/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /RChat/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPhotoLibraryUsageDescription 6 | 需要您的同意,APP才能访问相册 7 | NSCameraUsageDescription 8 | 需要您的同意,APP才能访问相机 9 | NSMicrophoneUsageDescription 10 | 需要您的同意,APP才能访问麦克风 11 | CFBundleDevelopmentRegion 12 | $(DEVELOPMENT_LANGUAGE) 13 | NSAppTransportSecurity 14 | 15 | NSAllowsArbitraryLoads 16 | 17 | 18 | CFBundleExecutable 19 | $(EXECUTABLE_NAME) 20 | CFBundleIdentifier 21 | $(PRODUCT_BUNDLE_IDENTIFIER) 22 | CFBundleInfoDictionaryVersion 23 | 6.0 24 | CFBundleName 25 | $(PRODUCT_NAME) 26 | CFBundlePackageType 27 | APPL 28 | CFBundleShortVersionString 29 | 1.0 30 | CFBundleVersion 31 | 1 32 | LSRequiresIPhoneOS 33 | 34 | UILaunchStoryboardName 35 | LaunchScreen 36 | UIMainStoryboardFile 37 | Main 38 | UIRequiredDeviceCapabilities 39 | 40 | armv7 41 | 42 | UISupportedInterfaceOrientations 43 | 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | UISupportedInterfaceOrientations~ipad 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationPortraitUpsideDown 52 | UIInterfaceOrientationLandscapeLeft 53 | UIInterfaceOrientationLandscapeRight 54 | 55 | nsap 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recoder_too_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recoder_too_short.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recorder_prompt1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recorder_prompt1.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recorder_prompt2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recorder_prompt2.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recorder_prompt3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recorder_prompt3.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recorder_prompt4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recorder_prompt4.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recorder_prompt5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recorder_prompt5.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recorder_prompt_recall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recorder_prompt_recall.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_inputBox_recorder_prompt_voice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_inputBox_recorder_prompt_voice.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_attachments@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_attachments@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_send_failure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_send_failure.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_sending@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_sending@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_receive_0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_receive_0@2x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_receive_0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_receive_0@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_receive_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_receive_1@2x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_receive_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_receive_1@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_receive_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_receive_2@2x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_receive_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_receive_2@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_send_0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_send_0@2x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_send_0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_send_0@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_send_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_send_1@2x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_send_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_send_1@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_send_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_send_2@2x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/icon_message_voice_send_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/icon_message_voice_send_2@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/receiver_message_background@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/receiver_message_background@3x.png -------------------------------------------------------------------------------- /RChat/MessageIcon/sender_message_background@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/MessageIcon/sender_message_background@3x.png -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/Model/KPhoto.h: -------------------------------------------------------------------------------- 1 | // 2 | // BAPhoto.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/17. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KPhoto : NSObject 12 | // 默认图 13 | @property (nonatomic, strong) UIImage *defaultImage; 14 | // 缩略图url 15 | @property (nonatomic, strong) NSString *thumbUrl; 16 | // 高清图片url 17 | @property (nonatomic, strong) NSString *imageUrl; 18 | // 视频url 19 | @property (nonatomic, strong) NSString *videoUrl; 20 | 21 | - (BOOL)isEmpty; 22 | - (BOOL)isVideo; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/Model/KPhoto.m: -------------------------------------------------------------------------------- 1 | // 2 | // KPhoto.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/17. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KPhoto.h" 10 | 11 | @implementation KPhoto 12 | 13 | - (BOOL)isEmpty { 14 | if (self.videoUrl == nil && self.defaultImage == nil && self.imageUrl == nil && self.thumbUrl == nil) { 15 | return YES; 16 | } 17 | else { 18 | return NO; 19 | } 20 | } 21 | 22 | - (BOOL)isVideo { 23 | if (self.videoUrl != nil) { 24 | return YES; 25 | } 26 | return NO; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_thumb@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_thumb@3x.png -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_videoPlay_cancel@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_videoPlay_cancel@3x.png -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_video_ pause@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_video_ pause@3x.png -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_video_bttom_play@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_video_bttom_play@3x.png -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_video_play@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/BAPhotoBrowser/Resource/icon_inputBox_video_play@3x.png -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/BAProgressView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BAProgressView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/17. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KPhotoBrowserConfig.h" 12 | 13 | @interface BAProgressView : UIView 14 | 15 | @property (nonatomic, assign) CGFloat progress; 16 | @property (nonatomic, assign) KProgressViewMode mode; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/FSActionSheet/FSActionSheetCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSActionSheetCell.h 3 | // FSActionSheet 4 | // 5 | // Created by Steven on 6/7/16. 6 | // Copyright © 2016年 Steven. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "FSActionSheetConfig.h" 11 | @class FSActionSheetItem; 12 | 13 | @interface FSActionSheetCell : UITableViewCell 14 | 15 | @property (nonatomic, assign) FSContentAlignment contentAlignment; 16 | @property (nonatomic, strong) FSActionSheetItem *item; 17 | @property (nonatomic, assign) BOOL hideTopLine; ///< 是否隐藏顶部线条 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/FSActionSheet/FSActionSheetConfig.m: -------------------------------------------------------------------------------- 1 | // 2 | // FSActionSheetConfig.m 3 | // FSActionSheet 4 | // 5 | // Created by Steven on 6/8/16. 6 | // Copyright © 2016 Steven. All rights reserved. 7 | // 8 | 9 | #import "FSActionSheetConfig.h" 10 | 11 | // float 12 | CGFloat const FSActionSheetDefaultMargin = 10; ///< 默认边距 (标题四边边距, 选项靠左或靠右时距离边缘的距离) 13 | CGFloat const FSActionSheetContentMaxScale = 0.65; ///< 弹窗内容高度与屏幕高度的默认比例 14 | CGFloat const FSActionSheetRowHeight = 44; ///< 行高 15 | CGFloat const FSActionSheetTitleLineSpacing = 2.5; ///< 标题行距 16 | CGFloat const FSActionSheetTitleKernSpacing = 0.5; ///< 标题字距 17 | CGFloat const FSActionSheetItemTitleFontSize = 16; ///< 选项文字字体大小, default is 16. 18 | CGFloat const FSActionSheetItemContentSpacing = 5; ///< 选项图片和文字的间距 19 | // color 20 | NSString * const FSActionSheetTitleColor = @"#888888"; ///< 标题颜色 21 | NSString * const FSActionSheetBackColor = @"#E8E8ED"; ///< 背景颜色 22 | NSString * const FSActionSheetRowNormalColor = @"#FBFBFE"; ///< 单元格背景颜色 23 | NSString * const FSActionSheetRowHighlightedColor = @"#F1F1F5"; ///< 选中高亮颜色 24 | NSString * const FSActionSheetRowTopLineColor = @"#D7D7D8"; ///< 单元格顶部线条颜色 25 | NSString * const FSActionSheetItemNormalColor = @"#000000"; ///< 选项默认颜色 26 | NSString * const FSActionSheetItemHighlightedColor = @"#E64340"; ///< 选项高亮颜色 27 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/FSActionSheet/FSActionSheetItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSActionSheetItem.h 3 | // FSActionSheet 4 | // 5 | // Created by Steven on 16/5/11. 6 | // Copyright © 2016年 Steven. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "FSActionSheetConfig.h" 11 | 12 | @interface FSActionSheetItem : NSObject 13 | 14 | @property (nonatomic, assign) FSActionSheetType type; ///< 选项类型, 有 默认 和 高亮 两种类型. 15 | @property (nonatomic, strong) UIImage *image; ///< 选项图标, 建议image的size为 @2x: 46x46, @3x: 69x69. 16 | @property (nonatomic, copy) NSString *title; ///< 选项标题 17 | @property (nonatomic, strong) UIColor *tintColor; ///< 选项前景色, 如果设置了这个颜色的话, 则无论选项设置的图标是什么颜色都会被修改为当前设置的这个颜色, 18 | ///< 同时这个颜色也会是标题的文本颜色. 19 | 20 | + (instancetype)itemWithType:(FSActionSheetType)type image:(UIImage *)image title:(NSString *)title tintColor:(UIColor *)tintColor; 21 | 22 | @end 23 | 24 | /*! @author Steven 25 | * @brief 单标题的选项 26 | * @param type 类型 27 | * @param title 标题 28 | */ 29 | NS_INLINE FSActionSheetItem *FSActionSheetTitleItemMake(FSActionSheetType type, NSString *title) { 30 | return [FSActionSheetItem itemWithType:type image:nil title:title tintColor:nil]; 31 | } 32 | 33 | /*! @author Steven 34 | * @brief 标题和图标的选项 35 | * @param type 类型 36 | * @param image 图片 37 | * @param title 标题 38 | */ 39 | NS_INLINE FSActionSheetItem *FSActionSheetTitleWithImageItemMake(FSActionSheetType type, UIImage *image, NSString *title) { 40 | return [FSActionSheetItem itemWithType:type image:image title:title tintColor:nil]; 41 | } 42 | 43 | /*! @author Steven 44 | * @brief 单标题且自定义前景色的选项 45 | * @param type 类型 46 | * @param title 标题 47 | * @param tintColor 自定义前景色 48 | */ 49 | NS_INLINE FSActionSheetItem *FSActionSheetTitleWithColorItemMake(FSActionSheetType type, NSString *title, UIColor *tintColor) { 50 | return [FSActionSheetItem itemWithType:type image:nil title:title tintColor:tintColor]; 51 | } 52 | 53 | /*! @author Steven 54 | * @brief 标题和图片并且自定义前景色的选项 55 | * @param type 类型 56 | * @param title 标题 57 | * @param image 图片 58 | * @param tintColor 自定义前景色 59 | */ 60 | NS_INLINE FSActionSheetItem *FSActionSheetItemMake(FSActionSheetType type, UIImage *image, NSString *title, UIColor *tintColor) { 61 | return [FSActionSheetItem itemWithType:type image:image title:title tintColor:tintColor]; 62 | } 63 | 64 | 65 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/FSActionSheet/FSActionSheetItem.m: -------------------------------------------------------------------------------- 1 | // 2 | // FSActionSheetItem.m 3 | // FSActionSheet 4 | // 5 | // Created by Steven on 16/5/11. 6 | // Copyright © 2016年 Steven. All rights reserved. 7 | // 8 | 9 | #import "FSActionSheetItem.h" 10 | 11 | @implementation FSActionSheetItem 12 | 13 | + (instancetype)itemWithType:(FSActionSheetType)type image:(UIImage *)image title:(NSString *)title tintColor:(UIColor *)tintColor { 14 | 15 | FSActionSheetItem *item = [[FSActionSheetItem alloc] init]; 16 | item.type = type; 17 | item.image = image; 18 | item.title = title; 19 | item.tintColor = tintColor; 20 | 21 | return item; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/KVideoPlayView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KVideoPlayView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/17. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KVideoPlayView; 12 | @protocol KVideoPlayViewDelegate 13 | 14 | - (void)videoPlayView:(KVideoPlayView *)videoPlayView clickBackButton:(UIButton *)back; 15 | 16 | @end 17 | 18 | 19 | @interface KVideoPlayView : UIView 20 | 21 | // 视频URL 22 | @property (nonatomic, strong) NSURL *videoUrl; 23 | 24 | @property (nonatomic, assign) id delegate; 25 | 26 | - (void)play; 27 | - (void)stop; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/KZoomingScrollView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KZoomingScrollView.h 3 | // XLPhotoBrowserDemo 4 | // 5 | // Created by Liushannoon on 16/7/15. 6 | // Copyright © 2016年 LiuShannoon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KPhoto.h" 12 | 13 | @class KVideoPlayView; 14 | @class KZoomingScrollView; 15 | 16 | @protocol KZoomingScrollViewDelegate 17 | 18 | /** 19 | * 单击图像时调用 20 | * 21 | * @param zoomingScrollView 图片缩放视图 22 | * @param singleTap 用户单击手势 23 | */ 24 | - (void)zoomingScrollView:(KZoomingScrollView *)zoomingScrollView singleTapDetected:(UITapGestureRecognizer *)singleTap; 25 | 26 | @optional 27 | /** 28 | * 图片加载进度 29 | * 30 | * @param zoomingScrollView 图片缩放视图 31 | * @param progress 加载进度 , 0 - 1.0 32 | */ 33 | - (void)zoomingScrollView:(KZoomingScrollView *)zoomingScrollView imageLoadProgress:(CGFloat)progress; 34 | 35 | @end 36 | 37 | 38 | @interface KZoomingScrollView : UIView 39 | 40 | @property (nonatomic, assign) BOOL isAutoPlay; 41 | 42 | /** 43 | * zoomingScrollViewdelegate 44 | */ 45 | @property (nonatomic , weak) id zoomingScrollViewdelegate; 46 | // 视频播放器 47 | @property (nonatomic, strong) KVideoPlayView *videoPlayer; 48 | /** 49 | * 图片加载进度 50 | */ 51 | @property (nonatomic, assign) CGFloat progress; 52 | /** 53 | * 展示的图片 54 | */ 55 | //@property (nonatomic , strong , readonly) UIImage *currentImage; 56 | 57 | /** 58 | 需要展示的数据。可能是图片,也可能是视频 59 | */ 60 | @property (nonatomic, strong) KPhoto *photo; 61 | /** 62 | * 展示图片的UIImageView视图 , 回缩的动画用 63 | */ 64 | @property (nonatomic , weak , readonly) UIImageView *imageView; 65 | @property (nonatomic , strong , readonly) UIScrollView *scrollview; 66 | 67 | /** 68 | * 显示图片 69 | * 70 | * @param photo 占位的缩略图 / 或者是高清大图都可以 71 | */ 72 | - (void)setShowHighQualityImageWithPhoto:(KPhoto *)photo; 73 | /** 74 | * 显示图片 75 | * 76 | * @param photo 图片 77 | */ 78 | - (void)setShowImage:(KPhoto *)photo; 79 | /** 80 | * 调整尺寸 81 | */ 82 | - (void)setMaxAndMinZoomScales; 83 | /** 84 | * 重用,清理资源 85 | */ 86 | - (void)prepareForReuse; 87 | 88 | @end 89 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/PageControl/TAAbstractDotView.h: -------------------------------------------------------------------------------- 1 | // 2 | // TAAbstractDotView.h 3 | // TAPageControl 4 | // 5 | // Created by Tanguy Aladenise on 2015-01-22. 6 | // Copyright (c) 2015 Tanguy Aladenise. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface TAAbstractDotView : UIView 13 | 14 | 15 | /** 16 | * A method call let view know which state appearance it should take. Active meaning it's current page. Inactive not the current page. 17 | * 18 | * @param active BOOL to tell if view is active or not 19 | */ 20 | - (void)changeActivityState:(BOOL)active; 21 | 22 | 23 | @end 24 | 25 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/PageControl/TAAbstractDotView.m: -------------------------------------------------------------------------------- 1 | // 2 | // TAAbstractDotView.m 3 | // TAPageControl 4 | // 5 | // Created by Tanguy Aladenise on 2015-01-22. 6 | // Copyright (c) 2015 Tanguy Aladenise. All rights reserved. 7 | // 8 | 9 | #import "TAAbstractDotView.h" 10 | 11 | 12 | @implementation TAAbstractDotView 13 | 14 | 15 | - (id)init 16 | { 17 | @throw [NSException exceptionWithName:NSInternalInconsistencyException 18 | reason:[NSString stringWithFormat:@"You must override %@ in %@", NSStringFromSelector(_cmd), self.class] 19 | userInfo:nil]; 20 | } 21 | 22 | 23 | - (void)changeActivityState:(BOOL)active 24 | { 25 | @throw [NSException exceptionWithName:NSInternalInconsistencyException 26 | reason:[NSString stringWithFormat:@"You must override %@ in %@", NSStringFromSelector(_cmd), self.class] 27 | userInfo:nil]; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/PageControl/TAAnimatedDotView.h: -------------------------------------------------------------------------------- 1 | // 2 | // TAAnimatedDotView.h 3 | // TAPageControl 4 | // 5 | // Created by Tanguy Aladenise on 2015-01-22. 6 | // Copyright (c) 2015 Tanguy Aladenise. All rights reserved. 7 | // 8 | 9 | #import "TAAbstractDotView.h" 10 | 11 | @interface TAAnimatedDotView : TAAbstractDotView 12 | 13 | @property (nonatomic, strong) UIColor *dotColor; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/PageControl/TAAnimatedDotView.m: -------------------------------------------------------------------------------- 1 | // 2 | // TAAnimatedDotView.m 3 | // TAPageControl 4 | // 5 | // Created by Tanguy Aladenise on 2015-01-22. 6 | // Copyright (c) 2015 Tanguy Aladenise. All rights reserved. 7 | // 8 | 9 | #import "TAAnimatedDotView.h" 10 | 11 | static CGFloat const kAnimateDuration = 1; 12 | 13 | @implementation TAAnimatedDotView 14 | 15 | - (instancetype)init 16 | { 17 | self = [super init]; 18 | if (self) { 19 | [self initialization]; 20 | } 21 | 22 | return self; 23 | } 24 | 25 | 26 | - (id)initWithFrame:(CGRect)frame 27 | { 28 | self = [super initWithFrame:frame]; 29 | if (self) { 30 | [self initialization]; 31 | } 32 | return self; 33 | } 34 | 35 | 36 | - (id)initWithCoder:(NSCoder *)aDecoder 37 | { 38 | self = [super initWithCoder:aDecoder]; 39 | if (self) { 40 | [self initialization]; 41 | } 42 | 43 | return self; 44 | } 45 | 46 | - (void)setDotColor:(UIColor *)dotColor 47 | { 48 | _dotColor = dotColor; 49 | self.layer.borderColor = dotColor.CGColor; 50 | } 51 | 52 | - (void)initialization 53 | { 54 | _dotColor = [UIColor whiteColor]; 55 | self.backgroundColor = [UIColor clearColor]; 56 | self.layer.cornerRadius = CGRectGetWidth(self.frame) / 2; 57 | self.layer.borderColor = [UIColor whiteColor].CGColor; 58 | self.layer.borderWidth = 1; 59 | } 60 | 61 | 62 | - (void)changeActivityState:(BOOL)active 63 | { 64 | if (active) { 65 | [self animateToActiveState]; 66 | } else { 67 | [self animateToDeactiveState]; 68 | } 69 | } 70 | 71 | static CGFloat damping = 0.25; 72 | 73 | - (void)animateToActiveState 74 | { 75 | [UIView animateWithDuration:kAnimateDuration delay:0 usingSpringWithDamping:damping initialSpringVelocity:-20 options:UIViewAnimationOptionCurveLinear animations:^{ 76 | self.backgroundColor = _dotColor; 77 | self.transform = CGAffineTransformMakeScale(1.4, 1.4); 78 | } completion:nil]; 79 | } 80 | 81 | - (void)animateToDeactiveState 82 | { 83 | [UIView animateWithDuration:kAnimateDuration delay:0 usingSpringWithDamping:damping initialSpringVelocity:0 options:UIViewAnimationOptionCurveLinear animations:^{ 84 | self.backgroundColor = [UIColor clearColor]; 85 | self.transform = CGAffineTransformIdentity; 86 | } completion:nil]; 87 | } 88 | 89 | @end 90 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/PageControl/TADotView.h: -------------------------------------------------------------------------------- 1 | // 2 | // TADotView.h 3 | // TAPageControl 4 | // 5 | // Created by Tanguy Aladenise on 2015-01-22. 6 | // Copyright (c) 2015 Tanguy Aladenise. All rights reserved. 7 | // 8 | 9 | #import "TAAbstractDotView.h" 10 | 11 | @interface TADotView : TAAbstractDotView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /RChat/Messages/BAPhotoBrowser/View/PageControl/TADotView.m: -------------------------------------------------------------------------------- 1 | // 2 | // TADotView.m 3 | // TAPageControl 4 | // 5 | // Created by Tanguy Aladenise on 2015-01-22. 6 | // Copyright (c) 2015 Tanguy Aladenise. All rights reserved. 7 | // 8 | 9 | #import "TADotView.h" 10 | 11 | @implementation TADotView 12 | 13 | 14 | - (instancetype)init 15 | { 16 | self = [super init]; 17 | if (self) { 18 | [self initialization]; 19 | } 20 | 21 | return self; 22 | } 23 | 24 | 25 | - (id)initWithFrame:(CGRect)frame 26 | { 27 | self = [super initWithFrame:frame]; 28 | if (self) { 29 | [self initialization]; 30 | } 31 | return self; 32 | } 33 | 34 | 35 | - (id)initWithCoder:(NSCoder *)aDecoder 36 | { 37 | self = [super initWithCoder:aDecoder]; 38 | if (self) { 39 | [self initialization]; 40 | } 41 | 42 | return self; 43 | } 44 | 45 | - (void)initialization 46 | { 47 | self.backgroundColor = [UIColor clearColor]; 48 | self.layer.cornerRadius = CGRectGetWidth(self.frame) / 2; 49 | self.layer.borderColor = [UIColor whiteColor].CGColor; 50 | self.layer.borderWidth = 1; 51 | } 52 | 53 | 54 | - (void)changeActivityState:(BOOL)active 55 | { 56 | if (active) { 57 | self.backgroundColor = [UIColor whiteColor]; 58 | } else { 59 | self.backgroundColor = [UIColor clearColor]; 60 | } 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /RChat/Messages/Category/KNetworkDetection.h: -------------------------------------------------------------------------------- 1 | // 2 | // KNetworkDetection.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/7/3. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KNetworkDetection : NSObject 12 | 13 | /** 14 | 单例 15 | 16 | @return 实例对象 17 | */ 18 | + (instancetype)shareInstance; 19 | 20 | /** 21 | 检测网络是否可用 22 | 23 | @return YES:可用,NO:不可用 24 | */ 25 | - (BOOL)checkNetCanUse; 26 | 27 | /** 28 | 过滤html 29 | 30 | @param html HTML页面 31 | @return HTML字符串 32 | */ 33 | - (NSString *)filterHTML:(NSString *)html; 34 | @end 35 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSArray+Json.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Json.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/6/19. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSArray (Json) 12 | 13 | /** 14 | json转数组 15 | 16 | @param jsonStr json字符串 17 | @return 数组 18 | */ 19 | + (instancetype)arrayWithJsonStr:(NSString *)jsonStr; 20 | 21 | /** 22 | 数组转json 23 | 24 | @return json字符串 25 | */ 26 | - (NSString *)toJSONString; 27 | @end 28 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSArray+Json.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Json.m 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/6/19. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "NSArray+Json.h" 10 | 11 | @implementation NSArray (Json) 12 | 13 | /** 14 | json转数组 15 | 16 | @param jsonStr json字符串 17 | @return 数组 18 | */ 19 | + (instancetype)arrayWithJsonStr:(NSString *)jsonStr { 20 | if (!jsonStr) { 21 | return nil; 22 | } 23 | return [NSJSONSerialization JSONObjectWithData:[jsonStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments | NSJSONReadingMutableLeaves | NSJSONReadingMutableContainers error:nil]; 24 | } 25 | 26 | /** 27 | 数组转json 28 | 29 | @return json字符串 30 | */ 31 | - (NSString *)toJSONString 32 | { 33 | NSData *data = [NSJSONSerialization dataWithJSONObject:self 34 | options:NSJSONReadingMutableLeaves | NSJSONReadingAllowFragments 35 | error:nil]; 36 | 37 | if (data == nil) { 38 | return nil; 39 | } 40 | 41 | NSString *string = [[NSString alloc] initWithData:data 42 | encoding:NSUTF8StringEncoding]; 43 | return string; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSAttributedString+Addition.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSAttributedString+Addition.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KTextBackedString; 12 | 13 | @interface NSAttributedString (Addition) 14 | 15 | - (NSRange)rangeOfAll; 16 | 17 | - (nullable NSString *)plainTextForRange:(NSRange)range; 18 | 19 | @end 20 | 21 | @interface NSMutableAttributedString (Addition) 22 | 23 | - (void)setTextBackedString:(nullable KTextBackedString *)textBackedString range:(NSRange)range; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSAttributedString+Addition.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSAttributedString+Addition.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "NSAttributedString+Addition.h" 10 | #import "NSTextAttachment+Emoji.h" 11 | 12 | @implementation NSAttributedString (Addition) 13 | 14 | - (NSRange)rangeOfAll 15 | { 16 | return NSMakeRange(0, self.length); 17 | } 18 | 19 | - (NSString *)plainTextForRange:(NSRange)range 20 | { 21 | if (range.location == NSNotFound || range.length == NSNotFound) { 22 | return nil; 23 | } 24 | 25 | NSMutableString *result = [[NSMutableString alloc] init]; 26 | if (range.length == 0) { 27 | return result; 28 | } 29 | 30 | NSString *string = self.string; 31 | [self enumerateAttribute:NSAttachmentAttributeName inRange:range options:kNilOptions usingBlock:^(id value, NSRange range, BOOL *stop) { 32 | NSTextAttachment *backed = (NSTextAttachment *)value; 33 | if (backed && backed.emojiName) { 34 | [result appendString:backed.emojiName]; 35 | } else { 36 | [result appendString:[string substringWithRange:range]]; 37 | } 38 | }]; 39 | return result; 40 | } 41 | 42 | @end 43 | 44 | @implementation NSMutableAttributedString (Addition) 45 | 46 | - (void)setTextBackedString:(KTextBackedString *)textBackedString range:(NSRange)range 47 | { 48 | if (textBackedString && ![NSNull isEqual:textBackedString]) { 49 | [self addAttribute:NSAttachmentAttributeName value:textBackedString range:range]; 50 | } else { 51 | [self removeAttribute:NSAttachmentAttributeName range:range]; 52 | } 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSDate+KCategory.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDate+KCategory.h 3 | // KRhinoMail 4 | // 5 | // Created by RPK on 2017/7/19. 6 | // Copyright © 2017年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDate (KCategory) 12 | 13 | /** 14 | *比较from和self的时间差值 15 | */ 16 | + (NSDateComponents *)deltaFrom:(NSDate *)from; 17 | 18 | /** 19 | 获取当前时间 20 | 21 | @param dateFormat 时间格式 22 | @return 时间字符串 23 | */ 24 | + (NSString *)getCurrentStringTimesWithdateFormat:(NSString *)dateFormat; 25 | 26 | /** 27 | 获取当前时间 28 | */ 29 | + (NSDate *)getCurrentDateTimes; 30 | 31 | /** 32 | *是否为今年 33 | */ 34 | - (BOOL)isThisYear; 35 | 36 | /** 37 | *是否为今天 38 | */ 39 | - (BOOL)isToday; 40 | 41 | /** 42 | *是否为昨天 43 | */ 44 | - (BOOL)isYesterday; 45 | 46 | /** 47 | 是否在一周内 48 | */ 49 | - (BOOL)isWeek; 50 | 51 | /** 52 | 根据不同格式,格式化时间戳 53 | 54 | @param date 时间戳 55 | @return 格式化后的时间 56 | */ 57 | + (NSString *)dateFormatter:(NSDate *)date; 58 | 59 | // 获取当前时间戳 60 | + (NSString *)getCurrentTimestamp; 61 | 62 | /** 63 | 消息模块部分 64 | 根据不同格式,格式化时间戳 65 | 66 | @param date 时间戳 67 | @return 格式化后的时间 68 | */ 69 | + (NSString *)messageWithDate:(NSDate *)date; 70 | 71 | /** 72 | 时间加随机数 73 | */ 74 | + (NSString *)timeAndRandom; 75 | 76 | /** 77 | 消息id 78 | 79 | @return 本地消息id 80 | */ 81 | + (NSString *)localMessageId; 82 | 83 | /** 84 | 两个时间差 85 | 86 | @param preTime 上一条消息的时间 87 | @param lastTime 最后一条消息的时间 88 | @return 是否显示时间 89 | */ 90 | + (BOOL)showTimeWithPreviousTime:(NSTimeInterval)preTime lastTime:(NSTimeInterval)lastTime; 91 | 92 | /** 93 | 聊天页面消息时间显示 94 | 95 | @param recvTime 服务器收到的时间 96 | @return 处理好的时间 97 | */ 98 | + (NSString *)messageTimeWithRecvTime:(NSTimeInterval)recvTime; 99 | 100 | /** 101 | 会话页面消息时间显示 102 | 103 | @param recvTime 服务器收到的时间 104 | @return 处理好的时间 105 | */ 106 | + (NSString *)conversationTimeWithRecvTime:(NSTimeInterval)recvTime; 107 | 108 | @end 109 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSDictionary+Json.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+Json.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/6/12. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDictionary (Json) 12 | 13 | /** 14 | json转字典 15 | 16 | @param jsonString json字符串 17 | @return 转换后的字典 18 | */ 19 | + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString; 20 | 21 | /** 22 | 字典转json 23 | 24 | @return json字符串 25 | */ 26 | - (NSString *)dictionaryTurnJson; 27 | 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSDictionary+Json.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+Json.m 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/6/12. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "NSDictionary+Json.h" 10 | 11 | @implementation NSDictionary (Json) 12 | 13 | /** 14 | json转字典 15 | 16 | @param jsonString json字符串 17 | @return 字典 18 | */ 19 | + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { 20 | 21 | if (jsonString == nil || [jsonString isEqualToString:@""]) { 22 | return nil; 23 | } 24 | 25 | NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 26 | NSError *err; 27 | NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err]; 28 | 29 | if(err) { 30 | NSLog(@"json解析失败:%@", err); 31 | return nil; 32 | } 33 | 34 | return dic; 35 | } 36 | 37 | /** 38 | 字典转json 39 | 40 | @return json 41 | */ 42 | - (NSString *)dictionaryTurnJson 43 | { 44 | NSError *parseError = nil; 45 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&parseError]; 46 | 47 | return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSString+Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Category.h 3 | // RChat 4 | // 5 | // Created by eims on 2018/9/4. 6 | // Copyright © 2018年 RPK. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Category) 12 | // 判断字符串是否是全空格 13 | - (BOOL)isEmptyString; 14 | @end 15 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSString+Category.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Category.m 3 | // RChat 4 | // 5 | // Created by eims on 2018/9/4. 6 | // Copyright © 2018年 RPK. All rights reserved. 7 | // 8 | 9 | #import "NSString+Category.h" 10 | 11 | @implementation NSString (Category) 12 | 13 | // 判断字符串是否是全空格 14 | - (BOOL)isEmptyString 15 | { 16 | if (!self || !self.length) 17 | { 18 | return true; 19 | } 20 | else 21 | { 22 | NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; 23 | NSString *isString = [self stringByTrimmingCharactersInSet:set]; 24 | 25 | if ([isString length] == 0) 26 | { 27 | return true; 28 | } 29 | else 30 | { 31 | return false; 32 | } 33 | } 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSString+Size.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Size.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Size) 12 | 13 | - (CGSize)kSizeWithFont:(UIFont *)font; 14 | - (CGSize)kSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode; 15 | 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSString+Size.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Size.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "NSString+Size.h" 10 | 11 | @implementation NSString (Size) 12 | 13 | - (CGSize)kSizeWithFont:(UIFont *)font 14 | { 15 | return [self kSizeWithFont:font constrainedToSize:CGSizeMake(CGFLOAT_MAX, 1) lineBreakMode:NSLineBreakByWordWrapping]; 16 | } 17 | 18 | - (CGSize)kSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode 19 | { 20 | NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init]; 21 | 22 | if (font) { 23 | attributes[NSFontAttributeName] = font; 24 | } 25 | 26 | NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 27 | paragraphStyle.lineBreakMode = lineBreakMode; 28 | attributes[NSParagraphStyleAttributeName] = paragraphStyle; 29 | 30 | return [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size; 31 | } 32 | 33 | 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSTextAttachment+Emoji.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextAttachment+Emoji.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/25. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSTextAttachment (Emoji) 12 | 13 | @property (nonatomic, strong) NSString *emojiName; 14 | 15 | @property (nonatomic, assign) id emojiSize; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /RChat/Messages/Category/NSTextAttachment+Emoji.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextAttachment+Emoji.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/25. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "NSTextAttachment+Emoji.h" 10 | 11 | static const char *emojiNameKey = "emojiName"; 12 | static const char *emojiSizeKey = "emojiSize"; 13 | 14 | @implementation NSTextAttachment (Emoji) 15 | 16 | - (NSString *)emojiName { 17 | return objc_getAssociatedObject(self, emojiNameKey); 18 | } 19 | 20 | - (void)setEmojiName:(NSString *)emojiName { 21 | objc_setAssociatedObject(self, emojiNameKey, emojiName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 22 | } 23 | 24 | - (id)emojiSize { 25 | return objc_getAssociatedObject(self, emojiSizeKey); 26 | } 27 | 28 | - (void)setEmojiSize:(id)emojiSize { 29 | objc_setAssociatedObject(self, emojiSizeKey, emojiSize, OBJC_ASSOCIATION_ASSIGN); 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIImage+Color.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Color.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/27. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (Color) 12 | 13 | + (UIImage *)imageWithColor:(UIColor *)color; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIImage+Color.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Color.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/27. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "UIImage+Color.h" 10 | 11 | @implementation UIImage (Color) 12 | 13 | + (UIImage *)imageWithColor:(UIColor *)color 14 | { 15 | CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); 16 | UIGraphicsBeginImageContext(rect.size); 17 | CGContextRef context = UIGraphicsGetCurrentContext(); 18 | CGContextSetFillColorWithColor(context, [color CGColor]); 19 | CGContextFillRect(context, rect); 20 | UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext(); 21 | UIGraphicsEndImageContext(); 22 | 23 | return theImage; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIImage+Compression.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Compression.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/6/26. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (Compression) 12 | 13 | /** 14 | 压缩图片到指定大小 15 | @param maxLength 设置的最大字节数(以KB为单位) 16 | @return 返回图片 17 | */ 18 | - (NSData *)compressImageWithKilobyte:(NSInteger)maxLength; 19 | /** 20 | * 压缩图片 21 | * 22 | * @param fImageKBytes 希望压缩后的大小(以KB为单位) 23 | */ 24 | - (void)compressedWithImageKilobyte:(CGFloat)fImageKBytes 25 | imageBlock:(void(^)(NSData *imageData))block; 26 | 27 | /** 28 | 压缩图片 29 | 30 | @param fImageKBytes fImageKBytes 希望压缩后的大小(以KB为单位) 31 | @return 返回处理好的图片 32 | */ 33 | - (NSData *)compressedWithImageKilobyte:(CGFloat)fImageKBytes; 34 | 35 | /* 根据 dWidth dHeight 返回一个新的image**/ 36 | - (UIImage *)drawWithNewImageSize:(CGSize)imageSize; 37 | @end 38 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIImage+KVideo.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+KVideo.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/16. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (KVideo) 12 | 13 | /** 14 | 获取视频地址缩略图 15 | 16 | @param videoURL 视频地址 17 | @return 缩略图 18 | */ 19 | + (UIImage *)imageWithVideo:(NSURL *)videoURL; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIImage+KVideo.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+KVideo.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/16. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "UIImage+KVideo.h" 10 | 11 | #import 12 | 13 | @implementation UIImage (KVideo) 14 | 15 | 16 | /** 17 | 获取视频地址缩略图 18 | 19 | @param videoURL 视频地址 20 | @return 缩略图 21 | */ 22 | + (UIImage *)imageWithVideo:(NSURL *)videoURL { 23 | 24 | AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; 25 | 26 | AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 27 | 28 | gen.appliesPreferredTrackTransform = YES; 29 | 30 | CMTime time = CMTimeMakeWithSeconds(0.0, 600); 31 | 32 | NSError *error = nil; 33 | 34 | CMTime actualTime; 35 | 36 | CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error]; 37 | 38 | UIImage *thumb = [[UIImage alloc] initWithCGImage:image]; 39 | 40 | CGImageRelease(image); 41 | 42 | return thumb; 43 | } 44 | 45 | 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UILabel+KAutoLabelHeightAndWidth.h: -------------------------------------------------------------------------------- 1 | // 2 | // UILabel+KAutoLabelHeightAndWidth.h 3 | // ShoveCrowdfunding 4 | // 5 | // Created by RPK on 16/5/6. 6 | // Copyright © 2016年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UILabel (KAutoLabelHeightAndWidth) 12 | 13 | /** 14 | * 自适应获取文本高度 15 | * 16 | * @param width 文本宽度 17 | * @param title 文本内容 18 | * @param font 字体属性 19 | * 20 | * @return 高度 21 | */ 22 | + (CGFloat)getHeightByWidth:(CGFloat)width title:(NSString *)title font:(UIFont *)font; 23 | 24 | /** 25 | * 自适应获取宽度 26 | * 27 | * @param title 文本内容 28 | * @param font 字体属性 29 | * 30 | * @return 宽度 31 | */ 32 | + (CGFloat)getWidthWithTitle:(NSString *)title font:(UIFont *)font; 33 | 34 | 35 | 36 | /** 37 | 设置行距、间距,动态获取字符串高度 38 | 39 | @param titleString 文本内容 40 | @param font 字体属性 41 | @param width 最大宽度 42 | @param lineSpace 行距 43 | @param wordSpace 间距 44 | @return 高度 45 | */ 46 | + (CGFloat)getSpaceLabelHeight:(NSString *)titleString font:(UIFont *)font width:(CGFloat)width withLineSpace:(float)lineSpace WordSpace:(float)wordSpace; 47 | 48 | /** 49 | * 改变行间距 50 | */ 51 | + (void)changeLineSpaceForLabel:(UILabel *)label WithSpace:(float)space; 52 | 53 | /** 54 | * 改变字间距 55 | */ 56 | + (void)changeWordSpaceForLabel:(UILabel *)label WithSpace:(float)space; 57 | 58 | /** 59 | * 改变行间距和字间距 60 | */ 61 | + (void)changeSpaceForLabel:(UILabel *)label withLineSpace:(float)lineSpace WordSpace:(float)wordSpace; 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIScrollView+Addition.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+Addition.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIScrollView (Addition) 12 | 13 | - (CGPoint)maximumContentOffset; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIScrollView+Addition.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+Addition.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "UIScrollView+Addition.h" 10 | 11 | @implementation UIScrollView (Addition) 12 | 13 | - (CGPoint)maximumContentOffset { 14 | CGRect bounds = self.bounds; 15 | CGSize contentSize = self.contentSize; 16 | UIEdgeInsets contentInset = self.contentInset; 17 | 18 | CGFloat x = MAX(-contentInset.left, contentSize.width + contentInset.right - bounds.size.width); 19 | CGFloat y = MAX(-contentInset.top, contentSize.height + contentInset.bottom - bounds.size.height); 20 | 21 | return CGPointMake(x, y); 22 | } 23 | 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIView+KExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+KExtension.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/2. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (KExtension) 12 | // view最大的x 13 | @property (nonatomic, assign) CGFloat kMax_x; 14 | // view最大的y 15 | @property (nonatomic, assign) CGFloat kMax_y; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIView+KExtension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+KExtension.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/2. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "UIView+KExtension.h" 10 | 11 | @implementation UIView (KExtension) 12 | // 给view的最大的x赋值,并重新定义view的位置 13 | - (void)setKMax_x:(CGFloat)kMax_x { 14 | self.frame = CGRectMake(kMax_x - self.mj_w, self.mj_y, self.mj_w, self.mj_h); 15 | } 16 | 17 | - (CGFloat)kMax_x { 18 | return self.mj_w + self.mj_x; 19 | } 20 | // 给view的最大的y赋值,并重新定义view的位置 21 | - (void)setKMax_y:(CGFloat)kMax_y { 22 | self.frame = CGRectMake(self.mj_x, kMax_y - self.mj_h, self.mj_w, self.mj_h); 23 | } 24 | 25 | - (CGFloat)kMax_y { 26 | return self.mj_y + self.mj_h; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIViewController+KCategory.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+KCategory.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/6/30. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIViewController (KCategory) 12 | 13 | //获取当前屏幕显示的viewcontroller 14 | - (UIViewController *)getCurrentVC; 15 | @end 16 | -------------------------------------------------------------------------------- /RChat/Messages/Category/UIViewController+KCategory.m: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // UIViewController+KCategory.m 4 | // KXiniuCloud 5 | // 6 | // Created by RPK on 2018/6/30. 7 | // Copyright © 2018年 EIMS. All rights reserved. 8 | // 9 | 10 | #import "UIViewController+KCategory.h" 11 | 12 | 13 | 14 | @implementation UIViewController (KCategory) 15 | 16 | 17 | //获取当前屏幕显示的viewcontroller 18 | - (UIViewController *)getCurrentVC 19 | { 20 | return [UIApplication sharedApplication].keyWindow.rootViewController; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /RChat/Messages/Common/BaseViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BaseViewController.h 3 | // ShoveCrowdfunding 4 | // 5 | // Created by RPK on 16/4/28. 6 | // Copyright © 2015年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BaseViewController : UIViewController 12 | 13 | /** 14 | 权限设置 15 | 16 | @param title 提示标题 17 | @param message 提示内容 18 | @param block 回调 19 | */ 20 | - (void)settingAuthorizationWithTitle:(NSString *)title message:(NSString *)message cancel:(void (^)(BOOL))block; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /RChat/Messages/Common/KFileCache.h: -------------------------------------------------------------------------------- 1 | // 2 | // KFileCache.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/8/14. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^SaveComplete)(NSString *filePath, NSURL *url, NSError *error); 12 | typedef void(^WhetherFileExists)(NSString *filePath, BOOL exist); 13 | 14 | @interface KFileCache : NSObject 15 | 16 | + (instancetype)shareInstance; 17 | 18 | /** 19 | 文件缓存 20 | 21 | @param strURL 文件url 22 | @param type 类型 23 | @param saveComplete 保存完成 24 | */ 25 | -(void)fileUrl:(NSString *)strURL type:(NSString *)type saveComplete:(SaveComplete)saveComplete; 26 | 27 | /** 28 | 根据文件url获取是否存在缓存 29 | 30 | @param url 文件url 31 | @param fileExists 回调 32 | */ 33 | -(void)filePath:(NSString *)url fileExists:(WhetherFileExists)fileExists; 34 | 35 | 36 | /** 37 | 文件下载 38 | 39 | @param url 文件url 40 | @param success 成功回调 41 | @param failure 失败回调 42 | */ 43 | - (void)downloadFileWithURL:(NSString *)url 44 | success:(void (^)(NSString *requestUrl, NSString *filePath))success 45 | failure:(void (^)(NSString *requestUrl, NSError *error))failure; 46 | 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /RChat/Messages/Common/KFileManagement.h: -------------------------------------------------------------------------------- 1 | // 2 | // KFileManagement.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2017/10/16. 6 | // Copyright © 2017年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KFileManagement : NSObject 12 | 13 | /** 14 | 在 Cache 沙盒中创建文件夹 15 | 16 | @param folderPath 文件夹名称 17 | */ 18 | + (void)createDirectoryAtPath:(NSString *)folderPath; 19 | 20 | /** 21 | 将图片存储到本地 22 | */ 23 | + (void)saveImageFile:(NSArray *)imagesData; 24 | 25 | /** 26 | 储存本地图片附件,并获取存储后的相对路径(,分割) 27 | 28 | @param imagesData 图片数组 29 | @param emailId 邮件ID 30 | @return 储存后的相对路径 31 | */ 32 | + (NSString *)saveImageFileAndGetImages:(NSArray *)imagesData 33 | emailId:(NSString *)emailId; 34 | 35 | /** 36 | 图片的存到本地之后的读取 37 | */ 38 | + (UIImage *)getImageFile:(NSString *)imageString; 39 | 40 | /** 41 | 删除缓存图片 42 | */ 43 | + (void)deleteCacheAttachments; 44 | 45 | /** 46 | 拷贝文件 47 | 48 | @param fileName 沙盒路径 49 | @param sourcesPath 资源路径 50 | */ 51 | + (BOOL)copyFilePath:(NSString *)fileName sourcesPath:(NSString *)sourcesPath; 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /RChat/Messages/Common/KSystemAuthorization.h: -------------------------------------------------------------------------------- 1 | // 2 | // KSystemAuthorization.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/7/4. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import 12 | #import 13 | 14 | @interface KSystemAuthorization : NSObject 15 | // 单例实例 16 | + (instancetype)shareInstance; 17 | 18 | /** 19 | 获取相机权限 20 | 21 | @return 是否授权 22 | */ 23 | - (BOOL)checkCameraAuthorization; 24 | 25 | /** 26 | 获取语音权限 27 | 28 | @return 是否授权 29 | */ 30 | - (BOOL)checkAudioAuthrization; 31 | 32 | /** 33 | 获取访问相册权限 34 | 35 | @return 是否授权 36 | */ 37 | - (BOOL)checkPhotoAlbumAuthorization; 38 | 39 | /** 40 | 跳转到设置页面 41 | */ 42 | - (void)requetSettingForAuth; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /RChat/Messages/Controller/KChatViewController+Image.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatViewController+Image.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/11. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KChatViewController.h" 10 | 11 | @interface KChatViewController (Image) 12 | 13 | /** 14 | 从相册选择照片 15 | */ 16 | - (void)selectPhoto; 17 | 18 | /** 19 | 拍照或者录短视频 20 | */ 21 | - (void)takePhoto; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /RChat/Messages/Controller/KChatViewController+Voice.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatViewController+Voice.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/16. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KChatViewController.h" 10 | 11 | @interface KChatViewController (Voice) 12 | 13 | @property (nonatomic, strong) NSTimer *timer; /**定时器*/ 14 | @property (nonatomic, assign) CGFloat recordTime; /**录音时长*/ 15 | @property (nonatomic, strong) NSString *audioUrl; /**录音地址*/ 16 | @property (nonatomic, strong) NSDictionary *recordSetting; /**录音设置*/ 17 | @property (nonatomic, strong) AVAudioSession *audioSession; 18 | @property (nonatomic, strong) AVAudioRecorder *audioRecorder; /**录音机*/ 19 | @property (nonatomic, assign) NSInteger recordStatus; /**录音状态*/ 20 | @property (nonatomic, assign) NSInteger recordIndexPathRow; /**当前正在录音的索引*/ 21 | @property (nonatomic, strong) KMessageModel *prevMessage; /**前一条消息*/ 22 | @property (nonatomic, strong) UIImageView *voiceImageView; /**语音图片*/ 23 | @property (nonatomic, strong) AVAudioPlayer *audioPlayer; /**音频播放器*/ 24 | @property (nonatomic, strong) KInputBoxRecorderView *recordView; /**录音提示框*/ 25 | 26 | /** 27 | 录音部分初始化 28 | */ 29 | - (void)initVoiceData; 30 | 31 | /** 32 | 开始录音 33 | */ 34 | - (void)startRecording; 35 | 36 | /** 37 | 停止录音 38 | */ 39 | - (void)stopRecord; 40 | 41 | /** 42 | 绘制页面 43 | */ 44 | - (void)recordStartDrawView; 45 | 46 | 47 | - (void)replaceVoiceMessage; 48 | 49 | - (void)removeVoiceMessage; 50 | 51 | /** 52 | 点击消息播放语音 53 | 54 | @param tableViewCell cell 55 | @param messageModel 语音数据 56 | */ 57 | - (void)playAudioWithTableViewCell:(id)tableViewCell messageModel:(KMessageModel *)messageModel; 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /RChat/Messages/Controller/KMessagesViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KMessagesViewController.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/4/17. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | 10 | @interface KMessagesViewController : UIViewController 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /RChat/Messages/Controller/KSearchMessageViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KSearchMessageViewController.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/21. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | 10 | 11 | @interface KSearchMessageViewController : UIViewController 12 | 13 | @property (nonatomic, strong) UISearchBar *searchBar; 14 | @property (nonatomic, strong) UITableView *listView; 15 | @property (nonatomic, strong) UINavigationController *navigationBarCtrl; 16 | 17 | @end 18 | 19 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Controller/KVideoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KVideoViewController.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/15. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^TakeOperationSureBlock)(id item, NSString *filePath); 12 | 13 | @interface KVideoViewController : UIViewController 14 | 15 | @property (copy, nonatomic) TakeOperationSureBlock takeBlock; 16 | // 视频最大时长 17 | @property (assign, nonatomic) CGFloat maxDuration; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Model/KEmojiGroup.h: -------------------------------------------------------------------------------- 1 | // 2 | // KEmojiGroup.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/28. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | 13 | @interface KEmojiGroup : NSObject 14 | // 表情类型 15 | @property (nonatomic, assign) KEmojiType emojiType; 16 | // 表情组id 17 | @property (nonatomic, copy) NSString *groupID; 18 | // 表情组名 19 | @property (nonatomic, copy) NSString *groupName; 20 | 21 | @end 22 | 23 | @class KEmojiModel; 24 | @interface KEmojiGroupManager : NSObject 25 | 26 | @property (nonatomic, strong) NSArray *emojiGroup; 27 | 28 | @property (nonatomic, strong) NSMutableArray *currentEmojiList; 29 | 30 | @property (nonatomic, strong) KEmojiGroup *currentGroup; 31 | 32 | + (instancetype)shareManager; 33 | 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Model/KEmojiModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // KEmojiModel.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/28. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KEmojiModel : NSObject 12 | // 表情id 13 | @property (nonatomic, strong) NSString *emojiID; 14 | // 表情名 15 | @property (nonatomic, strong) NSString *emojiName; 16 | 17 | @property (nonatomic, strong) NSString *name; 18 | 19 | //@property (nonatomic, strong, readonly) UIImage *image; 20 | 21 | @end 22 | 23 | 24 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Model/KEmojiModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiModel.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/28. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KEmojiModel.h" 10 | 11 | 12 | @implementation KEmojiModel 13 | 14 | //- (void)setName:(NSString *)name { 15 | // _name = name; 16 | // CGSize size = CGSizeMake(ITEM_WIDTH -10, ITEM_HEIGHT - 10); 17 | // UIImage * resultImage = [UIImage imageNamed:name]; 18 | // UIGraphicsBeginImageContext(size); 19 | // [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)]; 20 | // UIGraphicsEndImageContext(); 21 | //// _image = resultImage; 22 | //} 23 | 24 | 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Model/KInputBoxMoreModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxMoreModel.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/9. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KInputBoxMoreModel : NSObject 12 | 13 | @property (nonatomic, strong) NSString *extendId; 14 | 15 | @property (nonatomic, strong) NSString *name; 16 | 17 | @property (nonatomic, strong) NSString *imageName; 18 | 19 | @end 20 | 21 | @interface KInputBoxMoreManager : NSObject 22 | 23 | @property (nonatomic, strong) NSMutableArray *moreItemModels; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Model/KInputBoxMoreModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxMoreModel.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/9. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KInputBoxMoreModel.h" 10 | 11 | @implementation KInputBoxMoreModel 12 | 13 | @end 14 | 15 | @implementation KInputBoxMoreManager 16 | 17 | - (NSMutableArray *)moreItemModels 18 | { 19 | if (!_moreItemModels) 20 | { 21 | _moreItemModels = [NSMutableArray array]; 22 | NSString *path = [[NSBundle mainBundle] pathForResource:@"InputBoxMore" ofType:@"plist"]; 23 | NSArray *array = [NSArray arrayWithContentsOfFile:path]; 24 | for (NSDictionary *dic in array) 25 | { 26 | KInputBoxMoreModel *model = [KInputBoxMoreModel new]; 27 | model.extendId = dic[@"extendId"]; 28 | model.name = dic[@"name"]; 29 | model.imageName = dic[@"imageName"]; 30 | [_moreItemModels addObject:model]; 31 | } 32 | } 33 | 34 | return _moreItemModels; 35 | } 36 | 37 | @end 38 | 39 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Model/KTextBackedString.h: -------------------------------------------------------------------------------- 1 | // 2 | // KTextBackedString.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | extern NSString * _Nonnull const KTextBackedStringAttributeName; 12 | 13 | @interface KTextBackedString : NSObject 14 | @property (nullable, nonatomic, copy) NSString *string; 15 | 16 | + (nullable instancetype)stringWithString:(nullable NSString *)string; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Model/KTextBackedString.m: -------------------------------------------------------------------------------- 1 | // 2 | // KTextBackedString.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KTextBackedString.h" 10 | 11 | 12 | NSString *const KTextBackedStringAttributeName = @"PPTextBackedString"; 13 | 14 | @implementation KTextBackedString 15 | 16 | + (instancetype)stringWithString:(NSString *)string 17 | { 18 | KTextBackedString *one = [[self alloc] init]; 19 | one.string = string; 20 | return one; 21 | } 22 | 23 | - (void)encodeWithCoder:(NSCoder *)aCoder 24 | { 25 | [aCoder encodeObject:self.string forKey:@"string"]; 26 | } 27 | 28 | - (id)initWithCoder:(NSCoder *)aDecoder 29 | { 30 | if (self = [super init]) { 31 | _string = [aDecoder decodeObjectForKey:@"string"]; 32 | } 33 | return self; 34 | } 35 | 36 | - (id)copyWithZone:(NSZone *)zone 37 | { 38 | typeof(self) one = [[self.class alloc] init]; 39 | one.string = self.string; 40 | return one; 41 | } 42 | 43 | 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emoji_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emoji_delete.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emoji_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emoji_normal.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aini.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aini_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aini_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aiqing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aiqing.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aiqing_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aiqing_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aixin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aixin.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aixin_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aixin_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aoman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aoman.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_aoman_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_aoman_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baiyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baiyan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baiyan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baiyan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bangbangtang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bangbangtang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bangbangtang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bangbangtang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baobao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baobao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baobao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baobao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baojing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baojing.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baojing_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baojing_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baoquan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baoquan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_baoquan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_baoquan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bianbian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bianbian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bianbian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bianbian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bianpao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bianpao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bianpao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bianpao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_biezui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_biezui.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_biezui_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_biezui_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bishi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bishi.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bishi_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bishi_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bizui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bizui.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_bizui_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_bizui_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_cahan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_cahan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_cahan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_cahan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_caidao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_caidao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_caidao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_caidao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_caiqiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_caiqiu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_caiqiu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_caiqiu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_chajing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_chajing.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_chajing_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_chajing_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_chaopiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_chaopiao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_chaopiao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_chaopiao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_chexiang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_chexiang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_chexiang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_chexiang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ciya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ciya.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ciya_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ciya_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dabing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dabing.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dabing_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dabing_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_daku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_daku.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_daku_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_daku_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dangao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dangao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dangao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dangao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dashan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dashan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dashan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dashan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dashuai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dashuai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dashuai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dashuai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_denglong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_denglong.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_denglong_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_denglong_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dengpao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dengpao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_dengpao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_dengpao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_deyi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_deyi.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_deyi_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_deyi_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_diaoxie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_diaoxie.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_diaoxie_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_diaoxie_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_duoyun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_duoyun.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_duoyun_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_duoyun_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_facai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_facai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_facai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_facai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fadai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fadai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fadai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fadai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fadou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fadou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fadou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fadou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fakuang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fakuang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fakuang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fakuang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fanu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fanu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fanu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fanu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_feiji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_feiji.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_feiji_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_feiji_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_feiwen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_feiwen.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_feiwen_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_feiwen_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fendou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fendou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fendou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fendou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fengche.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fengche.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_fengche_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_fengche_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ganga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ganga.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ganga_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ganga_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_gouwu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_gouwu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_gouwu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_gouwu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_gouying.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_gouying.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_gouying_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_gouying_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_guzhang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_guzhang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_guzhang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_guzhang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_haixiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_haixiu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_haixiu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_haixiu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_hanxiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_hanxiao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_hanxiao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_hanxiao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_haqian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_haqian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_haqian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_haqian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_hecai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_hecai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_hecai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_hecai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_henai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_henai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_henai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_henai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_huaixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_huaixiao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_huaixiao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_huaixiao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_huishou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_huishou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_huishou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_huishou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_huitou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_huitou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_huitou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_huitou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jidong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jidong.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jidong_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jidong_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jie.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jie_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jie_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jiewu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jiewu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jiewu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jiewu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jingkong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jingkong.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jingkong_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jingkong_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jingya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jingya.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_jingya_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_jingya_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kafei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kafei.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kafei_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kafei_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kaiche.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kaiche.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kaiche_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kaiche_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_keai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_keai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_keai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_keai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kelian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kelian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kelian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kelian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ketou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ketou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ketou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ketou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kge.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kge_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kge_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_koubi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_koubi.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_koubi_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_koubi_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ku.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ku_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ku_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kuaikule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kuaikule.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kuaikule_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kuaikule_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kulou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kulou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kulou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kulou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kun.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_kun_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_kun_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_lanqiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_lanqiu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_lanqiu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_lanqiu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_lenghan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_lenghan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_lenghan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_lenghan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_liuhan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_liuhan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_liuhan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_liuhan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_liulei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_liulei.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_liulei_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_liulei_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_liwu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_liwu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_liwu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_liwu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_meigui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_meigui.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_meigui_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_meigui_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_nanguo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_nanguo.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_nanguo_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_nanguo_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_naozhong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_naozhong.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_naozhong_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_naozhong_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_no.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_no_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_no_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ok.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ok_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ok_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ouhuo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ouhuo.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ouhuo_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ouhuo_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_pachong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_pachong.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_pachong_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_pachong_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_pijiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_pijiu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_pijiu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_pijiu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_pingpang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_pingpang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_pingpang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_pingpang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qiang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qiang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qiang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qiang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qiaoda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qiaoda.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qiaoda_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qiaoda_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qidao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qidao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qidao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qidao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qingwa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qingwa.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qingwa_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qingwa_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qinqin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qinqin.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qinqin_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qinqin_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qiudale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qiudale.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_qiudale_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_qiudale_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_quantou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_quantou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_quantou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_quantou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ruo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ruo.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_ruo_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_ruo_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_se.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_se_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_se_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shafa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shafa.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shafa_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shafa_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shandian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shandian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shandian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shandian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shengli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shengli.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shengli_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shengli_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shiai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shiai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shiai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shiai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shouqiang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shouqiang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shouqiang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shouqiang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shuai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shuai.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shuai_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shuai_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shuangxi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shuangxi.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shuangxi_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shuangxi_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shui.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_shui_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_shui_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_taiyang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_taiyang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_taiyang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_taiyang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tiaopi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tiaopi.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tiaopi_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tiaopi_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tiaosheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tiaosheng.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tiaosheng_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tiaosheng_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tiaotiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tiaotiao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tiaotiao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tiaotiao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_touxiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_touxiao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_touxiao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_touxiao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_tu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_tu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_weiqu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_weiqu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_weiqu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_weiqu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_weixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_weixiao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_weixiao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_weixiao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_woshou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_woshou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_woshou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_woshou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xia.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xia_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xia_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiamian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiamian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiamian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiamian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiangjiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiangjiao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiangjiao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiangjiao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xianwen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xianwen.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xianwen_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xianwen_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiayu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiayu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiayu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiayu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xigua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xigua.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xigua_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xigua_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xinsui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xinsui.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xinsui_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xinsui_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiongmao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiongmao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xiongmao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xiongmao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_xu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_xu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yao.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yao_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yao_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yingxian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yingxian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yingxian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yingxian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yiwen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yiwen.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yiwen_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yiwen_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youchexiang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youchexiang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youchexiang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youchexiang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youhengheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youhengheng.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youhengheng_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youhengheng_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youjian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youjian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youjian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youjian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youtaiji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youtaiji.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_youtaiji_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_youtaiji_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yueliang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yueliang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yueliang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yueliang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yun.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_yun_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_yun_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zaijian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zaijian.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zaijian_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zaijian_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhadan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhadan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhadan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhadan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhijing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhijing.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhijing_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhijing_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuakuang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuakuang.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuakuang_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuakuang_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuanjie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuanjie.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuanjie_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuanjie_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuanquan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuanquan.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuanquan_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuanquan_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuqiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuqiu.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhuqiu_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhuqiu_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhutou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhutou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zhutou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zhutou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zouma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zouma.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zouma_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zouma_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zuochetou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zuochetou.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zuochetou_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zuochetou_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zuohengheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zuohengheng.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zuohengheng_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zuohengheng_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zuotaiji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zuotaiji.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/emotion_zuotaiji_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/emotion_zuotaiji_gif.gif -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/Face/msg_state_fail_resend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/Face/msg_state_fail_resend.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/InputBoxMore.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | extendId 7 | 1 8 | name 9 | 照片 10 | imageName 11 | icon_inputBox_more_photo 12 | 13 | 14 | extendId 15 | 2 16 | name 17 | 拍摄 18 | imageName 19 | icon_inputBox_more_take_photo 20 | 21 | 22 | extendId 23 | 3 24 | name 25 | 云邮 26 | imageName 27 | icon_inputBox_more_mail 28 | 29 | 30 | extendId 31 | 4 32 | name 33 | 电话 34 | imageName 35 | icon_inputBox_more_mobile 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_menu_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_menu_add@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_mail@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_mail@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_mobile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_mobile@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_photo@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_back@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_camera@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_camera@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_cancel@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_cancel@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_confirm@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_confirm@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_focusing@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_focusing@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_photograph@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_takeVideo_photograph@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_take_photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_take_photo@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_inputBox_more_take_video@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_inputBox_more_take_video@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_message_emoji_delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_message_emoji_delete@2x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_message_expression@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_message_expression@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_message_keyboard@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_message_keyboard@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_message_more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_message_more@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/Resource/icon_message_voiceBtn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/InputBox/Resource/icon_message_voiceBtn@3x.png -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KEmojiCollectionViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KEmojiCollectionViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/10. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KEmojiCollectionViewCell : UICollectionViewCell 12 | 13 | @property (nonatomic, strong) UIImageView *imageView; 14 | 15 | @property (nonatomic, strong) NSString *imageName; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KEmojiCollectionViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // KEmojiCollectionViewCell.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/10. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KEmojiCollectionViewCell.h" 10 | 11 | 12 | 13 | @implementation KEmojiCollectionViewCell 14 | 15 | - (instancetype)initWithFrame:(CGRect)frame 16 | { 17 | self = [super initWithFrame:frame]; 18 | if (self) 19 | { 20 | [self imageView]; 21 | } 22 | return self; 23 | } 24 | 25 | - (void)prepareForReuse { 26 | [super prepareForReuse]; 27 | [self imageView]; 28 | } 29 | 30 | - (UIImageView *)imageView { 31 | if (!_imageView) { 32 | self.backgroundColor = [ColorTools colorWithHexString:@"0xeeeeee"]; 33 | _imageView = [[UIImageView alloc] initWithFrame:CGRectMake((self.mj_w - ITEM_WIDTH + 10)/2., (self.mj_w - ITEM_HEIGHT + 10)/2., ITEM_WIDTH -10 , ITEM_HEIGHT - 10)]; 34 | _imageView.backgroundColor = self.backgroundColor; 35 | [self addSubview:_imageView]; 36 | } 37 | return _imageView; 38 | } 39 | 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KHorizontalPageFlowlayout.h: -------------------------------------------------------------------------------- 1 | // 2 | // KHorizontalPageFlowlayout.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/10. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KHorizontalPageFlowlayout : UICollectionViewFlowLayout 12 | 13 | // 列间距 14 | @property (nonatomic, assign) CGFloat columnSpacing; 15 | // 行间距 16 | @property (nonatomic, assign) CGFloat rowSpacing; 17 | // collectionView的内边距 18 | @property (nonatomic, assign) UIEdgeInsets edgeInsets; 19 | 20 | // 多少行 21 | @property (nonatomic, assign) NSInteger rowCount; 22 | // 每行展示多少个item 23 | @property (nonatomic, assign) NSInteger itemCountPerRow; 24 | 25 | // 所有item的属性数组 26 | @property (nonatomic, strong) NSMutableArray *attributesArrayM; 27 | 28 | @property (nonatomic, assign) NSInteger pageNumber; 29 | 30 | /** 31 | 设置行列间距及collectionView的内边距 32 | */ 33 | - (void)setColumnSpacing:(CGFloat)columnSpacing 34 | rowSpacing:(CGFloat)rowSpacing 35 | edgeInsets:(UIEdgeInsets)edgeInsets; 36 | /** 37 | 设置多少行及每行展示的item个数 38 | */ 39 | - (void)setRowCount:(NSInteger)rowCount 40 | itemCountPerRow:(NSInteger)itemCountPerRow; 41 | 42 | #pragma mark - 构造方法 43 | /** 44 | 设置多少行及每行展示的item个数 45 | */ 46 | + (instancetype)KHorizontalPageFlowlayoutWithRowCount:(NSInteger)rowCount 47 | itemCountPerRow:(NSInteger)itemCountPerRow; 48 | /** 49 | 设置多少行及每行展示的item个数 50 | */ 51 | - (instancetype)initWithRowCount:(NSInteger)rowCount 52 | itemCountPerRow:(NSInteger)itemCountPerRow; 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxEmojiMenuView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxEmojiMenuView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/28. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KInputBoxViewDelegate.h" 12 | 13 | @interface KInputBoxEmojiMenuView : UIView 14 | // 添加表情按钮 15 | @property (nonatomic, strong) UIButton *addButton; 16 | // 发送表情按钮 17 | @property (nonatomic, strong) UIButton *sendButton; 18 | // 输入框下面的菜单视图 19 | @property (nonatomic, strong) UIScrollView *scrollView; 20 | 21 | @property (nonatomic, strong) UIButton *lastSelectEemojiGroup; 22 | 23 | @property (nonatomic, assign) id delegate; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxEmojiView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxEmojiView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/10. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KInputBoxViewDelegate.h" 12 | #import "KInputBoxEmojiMenuView.h" 13 | 14 | @interface KInputBoxEmojiView : UIView 15 | 16 | @property (nonatomic, assign) id delegate; 17 | // 表情菜单 18 | @property (nonatomic, strong) KInputBoxEmojiMenuView *menuView; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxMoreItemView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxMoreItemView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/7. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KInputBoxMoreItemView : UIView 12 | 13 | /** 14 | 更多视图中的所有视图 15 | */ 16 | @property (nonatomic, strong) NSMutableArray *moreUnitViews; 17 | 18 | /** 19 | 显示视图 20 | 21 | @param fromIndex 开始位置 22 | @param count 结束位置 23 | */ 24 | - (void)showEmojiGroupDetailFromIndex:(NSInteger)fromIndex count:(NSInteger)count; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxMoreUnitView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxMoreUnitView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/10. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KInputBoxMoreModel; 12 | 13 | @interface KInputBoxMoreUnitView : UIControl 14 | 15 | // 框 16 | @property (nonatomic, strong) UIView *box; 17 | // 图标 18 | @property (nonatomic, strong) UIImageView *imageView; 19 | // 文字 20 | @property (nonatomic, strong) UILabel *titleLabel; 21 | 22 | @property (nonatomic, strong) KInputBoxMoreModel *moreModel; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxMoreUnitView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxMoreUnitView.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/10. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KInputBoxMoreUnitView.h" 10 | 11 | 12 | #import "KInputBoxMoreModel.h" 13 | 14 | @implementation KInputBoxMoreUnitView 15 | 16 | - (instancetype)initWithFrame:(CGRect)frame 17 | { 18 | self = [super initWithFrame:frame]; 19 | if (self) { 20 | [self initView]; 21 | } 22 | return self; 23 | } 24 | 25 | - (void)initView 26 | { 27 | self.box = [[UIView alloc] initWithFrame:CGRectMake(5, 10, self.mj_w - 10, self.mj_w - 10)]; 28 | self.box.layer.cornerRadius = 5; 29 | self.box.layer.masksToBounds = YES; 30 | self.box.layer.borderColor = [UIColor lightTextColor].CGColor; 31 | self.box.layer.borderWidth = 1; 32 | self.box.backgroundColor = [UIColor whiteColor]; 33 | [self addSubview:self.box]; 34 | 35 | CGFloat width = self.box.mj_w - 22; 36 | self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake((self.box.mj_w - width) / 2, (self.box.mj_h - width) / 2, width, width)]; 37 | [self.box addSubview:self.imageView]; 38 | self.imageView.userInteractionEnabled = YES; 39 | 40 | self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, self.box.kMax_y + 5, INPUT_BOX_MORE_ITEM_WIDTH, 20)]; 41 | self.titleLabel.textColor = [UIColor lightGrayColor]; 42 | self.titleLabel.textAlignment = NSTextAlignmentCenter; 43 | self.titleLabel.font = [UIFont systemFontOfSize:14]; 44 | [self addSubview:self.titleLabel]; 45 | 46 | } 47 | 48 | - (void)setMoreModel:(KInputBoxMoreModel *)moreModel 49 | { 50 | _moreModel = moreModel; 51 | if (moreModel.imageName) { 52 | self.imageView.image = [UIImage imageNamed:moreModel.imageName]; 53 | } 54 | self.titleLabel.text = moreModel.name; 55 | } 56 | 57 | - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 58 | [self sendActionsForControlEvents:UIControlEventTouchUpInside]; 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxMoreView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxMoreView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/7. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | 13 | @class KInputBoxMoreView; 14 | 15 | @interface KInputBoxMoreView : UIView 16 | 17 | @property (nonatomic, strong) UIView *topLine; 18 | @property (nonatomic, strong) UIScrollView *scrollView; 19 | @property (nonatomic, strong) UIPageControl *pageCtrl; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxRecorderView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxRecorderView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/7. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | 13 | @interface KInputBoxRecorderView : UIView 14 | 15 | @property (nonatomic, strong) UIImageView *leftImageView; 16 | 17 | @property (nonatomic, strong) UIImageView *rightImageView; 18 | 19 | @property (nonatomic, strong) UIImageView *recallImageView; 20 | 21 | @property (nonatomic, strong) UILabel *secondLabel; /**显示10秒倒计时*/ 22 | // 提示 23 | @property (nonatomic, strong) UILabel *prompt; 24 | 25 | @property (nonatomic, strong) NSTimer *timer; /**定时器*/ 26 | 27 | 28 | /** 29 | 语音录音按钮提示框 30 | */ 31 | + (instancetype)shareInstance; 32 | 33 | /** 34 | 通过录音时手势的状态更新提示消息 35 | 36 | @param state 手势状态 37 | */ 38 | - (void)updateState:(KInputBoxRecordStatus)state; 39 | 40 | - (void)updateSecond:(NSInteger)second; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KInputBoxView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KInputBoxView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/24. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KInputBoxViewDelegate.h" 12 | 13 | @class KRecordView; 14 | 15 | @interface KInputBoxView : UIView 16 | // 语音按钮 17 | @property (nonatomic, strong) UIButton *voiceBtn; 18 | // 输入框 19 | @property (nonatomic, strong) UITextView *inputView; 20 | // 表情按钮 21 | @property (nonatomic, strong) UIButton *emojiBtn; 22 | // 更多按钮 23 | @property (nonatomic, strong) UIButton *moreBtn; 24 | // 录音按钮 25 | @property (nonatomic, strong) UIButton *recordAudioBtn; 26 | // 聊天键盘按钮 27 | @property (nonatomic, strong) KRecordView *talkButton; 28 | // 顶部的横线 29 | @property (nonatomic, strong) UIView *topLine; 30 | // 输入框当前高度 31 | @property (nonatomic, assign) CGFloat curHeight; 32 | // 输入框输入时的代理 33 | @property (nonatomic, assign) id delegate; 34 | // 输入框输入状态 35 | @property (nonatomic, assign) KInputBoxStatus inputBoxStatus; 36 | // 录音状态 37 | @property (nonatomic, assign) KInputBoxRecordStatus recordState; 38 | 39 | 40 | 41 | /** 42 | 输入框输入文字改变结束 43 | 44 | @param textView 输入框视图 45 | */ 46 | - (void)textViewDidChange:(UITextView *)textView; 47 | 48 | // 删除表情 49 | - (void)deleteEmoji; 50 | // 收取键盘 51 | - (BOOL)resignFirstResponder; 52 | // 出现键盘 53 | - (BOOL)becomeFirstResponder; 54 | // 发送当前消息 55 | - (void)sendCurrentMessage; 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KPlayer.h: -------------------------------------------------------------------------------- 1 | // 2 | // KPlayer.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/15. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KPlayer : UIView 12 | 13 | @property (copy, nonatomic) NSURL *videoUrl; 14 | 15 | /** 16 | 短视频预览视图 17 | 18 | @param frame 预览框大小 19 | @param bgView 需要把视图添加都bgView上 20 | @param url 视频的url 21 | @return 预览图层 22 | */ 23 | - (instancetype)initWithFrame:(CGRect)frame withShowInView:(UIView *)bgView url:(NSURL *)url; 24 | 25 | /** 26 | 停止播放 27 | */ 28 | - (void)stopPlayer; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KRecordView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KRecordView.h 3 | // RecordTest 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 eims-1. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KRecordView : UIView 12 | 13 | @property (nonatomic, strong) UILabel *titleLabel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KRecordView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KRecordView.m 3 | // RecordTest 4 | // 5 | // Created by eims on 2018/5/29. 6 | // Copyright © 2018年 eims-1. All rights reserved. 7 | // 8 | 9 | #import "KRecordView.h" 10 | 11 | @implementation KRecordView 12 | 13 | - (instancetype)initWithFrame:(CGRect)frame 14 | { 15 | self = [super initWithFrame:frame]; 16 | if (self) { 17 | self.titleLabel = [[UILabel alloc] init]; 18 | self.titleLabel.font = [UIFont boldSystemFontOfSize:15]; 19 | self.titleLabel.textColor = [UIColor darkGrayColor]; 20 | self.titleLabel.userInteractionEnabled = YES; 21 | self.titleLabel.text = @"按住 说话"; 22 | [self.titleLabel sizeToFit]; 23 | [self addSubview:self.titleLabel]; 24 | self.titleLabel.frame = CGRectMake((self.mj_w - self.titleLabel.size.width)/2, (self.mj_h - self.titleLabel.size.height)/2, self.titleLabel.size.width, self.titleLabel.size.height); 25 | } 26 | return self; 27 | } 28 | 29 | 30 | 31 | /* 32 | // Only override drawRect: if you perform custom drawing. 33 | // An empty implementation adversely affects performance during animation. 34 | - (void)drawRect:(CGRect)rect { 35 | // Drawing code 36 | } 37 | */ 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KTextView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/28. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KTextView : UITextView 12 | 13 | // 是输入框 14 | @property (nonatomic, assign) BOOL isInputBox; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KVideoProgressView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KProgressView.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/15. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KVideoProgressView : UIView 12 | 13 | /** 14 | 视频总时长 15 | */ 16 | @property (assign, nonatomic) NSInteger timeMax; 17 | 18 | 19 | /** 20 | 清除进度 21 | */ 22 | - (void)clearProgress; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /RChat/Messages/InputBox/View/KVideoProgressView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KProgressView.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/15. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KVideoProgressView.h" 10 | 11 | @interface KVideoProgressView() 12 | 13 | /** 14 | * 进度值0-1.0之间 15 | */ 16 | @property (nonatomic,assign)CGFloat progressValue; 17 | 18 | @property (nonatomic, assign) CGFloat currentTime; 19 | 20 | @end 21 | 22 | @implementation KVideoProgressView 23 | 24 | 25 | - (void)drawRect:(CGRect)rect { 26 | [super drawRect:rect]; 27 | CGContextRef ctx = UIGraphicsGetCurrentContext();//获取上下文 28 | CGPoint center = CGPointMake(self.frame.size.width/2.0, self.frame.size.width/2.0); //设置圆心位置 29 | 30 | CGFloat radius = self.frame.size.width/2.0-0; //设置半径 31 | CGFloat startA = - M_PI_2; //圆起点位置 32 | CGFloat endA = -M_PI_2 + M_PI * 2 * _progressValue; //圆终点位置 33 | 34 | UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; 35 | 36 | CGContextSetLineWidth(ctx, 10); //设置线条宽度 37 | [[ColorTools colorWithHexString:@"0x89DD4B"] setStroke]; //设置描边颜色 38 | 39 | CGContextAddPath(ctx, path.CGPath); //把路径添加到上下文 40 | 41 | CGContextStrokePath(ctx); //渲染 42 | } 43 | 44 | - (void)setTimeMax:(NSInteger)timeMax { 45 | _timeMax = timeMax; 46 | self.currentTime = 0; 47 | self.progressValue = 0; 48 | [self setNeedsDisplay]; 49 | self.hidden = NO; 50 | [self performSelector:@selector(startProgress) withObject:nil afterDelay:0.1]; 51 | } 52 | 53 | - (void)clearProgress { 54 | _currentTime = _timeMax; 55 | self.hidden = YES; 56 | } 57 | 58 | - (void)startProgress { 59 | _currentTime += 0.1; 60 | if (_timeMax > _currentTime) { 61 | _progressValue = _currentTime/_timeMax; 62 | [self setNeedsDisplay]; 63 | [self performSelector:@selector(startProgress) withObject:nil afterDelay:0.1]; 64 | } 65 | 66 | if (_timeMax <= _currentTime) { 67 | [self clearProgress]; 68 | } 69 | } 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /RChat/Messages/Model/KChatMessageHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatMessageHelper.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/4. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KChatMessageHelper : NSObject 12 | 13 | /** 14 | 输入框显示是不是表情,而是表情字符串 15 | 16 | @param text 字符串 17 | @return 富文本 18 | */ 19 | + (NSAttributedString *)formatMessageString:(NSString *)text; 20 | 21 | /** 22 | 在消息页面显示的富文本 23 | 24 | @param att 输入框得到的富文本 25 | @return 处理好的可以显示在页面上的富文本 26 | */ 27 | + (NSAttributedString *)formatMessageAtt:(NSAttributedString *)att; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /RChat/Messages/Model/KConversationModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // KConversationModel.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/6/11. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KMessageModel; 12 | @interface KConversationModel : NSObject 13 | // 会话名 14 | @property (nonatomic, strong) NSString *conversationName; 15 | // 会话id 16 | @property (nonatomic, strong) NSString *conversationId; 17 | // 会话类型 18 | @property (nonatomic, assign) KMessageChatType chatType; 19 | // 会话头像 20 | @property (nonatomic, strong) NSString *headImage; 21 | // 最后一条消息 22 | @property (nonatomic, strong) KMessageModel *message; 23 | // 未读消息 24 | @property (nonatomic, assign) int badgeNumber; 25 | // 犀牛id 26 | @property (nonatomic, strong) NSString *toUserId; 27 | // 员工id 28 | @property (nonatomic, strong) NSString *toEmployeeId; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /RChat/Messages/Model/KConversationModel.m: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // KConversationModel.m 4 | // KXiniuCloud 5 | // 6 | // Created by RPK on 2018/6/11. 7 | // Copyright © 2018年 EIMS. All rights reserved. 8 | // 9 | 10 | #import "KConversationModel.h" 11 | 12 | #import "KMessageModel.h" 13 | 14 | @implementation KConversationModel 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /RChat/Messages/Model/KMailAccountInfoModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // KMailAccountInfoModel.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2017/8/14. 6 | // Copyright © 2017年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KMailAccountInfoModel : NSObject 12 | 13 | @property (nonatomic, copy) NSString *mailId; /**< 邮箱ID */ 14 | @property (nonatomic, copy) NSString *emailName; /**< 名称 */ 15 | @property (nonatomic, copy) NSString *emailAccount; /**< 邮箱账号 */ 16 | @property (nonatomic, copy) NSString *emailPassword; /**< 邮箱密码 */ 17 | 18 | @property (nonatomic, copy) NSString *sendServer; /**< 发送服务器 */ 19 | @property (nonatomic, copy) NSString *sendProtocol; /**< 发送协议 */ 20 | @property (nonatomic, assign) int sendPort; /**< 发送端口 */ 21 | @property (nonatomic, assign) int isSendSSL; /**< 发送SSL */ 22 | 23 | @property (nonatomic, copy) NSString *recevieServer; /**< 收取服务器 */ 24 | @property (nonatomic, copy) NSString *recevieProtocol; /**< 接收协议 */ 25 | @property (nonatomic, assign) int receviePort; /**< 接收端口 */ 26 | @property (nonatomic, assign) int isReceiveSSL; /**< 接收SSL */ 27 | 28 | @property (nonatomic, copy) NSString *signature; /**< 签名 */ 29 | @property (nonatomic, assign) int xiniuId; /**< 犀牛ID */ 30 | @property (nonatomic, assign) int companyId; /**< 企业ID */ 31 | @property (nonatomic, assign) int timestamp; /**< 时间戳 */ 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /RChat/Messages/Model/KMailAccountInfoModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // KMailAccountInfoModel.m 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2017/8/14. 6 | // Copyright © 2017年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KMailAccountInfoModel.h" 10 | 11 | @implementation KMailAccountInfoModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /RChat/Messages/Model/KPhotoPreviewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // KPhotoPreviewModel.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/14. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KPhotoPreviewModel : NSObject 12 | 13 | //@property (nonatomic, strong) NSData *imageData; 14 | 15 | @property (nonatomic, strong) id content; 16 | 17 | @property (nonatomic, strong) NSString *videoUrl; 18 | 19 | @property (nonatomic, strong) NSString *thumbUrl; 20 | 21 | @property (nonatomic, strong) NSString *imageUrl; 22 | 23 | @property (nonatomic, strong) NSString *messageId; 24 | 25 | @property (nonatomic, strong) UIImageView *tapImageView; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /RChat/Messages/Model/KPhotoPreviewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // KPhotoPreviewModel.m 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/14. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KPhotoPreviewModel.h" 10 | 11 | @implementation KPhotoPreviewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /RChat/Messages/Resource/conversationList: -------------------------------------------------------------------------------- 1 | [{"conversation_id":"101824_143701","conversation_name":"军锅锅","head_img":"http://cname-yunke.shovesoft.com/group1/M00/00/13/CgAHCFt7b0qAAW5vAAJTspgW2NE834.png","msg":{"content":"[语音]","msg_id":"2224","recv_time":"1536647378005","send_status":"0"},"to_user_id":"101824","unread_num":"0"}] 2 | -------------------------------------------------------------------------------- /RChat/Messages/Resource/previewPicture.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/Resource/previewPicture.jpeg -------------------------------------------------------------------------------- /RChat/Messages/Resource/reviewVideo.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fshmjl/RChat/a67b0a2dbaf1e3cb9b49eb7f850a00e498046cce/RChat/Messages/Resource/reviewVideo.mp4 -------------------------------------------------------------------------------- /RChat/Messages/Utils/ColorTools.m: -------------------------------------------------------------------------------- 1 | // 2 | // ColorTools.m 3 | // ShoveSAS 4 | // 5 | // Created by RPK on 16/5/16. 6 | // Copyright © 2016年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "ColorTools.h" 10 | 11 | @implementation ColorTools 12 | 13 | #pragma mark - 颜色转换 IOS中十六进制的颜色转换为UIColor 14 | + (UIColor *) colorWithHexString: (NSString *)color 15 | { 16 | NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 17 | 18 | // String should be 6 or 8 characters 19 | if ([cString length] < 6) { 20 | return [UIColor clearColor]; 21 | } 22 | 23 | // strip 0X if it appears 24 | if ([cString hasPrefix:@"0x"] || [cString hasPrefix:@"0X"] ) 25 | cString = [cString substringFromIndex:2]; 26 | if ([cString hasPrefix:@"#"]) 27 | cString = [cString substringFromIndex:1]; 28 | if ([cString length] != 6) 29 | return [UIColor clearColor]; 30 | 31 | // Separate into r, g, b substrings 32 | NSRange range; 33 | range.location = 0; 34 | range.length = 2; 35 | 36 | //r 37 | NSString *rString = [cString substringWithRange:range]; 38 | 39 | //g 40 | range.location = 2; 41 | NSString *gString = [cString substringWithRange:range]; 42 | 43 | //b 44 | range.location = 4; 45 | NSString *bString = [cString substringWithRange:range]; 46 | 47 | // Scan values 48 | unsigned int r, g, b; 49 | [[NSScanner scannerWithString:rString] scanHexInt:&r]; 50 | [[NSScanner scannerWithString:gString] scanHexInt:&g]; 51 | [[NSScanner scannerWithString:bString] scanHexInt:&b]; 52 | 53 | return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f]; 54 | } 55 | 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /RChat/Messages/Utils/KProgressView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KProgressView.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/2/6. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KProgressView : UIView 12 | 13 | + (instancetype)shareInstance; 14 | 15 | - (void)setupProgressUI; 16 | 17 | - (void)setPressSlider:(float)value; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /RChat/Messages/Utils/KProgressView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KProgressView.m 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/2/6. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KProgressView.h" 10 | 11 | @interface KProgressView() 12 | 13 | @property (nonatomic, strong) UIProgressView *progressView; 14 | 15 | @end 16 | 17 | @implementation KProgressView 18 | 19 | static dispatch_once_t onceToken; 20 | 21 | + (instancetype)shareInstance { 22 | 23 | static KProgressView *progressView = nil; 24 | 25 | dispatch_once(&onceToken, ^{ 26 | progressView = [[KProgressView alloc] init]; 27 | }); 28 | 29 | return progressView; 30 | 31 | } 32 | 33 | - (void)setupProgressUI { 34 | 35 | _progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; 36 | _progressView.progress = 0; // 进度 默认为0.0∈[0.0,1.0] 37 | _progressView.backgroundColor = [UIColor clearColor]; 38 | _progressView.progressTintColor = [UIColor redColor]; 39 | _progressView.trackTintColor = KLineColor; // 为走过的颜色 40 | _progressView.transform = CGAffineTransformMakeScale(1.0f, 2.0f); 41 | [self addSubview:_progressView]; 42 | 43 | _progressView.sd_layout.topSpaceToView(self, 0).leftSpaceToView(self, 0).rightSpaceToView(self, 0).heightIs(1); 44 | 45 | } 46 | 47 | - (void)setPressSlider:(float)value { 48 | 49 | [self.progressView setProgress:value animated:YES]; 50 | if (value == 1) { 51 | [self hidePressSlider:YES]; 52 | } 53 | } 54 | 55 | - (void)hidePressSlider:(BOOL)isHide { 56 | if (isHide) { 57 | _progressView.progress = 0; 58 | } 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /RChat/Messages/View/KChatImageTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatImageTableViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/11. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KChatTableViewCell.h" 12 | 13 | 14 | @interface KChatImageTableViewCell : KChatTableViewCell 15 | 16 | // 图片 17 | @property (nonatomic, strong) UIImageView *messageImageView; 18 | 19 | // 图片点击事件 20 | @property (nonatomic, strong) UITapGestureRecognizer *tapImageView; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /RChat/Messages/View/KChatMailTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatMailTableViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/25. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KChatTableViewCell.h" 12 | 13 | @interface KChatMailTableViewCell : KChatTableViewCell 14 | // 自己发的邮件是否显示“回复”、“回复全部”和“转发” 默认不显示 15 | @property (nonatomic, assign) BOOL selfSenderMailShowReply; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /RChat/Messages/View/KChatTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatTableViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/25. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KChatTableViewCellDelegate.h" 12 | 13 | @class KMessageModel; 14 | @class KConversationModel; 15 | 16 | @interface KChatTableViewCell : UITableViewCell 17 | // 发送或收到消息的时间 18 | @property (nonatomic, strong) UILabel *messageTime; 19 | // 用户头像 20 | @property (nonatomic, strong) UIImageView *avatarImageView; 21 | // 用户名 22 | @property (nonatomic, strong) UILabel *username; 23 | // 消息背景 24 | @property (nonatomic, strong) UIImageView *messageBackgroundImageView; 25 | // 消息发送状态背景 26 | @property (nonatomic, strong) UIImageView *messageSendStatusImageView; 27 | // 消息数据 28 | @property (nonatomic, strong) KMessageModel *messageModel; 29 | // 所属会话 30 | @property (nonatomic, strong) KConversationModel *conversation; 31 | 32 | @property (nonatomic, strong) NSIndexPath *indexPath; 33 | // jsonStr消息未发送成功,需要读取此值 34 | @property (nonatomic, strong) NSString *jsonStr; 35 | // 消息重新发送成功需要读取此值,更新本地数据库的发送状态和消息id 36 | @property (nonatomic, strong) NSString *localMessageId; 37 | 38 | // cell代理事件 39 | @property (nonatomic, assign) id delegate; 40 | 41 | // 点击消息背景 42 | - (void)clickMessageBackgroundImageView:(UITapGestureRecognizer *)gesture; 43 | 44 | /** 45 | 更新消息发送状态 46 | 47 | @param sendState 发送状态 48 | @param jsonStr 发送的json数据 49 | @param messageId 本地消息id 50 | */ 51 | - (void)updateMessageSendState:(KMessageSendStatus)sendState jsonStr:(NSString *)jsonStr localMessageId:(NSString *)messageId; 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /RChat/Messages/View/KChatTableViewCellDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatTableViewCellDelegate.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/25. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #ifndef KChatTableViewCellDelegate_h 10 | #define KChatTableViewCellDelegate_h 11 | 12 | @class KMessageModel; 13 | @class KChatTableViewCell; 14 | @class KConversationModel; 15 | @class KChatMailTableViewCell; 16 | @class KChatVoiceTableViewCell; 17 | 18 | @protocol KChatTableViewCellDelegate 19 | 20 | /** 21 | 点击cell中的头像 22 | 23 | @param tableViewCell 当前cell 24 | @param messageModel 当前cell的数据 25 | */ 26 | - (void)chatTableViewCell:(KChatTableViewCell *)tableViewCell clickAvatarImageViewMessageModel:(KMessageModel *)messageModel; 27 | 28 | /** 29 | 点击消息背景 30 | 31 | @param tableViewCell 当前cell 32 | @param messageModel 当前cell的数据 33 | */ 34 | - (void)chatTableViewCell:(KChatTableViewCell *)tableViewCell clickBackgroudImageViewMessageModel:(KMessageModel *)messageModel; 35 | 36 | /** 37 | 当发送失败时点击,发送状态展示视图 38 | 39 | @param tableViewCell 当前cell 40 | @param conversationModel 会话信息 41 | @param messageModel 消息 42 | */ 43 | - (void)chatTableViewCell:(KChatTableViewCell *)tableViewCell clickResendMessageWithConversationModel:(KConversationModel *)conversationModel messageModel:(KMessageModel *)messageModel; 44 | 45 | /** 46 | 点击回复邮件 47 | 48 | @param tableViewCell 当前cell 49 | @param messageModel 当前cell的数据 50 | */ 51 | - (void)chatTableViewCell:(KChatMailTableViewCell *)tableViewCell replyMailMessageModel:(KMessageModel *)messageModel; 52 | 53 | /** 54 | 点击回复全部 55 | 56 | @param tableViewCell 当前cell 57 | @param messageModel 当前cell的数据 58 | */ 59 | - (void)chatTableViewCell:(KChatMailTableViewCell *)tableViewCell 60 | replyAllMaillMessageModel:(KMessageModel *)messageModel; 61 | 62 | /** 63 | 点击转发邮件 64 | 65 | @param tableViewCell 当前cell 66 | @param messageModel 当前cell的数据 67 | */ 68 | - (void)chatTableViewCell:(KChatMailTableViewCell *)tableViewCell 69 | transmitMailMessageModel:(KMessageModel *)messageModel; 70 | 71 | /** 72 | 点击语音消息 73 | 74 | @param tableViewCell 当前cell 75 | @param messageModel 当前数据 76 | */ 77 | - (void)chatTableViewCell:(KChatVoiceTableViewCell *)tableViewCell clickVoiceMessageMessageModel:(KMessageModel *)messageModel; 78 | 79 | @end 80 | 81 | #endif /* KChatTableViewCellDelegate_h */ 82 | -------------------------------------------------------------------------------- /RChat/Messages/View/KChatTextTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatTextTableViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/4/25. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KChatTableViewCell.h" 12 | 13 | @class KTextView; 14 | 15 | @interface KChatTextTableViewCell : KChatTableViewCell 16 | 17 | // 消息文本框 18 | @property (nonatomic, strong) KTextView *textView; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /RChat/Messages/View/KChatVideoTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatVideoTableViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/16. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import "KChatTableViewCell.h" 10 | 11 | @interface KChatVideoTableViewCell : KChatTableViewCell 12 | // 录制时长 13 | @property (nonatomic, strong) UILabel *recordTime; 14 | // 视频缩略图 15 | @property (nonatomic, strong) UIImageView *videoImageView; 16 | // 播放图片 17 | @property (nonatomic, strong) UIImageView *playImageView; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /RChat/Messages/View/KChatVoiceTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KChatVoiceTableViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by eims on 2018/5/7. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "KChatTableViewCell.h" 12 | 13 | @interface KChatVoiceTableViewCell : KChatTableViewCell 14 | // 秒数 15 | @property (nonatomic, strong) UILabel *second; 16 | // 语音图标 17 | @property (nonatomic, strong) UIImageView *voiceImageView; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /RChat/Messages/View/KMessagesListTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // KMessagesListTableViewCell.h 3 | // KXiniuCloud 4 | // 5 | // Created by RPK on 2018/4/17. 6 | // Copyright © 2018年 EIMS. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KConversationModel; 12 | 13 | @interface KMessagesListTableViewCell : UITableViewCell 14 | @property (nonatomic, strong) UILabel *titleLabel; /**< 标题 */ 15 | @property (nonatomic, strong) UILabel *messageLabel; /**< 部分信息内容 */ 16 | @property (nonatomic, strong) UILabel *updateTime; /**< 消息更新时间 */ 17 | @property (nonatomic, strong) UILabel *badgeNumber; /**< 未读消息数 */ 18 | @property (nonatomic, strong) UIImageView *avaterImageView; /**< 用户头像 */ 19 | // 消息数据 20 | @property (nonatomic, strong) KConversationModel *conversation; 21 | 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /RChat/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // RChat 4 | // 5 | // Created by eims on 2018/9/4. 6 | // Copyright © 2018年 RPK. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /RChatTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /RChatTests/RChatTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // RChatTests.m 3 | // RChatTests 4 | // 5 | // Created by eims on 2018/9/4. 6 | // Copyright © 2018年 RPK. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RChatTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation RChatTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /RChatUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /RChatUITests/RChatUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // RChatUITests.m 3 | // RChatUITests 4 | // 5 | // Created by eims on 2018/9/4. 6 | // Copyright © 2018年 RPK. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RChatUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation RChatUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | --------------------------------------------------------------------------------