├── 编辑.gif ├── ZJFriendLineDemo ├── Assets.xcassets │ ├── Contents.json │ ├── pbg.imageset │ │ ├── pbg.jpg │ │ └── Contents.json │ ├── Like.imageset │ │ ├── Like@2x.png │ │ ├── Like@3x.png │ │ └── Contents.json │ ├── icon1.imageset │ │ ├── icon1.jpg │ │ └── Contents.json │ ├── icon2.imageset │ │ ├── icon2.jpg │ │ └── Contents.json │ ├── icon3.imageset │ │ ├── icon3.jpg │ │ └── Contents.json │ ├── icon4.imageset │ │ ├── icon4.jpg │ │ └── Contents.json │ ├── pic00.imageset │ │ ├── pic00.jpg │ │ └── Contents.json │ ├── pic01.imageset │ │ ├── pic01.jpg │ │ └── Contents.json │ ├── pic02.imageset │ │ ├── pic02.jpg │ │ └── Contents.json │ ├── pic03.imageset │ │ ├── pic03.jpg │ │ └── Contents.json │ ├── pic04.imageset │ │ ├── pic04.jpg │ │ └── Contents.json │ ├── pic05.imageset │ │ ├── pic05.jpg │ │ └── Contents.json │ ├── pic06.imageset │ │ ├── pic06.jpg │ │ └── Contents.json │ ├── AlbumLike.imageset │ │ ├── AlbumLike@2x.png │ │ ├── AlbumLike@3x.png │ │ └── Contents.json │ ├── LikeCmtBg.imageset │ │ ├── LikeCmtBg@2x.png │ │ ├── LikeCmtBg@3x.png │ │ └── Contents.json │ ├── AlbumComment.imageset │ │ ├── AlbumComment@2x.png │ │ ├── AlbumComment@3x.png │ │ └── Contents.json │ ├── AlbumOperateMore.imageset │ │ ├── AlbumOperateMore@2x.png │ │ ├── AlbumOperateMore@3x.png │ │ └── Contents.json │ ├── AlbumReflashIcon.imageset │ │ ├── AlbumReflashIcon@2x.png │ │ └── Contents.json │ └── AppIcon.appiconset │ │ └── Contents.json ├── Expand │ ├── KeyBoard │ │ ├── icons │ │ │ ├── more │ │ │ │ ├── sp@2x.png │ │ │ │ ├── yy@2x.png │ │ │ │ ├── sharemore_pic@2x.png │ │ │ │ ├── sharemore_pic@3x.png │ │ │ │ ├── sharemore_video@2x.png │ │ │ │ ├── sharemore_video@3x.png │ │ │ │ ├── sharemore_location@2x.png │ │ │ │ └── sharemore_location@3x.png │ │ │ ├── ChatToolBar │ │ │ │ ├── face@2x.png │ │ │ │ ├── voice@2x.png │ │ │ │ ├── face_HL@2x.png │ │ │ │ ├── keyboard@2x.png │ │ │ │ ├── more_ios@2x.png │ │ │ │ ├── switchDown@2x.png │ │ │ │ ├── switchUp@2x.png │ │ │ │ ├── voice_HL@2x.png │ │ │ │ ├── Delete_ios7@2x.png │ │ │ │ ├── Delete_ios7@3x.png │ │ │ │ ├── keyboard_HL@2x.png │ │ │ │ ├── more_ios_HL@2x.png │ │ │ │ ├── input-bar-flat@2x.png │ │ │ │ └── input-bar-flat@3x.png │ │ │ ├── Emotion │ │ │ │ ├── section0_emotion0@2x.png │ │ │ │ ├── section0_emotion10@2x.png │ │ │ │ ├── section0_emotion11@2x.png │ │ │ │ ├── section0_emotion12@2x.png │ │ │ │ ├── section0_emotion13@2x.png │ │ │ │ ├── section0_emotion14@2x.png │ │ │ │ ├── section0_emotion15@2x.png │ │ │ │ ├── section0_emotion1@2x.png │ │ │ │ ├── section0_emotion2@2x.png │ │ │ │ ├── section0_emotion3@2x.png │ │ │ │ ├── section0_emotion4@2x.png │ │ │ │ ├── section0_emotion5@2x.png │ │ │ │ ├── section0_emotion6@2x.png │ │ │ │ ├── section0_emotion7@2x.png │ │ │ │ ├── section0_emotion8@2x.png │ │ │ │ └── section0_emotion9@2x.png │ │ │ └── face │ │ │ │ ├── f_static_000 │ │ │ │ ├── f_static_000@2x.png │ │ │ │ └── f_static_000@3x.png │ │ │ │ ├── f_static_001 │ │ │ │ ├── f_static_001@2x.png │ │ │ │ └── f_static_001@3x.png │ │ │ │ ├── f_static_002 │ │ │ │ ├── f_static_002@2x.png │ │ │ │ └── f_static_002@3x.png │ │ │ │ ├── f_static_003 │ │ │ │ ├── f_static_003@2x.png │ │ │ │ └── f_static_003@3x.png │ │ │ │ ├── f_static_004 │ │ │ │ ├── f_static_004@2x.png │ │ │ │ └── f_static_004@3x.png │ │ │ │ ├── f_static_005 │ │ │ │ ├── f_static_005@2x.png │ │ │ │ └── f_static_005@3x.png │ │ │ │ ├── f_static_006 │ │ │ │ ├── f_static_006@2x.png │ │ │ │ └── f_static_006@3x.png │ │ │ │ ├── f_static_007 │ │ │ │ ├── f_static_007@2x.png │ │ │ │ ├── f_static_007@3x.png │ │ │ │ └── Contents.json │ │ │ │ ├── f_static_008 │ │ │ │ ├── f_static_008@2x.png │ │ │ │ └── f_static_008@3x.png │ │ │ │ ├── f_static_009 │ │ │ │ ├── f_static_009@2x.png │ │ │ │ └── f_static_009@3x.png │ │ │ │ ├── f_static_010 │ │ │ │ ├── f_static_010@2x.png │ │ │ │ └── f_static_010@3x.png │ │ │ │ ├── f_static_011 │ │ │ │ ├── f_static_011@2x.png │ │ │ │ └── f_static_011@3x.png │ │ │ │ ├── f_static_012 │ │ │ │ ├── f_static_012@2x.png │ │ │ │ └── f_static_012@3x.png │ │ │ │ ├── f_static_013 │ │ │ │ ├── f_static_013@2x.png │ │ │ │ └── f_static_013@3x.png │ │ │ │ ├── f_static_014 │ │ │ │ ├── f_static_014@2x.png │ │ │ │ └── f_static_014@3x.png │ │ │ │ ├── f_static_015 │ │ │ │ ├── f_static_015@2x.png │ │ │ │ └── f_static_015@3x.png │ │ │ │ ├── f_static_016 │ │ │ │ ├── f_static_016@2x.png │ │ │ │ └── f_static_016@3x.png │ │ │ │ ├── f_static_017 │ │ │ │ ├── f_static_017@2x.png │ │ │ │ └── f_static_017@3x.png │ │ │ │ ├── f_static_018 │ │ │ │ ├── f_static_018@2x.png │ │ │ │ └── f_static_018@3x.png │ │ │ │ ├── f_static_019 │ │ │ │ ├── f_static_019@2x.png │ │ │ │ └── f_static_019@3x.png │ │ │ │ ├── f_static_020 │ │ │ │ ├── f_static_020@2x.png │ │ │ │ └── f_static_020@3x.png │ │ │ │ ├── f_static_021 │ │ │ │ ├── f_static_021@2x.png │ │ │ │ └── f_static_021@3x.png │ │ │ │ ├── f_static_022 │ │ │ │ ├── f_static_022@2x.png │ │ │ │ └── f_static_022@3x.png │ │ │ │ ├── f_static_023 │ │ │ │ ├── f_static_023@2x.png │ │ │ │ └── f_static_023@3x.png │ │ │ │ ├── f_static_024 │ │ │ │ ├── f_static_024@2x.png │ │ │ │ └── f_static_024@3x.png │ │ │ │ ├── f_static_025 │ │ │ │ ├── f_static_025@2x.png │ │ │ │ └── f_static_025@3x.png │ │ │ │ ├── f_static_026 │ │ │ │ ├── f_static_026@2x.png │ │ │ │ └── f_static_026@3x.png │ │ │ │ ├── f_static_027 │ │ │ │ ├── f_static_027@2x.png │ │ │ │ └── f_static_027@3x.png │ │ │ │ ├── f_static_028 │ │ │ │ ├── f_static_028@2x.png │ │ │ │ └── f_static_028@3x.png │ │ │ │ ├── f_static_029 │ │ │ │ ├── f_static_029@2x.png │ │ │ │ └── f_static_029@3x.png │ │ │ │ ├── f_static_030 │ │ │ │ ├── f_static_030@2x.png │ │ │ │ └── f_static_030@3x.png │ │ │ │ ├── f_static_031 │ │ │ │ ├── f_static_031@2x.png │ │ │ │ └── f_static_031@3x.png │ │ │ │ ├── f_static_032 │ │ │ │ ├── f_static_032@2x.png │ │ │ │ └── f_static_032@3x.png │ │ │ │ ├── f_static_033 │ │ │ │ ├── f_static_033@2x.png │ │ │ │ └── f_static_033@3x.png │ │ │ │ ├── f_static_034 │ │ │ │ ├── f_static_034@2x.png │ │ │ │ └── f_static_034@3x.png │ │ │ │ ├── f_static_035 │ │ │ │ ├── f_static_035@2x.png │ │ │ │ └── f_static_035@3x.png │ │ │ │ ├── f_static_036 │ │ │ │ ├── f_static_036@2x.png │ │ │ │ └── f_static_036@3x.png │ │ │ │ ├── f_static_037 │ │ │ │ ├── f_static_037@2x.png │ │ │ │ └── f_static_037@3x.png │ │ │ │ ├── f_static_038 │ │ │ │ ├── f_static_038@2x.png │ │ │ │ └── f_static_038@3x.png │ │ │ │ ├── f_static_039 │ │ │ │ ├── f_static_039@2x.png │ │ │ │ └── f_static_039@3x.png │ │ │ │ ├── f_static_040 │ │ │ │ ├── f_static_040@2x.png │ │ │ │ └── f_static_040@3x.png │ │ │ │ ├── f_static_041 │ │ │ │ ├── f_static_041@2x.png │ │ │ │ └── f_static_041@3x.png │ │ │ │ ├── f_static_042 │ │ │ │ ├── f_static_042@2x.png │ │ │ │ └── f_static_042@3x.png │ │ │ │ ├── f_static_043 │ │ │ │ ├── f_static_043@2x.png │ │ │ │ └── f_static_043@3x.png │ │ │ │ ├── f_static_044 │ │ │ │ ├── f_static_044@2x.png │ │ │ │ └── f_static_044@3x.png │ │ │ │ ├── f_static_045 │ │ │ │ ├── f_static_045@2x.png │ │ │ │ └── f_static_045@3x.png │ │ │ │ ├── f_static_046 │ │ │ │ ├── f_static_046@2x.png │ │ │ │ └── f_static_046@3x.png │ │ │ │ ├── f_static_047 │ │ │ │ ├── f_static_047@2x.png │ │ │ │ └── f_static_047@3x.png │ │ │ │ ├── f_static_048 │ │ │ │ ├── f_static_048@2x.png │ │ │ │ └── f_static_048@3x.png │ │ │ │ ├── f_static_049 │ │ │ │ ├── f_static_049@2x.png │ │ │ │ └── f_static_049@3x.png │ │ │ │ ├── f_static_050 │ │ │ │ ├── f_static_050@2x.png │ │ │ │ └── f_static_050@3x.png │ │ │ │ ├── f_static_051 │ │ │ │ ├── f_static_051@2x.png │ │ │ │ └── f_static_051@3x.png │ │ │ │ ├── f_static_052 │ │ │ │ ├── f_static_052@2x.png │ │ │ │ └── f_static_052@3x.png │ │ │ │ ├── f_static_053 │ │ │ │ ├── f_static_053@2x.png │ │ │ │ └── f_static_053@3x.png │ │ │ │ ├── f_static_054 │ │ │ │ ├── f_static_054@2x.png │ │ │ │ └── f_static_054@3x.png │ │ │ │ ├── f_static_055 │ │ │ │ ├── f_static_055@2x.png │ │ │ │ └── f_static_055@3x.png │ │ │ │ ├── f_static_056 │ │ │ │ ├── f_static_056@2x.png │ │ │ │ └── f_static_056@3x.png │ │ │ │ ├── f_static_057 │ │ │ │ ├── f_static_057@2x.png │ │ │ │ └── f_static_057@3x.png │ │ │ │ ├── f_static_058 │ │ │ │ ├── f_static_058@2x.png │ │ │ │ └── f_static_058@3x.png │ │ │ │ ├── f_static_059 │ │ │ │ ├── f_static_059@2x.png │ │ │ │ └── f_static_059@3x.png │ │ │ │ ├── f_static_060 │ │ │ │ ├── f_static_060@2x.png │ │ │ │ └── f_static_060@3x.png │ │ │ │ ├── f_static_061 │ │ │ │ ├── f_static_061@2x.png │ │ │ │ └── f_static_061@3x.png │ │ │ │ ├── f_static_062 │ │ │ │ ├── f_static_062@2x.png │ │ │ │ └── f_static_062@3x.png │ │ │ │ ├── f_static_063 │ │ │ │ ├── f_static_063@2x.png │ │ │ │ └── f_static_063@3x.png │ │ │ │ ├── f_static_064 │ │ │ │ ├── f_static_064@2x.png │ │ │ │ └── f_static_064@3x.png │ │ │ │ ├── f_static_065 │ │ │ │ ├── f_static_065@2x.png │ │ │ │ └── f_static_065@3x.png │ │ │ │ ├── f_static_066 │ │ │ │ ├── f_static_066@2x.png │ │ │ │ └── f_static_066@3x.png │ │ │ │ ├── f_static_067 │ │ │ │ ├── f_static_067@2x.png │ │ │ │ └── f_static_067@3x.png │ │ │ │ ├── f_static_068 │ │ │ │ ├── f_static_068@2x.png │ │ │ │ └── f_static_068@3x.png │ │ │ │ ├── f_static_069 │ │ │ │ ├── f_static_069@2x.png │ │ │ │ └── f_static_069@3x.png │ │ │ │ ├── f_static_070 │ │ │ │ ├── f_static_070@2x.png │ │ │ │ └── f_static_070@3x.png │ │ │ │ ├── f_static_071 │ │ │ │ ├── f_static_071@2x.png │ │ │ │ └── f_static_071@3x.png │ │ │ │ ├── f_static_072 │ │ │ │ ├── f_static_072@2x.png │ │ │ │ └── f_static_072@3x.png │ │ │ │ ├── f_static_073 │ │ │ │ ├── f_static_073@2x.png │ │ │ │ └── f_static_073@3x.png │ │ │ │ ├── f_static_074 │ │ │ │ ├── f_static_074@2x.png │ │ │ │ └── f_static_074@3x.png │ │ │ │ ├── f_static_075 │ │ │ │ ├── f_static_075@2x.png │ │ │ │ └── f_static_075@3x.png │ │ │ │ ├── f_static_076 │ │ │ │ ├── f_static_076@2x.png │ │ │ │ └── f_static_076@3x.png │ │ │ │ ├── f_static_077 │ │ │ │ ├── f_static_077@2x.png │ │ │ │ └── f_static_077@3x.png │ │ │ │ ├── f_static_078 │ │ │ │ ├── f_static_078@2x.png │ │ │ │ └── f_static_078@3x.png │ │ │ │ ├── f_static_079 │ │ │ │ ├── f_static_079@2x.png │ │ │ │ └── f_static_079@3x.png │ │ │ │ ├── f_static_080 │ │ │ │ ├── f_static_080@2x.png │ │ │ │ └── f_static_080@3x.png │ │ │ │ ├── f_static_081 │ │ │ │ ├── f_static_081@2x.png │ │ │ │ └── f_static_081@3x.png │ │ │ │ ├── f_static_082 │ │ │ │ ├── f_static_082@2x.png │ │ │ │ └── f_static_082@3x.png │ │ │ │ ├── f_static_083 │ │ │ │ ├── f_static_083@2x.png │ │ │ │ └── f_static_083@3x.png │ │ │ │ ├── f_static_084 │ │ │ │ ├── f_static_084@2x.png │ │ │ │ └── f_static_084@3x.png │ │ │ │ ├── f_static_085 │ │ │ │ ├── f_static_085@2x.png │ │ │ │ └── f_static_085@3x.png │ │ │ │ ├── f_static_086 │ │ │ │ ├── f_static_086@2x.png │ │ │ │ └── f_static_086@3x.png │ │ │ │ ├── f_static_087 │ │ │ │ ├── f_static_087@2x.png │ │ │ │ └── f_static_087@3x.png │ │ │ │ ├── f_static_088 │ │ │ │ ├── f_static_088@2x.png │ │ │ │ └── f_static_088@3x.png │ │ │ │ ├── f_static_089 │ │ │ │ ├── f_static_089@2x.png │ │ │ │ └── f_static_089@3x.png │ │ │ │ ├── f_static_090 │ │ │ │ ├── f_static_090@2x.png │ │ │ │ └── f_static_090@3x.png │ │ │ │ ├── f_static_091 │ │ │ │ ├── f_static_091@2x.png │ │ │ │ └── f_static_091@3x.png │ │ │ │ ├── f_static_092 │ │ │ │ ├── f_static_092@2x.png │ │ │ │ └── f_static_092@3x.png │ │ │ │ ├── f_static_093 │ │ │ │ ├── f_static_093@2x.png │ │ │ │ └── f_static_093@3x.png │ │ │ │ ├── f_static_094 │ │ │ │ ├── f_static_094@2x.png │ │ │ │ └── f_static_094@3x.png │ │ │ │ ├── f_static_095 │ │ │ │ ├── f_static_095@2x.png │ │ │ │ └── f_static_095@3x.png │ │ │ │ ├── f_static_096 │ │ │ │ ├── f_static_096@2x.png │ │ │ │ └── f_static_096@3x.png │ │ │ │ ├── f_static_097 │ │ │ │ ├── f_static_097@2x.png │ │ │ │ └── f_static_097@3x.png │ │ │ │ ├── f_static_098 │ │ │ │ ├── f_static_098@2x.png │ │ │ │ └── f_static_098@3x.png │ │ │ │ ├── f_static_099 │ │ │ │ ├── f_static_099@2x.png │ │ │ │ └── f_static_099@3x.png │ │ │ │ ├── f_static_100 │ │ │ │ ├── f_static_100@2x.png │ │ │ │ └── f_static_100@3x.png │ │ │ │ ├── f_static_101 │ │ │ │ ├── f_static_101@2x.png │ │ │ │ └── f_static_101@3x.png │ │ │ │ ├── f_static_102 │ │ │ │ ├── f_static_102@2x.png │ │ │ │ └── f_static_102@3x.png │ │ │ │ ├── f_static_103 │ │ │ │ ├── f_static_103@2x.png │ │ │ │ └── f_static_103@3x.png │ │ │ │ ├── f_static_104 │ │ │ │ ├── f_static_104@2x.png │ │ │ │ └── f_static_104@3x.png │ │ │ │ ├── f_static_105 │ │ │ │ ├── f_static_105@2x.png │ │ │ │ └── f_static_105@3x.png │ │ │ │ └── f_static_106 │ │ │ │ ├── f_static_106@2x.png │ │ │ │ └── f_static_106@3x.png │ │ ├── Cagegory │ │ │ ├── NSString+Emoji.h │ │ │ └── NSString+Emoji.m │ │ ├── Views │ │ │ ├── FacePanel │ │ │ │ ├── FaceButton.m │ │ │ │ ├── FaceButton.h │ │ │ │ ├── FaceSourceManager.h │ │ │ │ ├── FaceThemeView.h │ │ │ │ ├── FacePageView.h │ │ │ │ ├── FacePanel.h │ │ │ │ ├── PanelBottomView.h │ │ │ │ └── FaceSourceManager.m │ │ │ ├── ToolBarPanel │ │ │ │ ├── OfficialAccountToolbar.h │ │ │ │ ├── RFTextView.h │ │ │ │ ├── OfficialAccountToolbar.m │ │ │ │ └── RFRecordButton.h │ │ │ └── MorePanel │ │ │ │ └── MorePanel.h │ │ ├── Models │ │ │ ├── FaceThemeModel.m │ │ │ ├── MoreItem.h │ │ │ ├── ChatToolBarItem.h │ │ │ ├── FaceThemeModel.h │ │ │ ├── ChatToolBarItem.m │ │ │ └── MoreItem.m │ │ ├── plist │ │ │ ├── emotion.plist │ │ │ └── systemEmoji.plist │ │ └── ChatKeyBoardMacroDefine.h │ ├── Masonry │ │ ├── MASLayoutConstraint.m │ │ ├── NSLayoutConstraint+MASDebugAdditions.h │ │ ├── MASLayoutConstraint.h │ │ ├── MASCompositeConstraint.h │ │ ├── Masonry.h │ │ ├── ViewController+MASAdditions.h │ │ ├── NSArray+MASShorthandAdditions.h │ │ ├── MASViewAttribute.m │ │ ├── MASViewAttribute.h │ │ ├── ViewController+MASAdditions.m │ │ ├── MASViewConstraint.h │ │ └── MASConstraint+Private.h │ ├── MyLinkLabel │ │ ├── Helper │ │ │ ├── MLLabelLayoutManager.h │ │ │ └── MLLabel+Override.h │ │ ├── Category │ │ │ ├── NSAttributedString+MLLabel.h │ │ │ ├── NSMutableAttributedString+MLLabel.h │ │ │ ├── NSString+MLLabel.h │ │ │ ├── NSMutableAttributedString+MLLabel.m │ │ │ ├── NSAttributedString+MLLabel.m │ │ │ └── NSString+MLLabel.m │ │ ├── Expression │ │ │ ├── NSString+MLExpression.h │ │ │ ├── NSAttributedString+MLExpression.h │ │ │ ├── NSString+MLExpression.m │ │ │ ├── NSAttributedString+MLExpression.m │ │ │ ├── MLExpressionManager.h │ │ │ └── MLTextAttachment.h │ │ └── MLLabel.h │ ├── ZJImageViewBrowser │ │ ├── MyCollectionViewCell.h │ │ ├── ZJImageViewBrowser.h │ │ ├── MyCollectionViewCell.m │ │ └── ZJCustomScrollView.h │ ├── Categories │ │ ├── UIKit+ZJ.h │ │ ├── UIView+ZJ.h │ │ ├── UIColor+ZJ.h │ │ ├── UIImage+ZJ.h │ │ ├── NSString+ZJ.h │ │ ├── UIDevice+ZJ.m │ │ ├── UIView+ZJ.m │ │ ├── UIDevice+ZJ.h │ │ ├── ZJDataSaver.h │ │ ├── UIImage+ZJ.m │ │ ├── UIColor+ZJ.m │ │ └── NSString+ZJ.m │ └── HYBMasonryAutoCellHeight │ │ ├── UITableView+HYBCacheHeight.h │ │ └── UITableView+HYBCacheHeight.m ├── model │ ├── CommentModel.m │ ├── FriendLineCellModel.m │ ├── CommentModel.h │ └── FriendLineCellModel.h ├── view │ ├── FriendHeaderView.h │ ├── ZJRefresh.h │ ├── ZJRefreshHeaderView.h │ ├── CommentCell.h │ ├── UIScrollView+ZJRefresh.h │ ├── OperationView.h │ ├── ContainView.h │ ├── ZJRefreshBaseView.h │ ├── CommentView.h │ ├── ZJRefreshBaseView.m │ ├── FriendLineCell.h │ ├── UIScrollView+ZJRefresh.m │ ├── FriendHeaderView.m │ ├── ContainView.m │ └── CommentCell.m ├── controller │ ├── BaseNavifationController.h │ ├── FriendLineController.h │ └── BaseNavifationController.m ├── other │ ├── DataSourceManager.h │ └── DataSourceManager.m ├── PrefixHeader.pch ├── AppDelegate.h ├── main.m ├── Info.plist ├── Base.lproj │ └── LaunchScreen.storyboard └── AppDelegate.m ├── ZJFriendLineDemo.xcodeproj ├── xcuserdata │ └── ZJ.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── README.md ├── ZJFriendLineDemoTests ├── Info.plist └── ZJFriendLineDemoTests.m └── ZJFriendLineDemoUITests ├── Info.plist └── ZJFriendLineDemoUITests.m /编辑.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/编辑.gif -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pbg.imageset/pbg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pbg.imageset/pbg.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/sp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/sp@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/yy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/yy@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/Like.imageset/Like@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/Like.imageset/Like@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/Like.imageset/Like@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/Like.imageset/Like@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon1.imageset/icon1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/icon1.imageset/icon1.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon2.imageset/icon2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/icon2.imageset/icon2.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon3.imageset/icon3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/icon3.imageset/icon3.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon4.imageset/icon4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/icon4.imageset/icon4.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic00.imageset/pic00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pic00.imageset/pic00.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic01.imageset/pic01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pic01.imageset/pic01.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic02.imageset/pic02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pic02.imageset/pic02.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic03.imageset/pic03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pic03.imageset/pic03.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic04.imageset/pic04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pic04.imageset/pic04.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic05.imageset/pic05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pic05.imageset/pic05.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic06.imageset/pic06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/pic06.imageset/pic06.jpg -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/face@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/face@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/voice@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/voice@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/face_HL@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/face_HL@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_pic@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_pic@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_pic@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_pic@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo.xcodeproj/xcuserdata/ZJ.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumLike.imageset/AlbumLike@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/AlbumLike.imageset/AlbumLike@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumLike.imageset/AlbumLike@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/AlbumLike.imageset/AlbumLike@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/LikeCmtBg.imageset/LikeCmtBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/LikeCmtBg.imageset/LikeCmtBg@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/LikeCmtBg.imageset/LikeCmtBg@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/LikeCmtBg.imageset/LikeCmtBg@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/keyboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/keyboard@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/more_ios@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/more_ios@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/switchDown@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/switchDown@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/switchUp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/switchUp@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/voice_HL@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/voice_HL@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_video@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_video@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_video@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/Delete_ios7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/Delete_ios7@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/Delete_ios7@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/Delete_ios7@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/keyboard_HL@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/keyboard_HL@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/more_ios_HL@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/more_ios_HL@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_location@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_location@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/more/sharemore_location@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/input-bar-flat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/input-bar-flat@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/input-bar-flat@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/ChatToolBar/input-bar-flat@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion0@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion10@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion10@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion11@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion11@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion12@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion12@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion13@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion13@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion14@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion14@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion15@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion15@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion1@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion2@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion3@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion4@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion5@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion6@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion7@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion8@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion9@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/Emotion/section0_emotion9@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumComment.imageset/AlbumComment@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/AlbumComment.imageset/AlbumComment@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumComment.imageset/AlbumComment@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/AlbumComment.imageset/AlbumComment@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_000/f_static_000@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_000/f_static_000@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_000/f_static_000@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_000/f_static_000@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_001/f_static_001@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_001/f_static_001@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_001/f_static_001@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_001/f_static_001@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_002/f_static_002@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_002/f_static_002@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_002/f_static_002@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_002/f_static_002@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_003/f_static_003@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_003/f_static_003@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_003/f_static_003@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_003/f_static_003@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_004/f_static_004@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_004/f_static_004@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_004/f_static_004@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_004/f_static_004@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_005/f_static_005@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_005/f_static_005@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_005/f_static_005@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_005/f_static_005@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_006/f_static_006@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_006/f_static_006@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_006/f_static_006@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_006/f_static_006@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_007/f_static_007@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_007/f_static_007@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_007/f_static_007@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_007/f_static_007@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_008/f_static_008@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_008/f_static_008@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_008/f_static_008@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_008/f_static_008@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_009/f_static_009@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_009/f_static_009@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_009/f_static_009@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_009/f_static_009@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_010/f_static_010@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_010/f_static_010@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_010/f_static_010@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_010/f_static_010@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_011/f_static_011@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_011/f_static_011@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_011/f_static_011@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_011/f_static_011@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_012/f_static_012@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_012/f_static_012@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_012/f_static_012@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_012/f_static_012@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_013/f_static_013@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_013/f_static_013@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_013/f_static_013@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_013/f_static_013@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_014/f_static_014@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_014/f_static_014@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_014/f_static_014@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_014/f_static_014@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_015/f_static_015@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_015/f_static_015@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_015/f_static_015@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_015/f_static_015@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_016/f_static_016@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_016/f_static_016@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_016/f_static_016@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_016/f_static_016@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_017/f_static_017@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_017/f_static_017@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_017/f_static_017@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_017/f_static_017@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_018/f_static_018@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_018/f_static_018@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_018/f_static_018@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_018/f_static_018@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_019/f_static_019@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_019/f_static_019@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_019/f_static_019@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_019/f_static_019@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_020/f_static_020@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_020/f_static_020@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_020/f_static_020@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_020/f_static_020@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_021/f_static_021@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_021/f_static_021@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_021/f_static_021@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_021/f_static_021@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_022/f_static_022@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_022/f_static_022@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_022/f_static_022@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_022/f_static_022@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_023/f_static_023@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_023/f_static_023@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_023/f_static_023@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_023/f_static_023@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_024/f_static_024@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_024/f_static_024@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_024/f_static_024@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_024/f_static_024@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_025/f_static_025@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_025/f_static_025@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_025/f_static_025@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_025/f_static_025@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_026/f_static_026@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_026/f_static_026@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_026/f_static_026@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_026/f_static_026@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_027/f_static_027@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_027/f_static_027@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_027/f_static_027@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_027/f_static_027@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_028/f_static_028@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_028/f_static_028@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_028/f_static_028@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_028/f_static_028@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_029/f_static_029@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_029/f_static_029@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_029/f_static_029@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_029/f_static_029@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_030/f_static_030@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_030/f_static_030@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_030/f_static_030@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_030/f_static_030@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_031/f_static_031@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_031/f_static_031@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_031/f_static_031@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_031/f_static_031@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_032/f_static_032@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_032/f_static_032@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_032/f_static_032@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_032/f_static_032@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_033/f_static_033@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_033/f_static_033@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_033/f_static_033@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_033/f_static_033@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_034/f_static_034@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_034/f_static_034@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_034/f_static_034@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_034/f_static_034@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_035/f_static_035@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_035/f_static_035@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_035/f_static_035@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_035/f_static_035@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_036/f_static_036@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_036/f_static_036@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_036/f_static_036@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_036/f_static_036@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_037/f_static_037@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_037/f_static_037@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_037/f_static_037@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_037/f_static_037@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_038/f_static_038@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_038/f_static_038@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_038/f_static_038@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_038/f_static_038@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_039/f_static_039@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_039/f_static_039@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_039/f_static_039@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_039/f_static_039@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_040/f_static_040@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_040/f_static_040@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_040/f_static_040@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_040/f_static_040@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_041/f_static_041@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_041/f_static_041@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_041/f_static_041@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_041/f_static_041@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_042/f_static_042@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_042/f_static_042@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_042/f_static_042@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_042/f_static_042@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_043/f_static_043@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_043/f_static_043@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_043/f_static_043@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_043/f_static_043@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_044/f_static_044@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_044/f_static_044@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_044/f_static_044@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_044/f_static_044@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_045/f_static_045@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_045/f_static_045@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_045/f_static_045@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_045/f_static_045@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_046/f_static_046@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_046/f_static_046@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_046/f_static_046@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_046/f_static_046@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_047/f_static_047@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_047/f_static_047@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_047/f_static_047@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_047/f_static_047@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_048/f_static_048@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_048/f_static_048@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_048/f_static_048@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_048/f_static_048@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_049/f_static_049@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_049/f_static_049@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_049/f_static_049@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_049/f_static_049@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_050/f_static_050@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_050/f_static_050@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_050/f_static_050@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_050/f_static_050@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_051/f_static_051@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_051/f_static_051@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_051/f_static_051@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_051/f_static_051@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_052/f_static_052@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_052/f_static_052@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_052/f_static_052@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_052/f_static_052@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_053/f_static_053@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_053/f_static_053@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_053/f_static_053@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_053/f_static_053@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_054/f_static_054@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_054/f_static_054@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_054/f_static_054@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_054/f_static_054@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_055/f_static_055@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_055/f_static_055@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_055/f_static_055@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_055/f_static_055@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_056/f_static_056@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_056/f_static_056@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_056/f_static_056@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_056/f_static_056@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_057/f_static_057@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_057/f_static_057@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_057/f_static_057@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_057/f_static_057@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_058/f_static_058@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_058/f_static_058@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_058/f_static_058@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_058/f_static_058@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_059/f_static_059@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_059/f_static_059@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_059/f_static_059@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_059/f_static_059@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_060/f_static_060@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_060/f_static_060@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_060/f_static_060@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_060/f_static_060@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_061/f_static_061@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_061/f_static_061@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_061/f_static_061@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_061/f_static_061@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_062/f_static_062@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_062/f_static_062@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_062/f_static_062@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_062/f_static_062@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_063/f_static_063@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_063/f_static_063@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_063/f_static_063@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_063/f_static_063@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_064/f_static_064@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_064/f_static_064@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_064/f_static_064@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_064/f_static_064@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_065/f_static_065@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_065/f_static_065@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_065/f_static_065@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_065/f_static_065@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_066/f_static_066@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_066/f_static_066@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_066/f_static_066@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_066/f_static_066@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_067/f_static_067@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_067/f_static_067@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_067/f_static_067@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_067/f_static_067@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_068/f_static_068@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_068/f_static_068@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_068/f_static_068@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_068/f_static_068@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_069/f_static_069@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_069/f_static_069@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_069/f_static_069@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_069/f_static_069@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_070/f_static_070@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_070/f_static_070@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_070/f_static_070@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_070/f_static_070@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_071/f_static_071@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_071/f_static_071@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_071/f_static_071@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_071/f_static_071@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_072/f_static_072@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_072/f_static_072@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_072/f_static_072@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_072/f_static_072@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_073/f_static_073@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_073/f_static_073@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_073/f_static_073@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_073/f_static_073@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_074/f_static_074@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_074/f_static_074@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_074/f_static_074@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_074/f_static_074@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_075/f_static_075@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_075/f_static_075@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_075/f_static_075@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_075/f_static_075@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_076/f_static_076@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_076/f_static_076@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_076/f_static_076@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_076/f_static_076@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_077/f_static_077@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_077/f_static_077@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_077/f_static_077@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_077/f_static_077@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_078/f_static_078@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_078/f_static_078@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_078/f_static_078@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_078/f_static_078@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_079/f_static_079@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_079/f_static_079@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_079/f_static_079@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_079/f_static_079@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_080/f_static_080@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_080/f_static_080@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_080/f_static_080@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_080/f_static_080@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_081/f_static_081@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_081/f_static_081@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_081/f_static_081@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_081/f_static_081@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_082/f_static_082@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_082/f_static_082@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_082/f_static_082@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_082/f_static_082@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_083/f_static_083@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_083/f_static_083@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_083/f_static_083@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_083/f_static_083@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_084/f_static_084@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_084/f_static_084@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_084/f_static_084@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_084/f_static_084@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_085/f_static_085@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_085/f_static_085@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_085/f_static_085@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_085/f_static_085@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_086/f_static_086@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_086/f_static_086@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_086/f_static_086@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_086/f_static_086@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_087/f_static_087@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_087/f_static_087@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_087/f_static_087@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_087/f_static_087@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_088/f_static_088@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_088/f_static_088@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_088/f_static_088@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_088/f_static_088@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_089/f_static_089@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_089/f_static_089@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_089/f_static_089@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_089/f_static_089@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_090/f_static_090@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_090/f_static_090@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_090/f_static_090@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_090/f_static_090@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_091/f_static_091@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_091/f_static_091@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_091/f_static_091@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_091/f_static_091@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_092/f_static_092@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_092/f_static_092@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_092/f_static_092@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_092/f_static_092@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_093/f_static_093@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_093/f_static_093@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_093/f_static_093@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_093/f_static_093@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_094/f_static_094@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_094/f_static_094@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_094/f_static_094@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_094/f_static_094@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_095/f_static_095@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_095/f_static_095@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_095/f_static_095@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_095/f_static_095@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_096/f_static_096@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_096/f_static_096@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_096/f_static_096@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_096/f_static_096@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_097/f_static_097@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_097/f_static_097@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_097/f_static_097@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_097/f_static_097@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_098/f_static_098@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_098/f_static_098@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_098/f_static_098@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_098/f_static_098@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_099/f_static_099@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_099/f_static_099@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_099/f_static_099@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_099/f_static_099@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_100/f_static_100@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_100/f_static_100@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_100/f_static_100@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_100/f_static_100@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_101/f_static_101@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_101/f_static_101@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_101/f_static_101@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_101/f_static_101@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_102/f_static_102@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_102/f_static_102@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_102/f_static_102@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_102/f_static_102@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_103/f_static_103@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_103/f_static_103@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_103/f_static_103@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_103/f_static_103@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_104/f_static_104@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_104/f_static_104@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_104/f_static_104@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_104/f_static_104@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_105/f_static_105@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_105/f_static_105@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_105/f_static_105@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_105/f_static_105@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_106/f_static_106@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_106/f_static_106@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_106/f_static_106@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_106/f_static_106@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumOperateMore.imageset/AlbumOperateMore@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/AlbumOperateMore.imageset/AlbumOperateMore@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumOperateMore.imageset/AlbumOperateMore@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/AlbumOperateMore.imageset/AlbumOperateMore@3x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumReflashIcon.imageset/AlbumReflashIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderZhou10496/ZJFriendLineDemo/HEAD/ZJFriendLineDemo/Assets.xcassets/AlbumReflashIcon.imageset/AlbumReflashIcon@2x.png -------------------------------------------------------------------------------- /ZJFriendLineDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/model/CommentModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // CommentModel.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/21. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "CommentModel.h" 10 | 11 | @implementation CommentModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/FriendHeaderView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FriendHeaderView.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FriendHeaderView : UIView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/model/FriendLineCellModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FriendLineCellModel.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/13. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "FriendLineCellModel.h" 10 | 11 | @implementation FriendLineCellModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/ZJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZJRefresh.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/9. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #ifndef ZJRefresh_h 10 | #define ZJRefresh_h 11 | 12 | #import "UIScrollView+ZJRefresh.h" 13 | #endif /* ZJRefresh_h */ 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ZJFriendLineDemo 2 | ### 使用Masonry实现朋友圈简单界面,为大家以后写类似界面提供一个思路 3 | 4 | ![image](https://github.com/coderZhou10496/ZJFriendLineDemo/blob/master/编辑.gif) 5 | 6 | #### 实现的功能有: 7 | * 文本的收起与展开
8 | * 名字label加入链接,可点击
9 | * 浏览图片,点击放大
10 | * 点赞
11 | * 评论
12 | * 回复已有评论
13 | 14 | #####PS:数据为本地生成的假数据 15 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/MASLayoutConstraint.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASLayoutConstraint.h" 10 | 11 | @implementation MASLayoutConstraint 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Helper/MLLabelLayoutManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // MLLabelLayoutManager.h 3 | // MLLabel 4 | // 5 | // Created by molon on 15/6/11. 6 | // Copyright (c) 2015年 molon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MLLabelLayoutManager : NSLayoutManager 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/ZJRefreshHeaderView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZJRefreshHeaderView.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/11. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | #import 9 | #import "ZJRefreshBaseView.h" 10 | 11 | @interface ZJRefreshHeaderView : ZJRefreshBaseView 12 | @end 13 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/controller/BaseNavifationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BaseNavifationController.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BaseNavifationController : UINavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Cagegory/NSString+Emoji.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Emoji.h 3 | // KeyboardForChat 4 | // 5 | // Created by ruofei on 16/5/16. 6 | // Copyright © 2016年 ruofei. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Emoji) 12 | 13 | - (BOOL)isEmoji; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/other/DataSourceManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // DataSourceManager.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/23. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DataSourceManager : NSObject 12 | +(NSMutableArray *)loadDataArray; 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/PrefixHeader.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.pch 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/9. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_pch 10 | #define PrefixHeader_pch 11 | 12 | 13 | #import "UIKit+ZJ.h" 14 | #import "Masonry.h" 15 | 16 | 17 | #endif /* PrefixHeader_pch */ 18 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/CommentCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // CommentCell.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/20. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | @class CommentModel; 11 | @interface CommentCell : UITableViewCell 12 | - (void)configCellWithModel:(CommentModel *)model; 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. 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 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/controller/FriendLineController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FriendLineController.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FriendLineController : UITableViewController 12 | @property (nonatomic,strong)NSMutableArray *dataArray; 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/ZJImageViewBrowser/MyCollectionViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // MyCollectionViewCell.h 3 | // Mission 4 | // 5 | // Created by 李阳 on 15/8/31. 6 | // Copyright (c) 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MyCollectionViewCell : UICollectionViewCell 12 | @property (nonatomic,retain)UIImageView *customImgView; 13 | @end 14 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Category/NSAttributedString+MLLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSAttributedString+MLLabel.h 3 | // Pods 4 | // 5 | // Created by molon on 15/6/13. 6 | // 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface NSAttributedString (MLLabel) 13 | 14 | + (instancetype)attributedStringWithHTML:(NSString*)htmlString; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/FaceButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // FaceButton.m 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import "FaceButton.h" 14 | 15 | @implementation FaceButton 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. 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 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Expression/NSString+MLExpression.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+MLExpression.h 3 | // Pods 4 | // 5 | // Created by molon on 15/6/18. 6 | // 7 | // 8 | 9 | #import 10 | #import "MLExpressionManager.h" 11 | 12 | @interface NSString (MLExpression) 13 | 14 | - (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/UIScrollView+ZJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+ZJRefresh.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/11. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIScrollView (ZJRefresh) 12 | -(void)addRefreshHeaderViewWithCallback:(void(^)())callback; 13 | -(void)beginHeaderRefresh; 14 | -(void)headerEndRefreshing; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Expression/NSAttributedString+MLExpression.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSAttributedString+MLExpression.h 3 | // Pods 4 | // 5 | // Created by molon on 15/6/18. 6 | // 7 | // 8 | 9 | #import 10 | #import "MLExpressionManager.h" 11 | 12 | @interface NSAttributedString (MLExpression) 13 | 14 | - (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression; 15 | @end 16 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/model/CommentModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // CommentModel.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/21. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CommentModel : NSObject 12 | @property (nonatomic,copy)NSString *userName; 13 | @property (nonatomic,copy)NSString *replyUserName; 14 | @property (nonatomic,copy)NSString *content; 15 | @end 16 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pbg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pbg.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIKit+ZJ.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIKit+ZJ.h 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #ifndef UIKit_ZJ_h 10 | #define UIKit_ZJ_h 11 | 12 | #import "UIColor+ZJ.h" 13 | #import "NSString+ZJ.h" 14 | #import "UIImage+ZJ.h" 15 | #import "UIDevice+ZJ.h" 16 | #import "UIView+ZJ.h" 17 | #import "ZJDataSaver.h" 18 | #endif /* UIKit_ZJ_h */ 19 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon1.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon2.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon3.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/icon4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon4.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic00.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pic00.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic01.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pic01.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic02.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pic02.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic03.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pic03.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic04.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pic04.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic05.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pic05.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/pic06.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pic06.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/NSLayoutConstraint+MASDebugAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+MASDebugAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * makes debug and log output of NSLayoutConstraints more readable 13 | */ 14 | @interface NSLayoutConstraint (MASDebugAdditions) 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/FaceButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // FaceButton.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | 15 | @interface FaceButton : UIButton 16 | 17 | @property (nonatomic, copy) NSString *faceTitle; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumReflashIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "AlbumReflashIcon@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIView+ZJ.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+ZJ.h 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (ZJ) 12 | @property (nonatomic, assign) CGFloat sd_height; 13 | @property (nonatomic, assign) CGFloat sd_width; 14 | 15 | @property (nonatomic, assign) CGFloat sd_y; 16 | @property (nonatomic, assign) CGFloat sd_x; 17 | @end 18 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/Like.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Like@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "Like@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Category/NSMutableAttributedString+MLLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString+MLLabel.h 3 | // MLLabel 4 | // 5 | // Created by molon on 15/6/5. 6 | // Copyright (c) 2015年 molon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSMutableAttributedString (MLLabel) 12 | 13 | - (void)removeAllNSOriginalFontAttributes; 14 | 15 | - (void)removeAttributes:(NSArray *)names range:(NSRange)range; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/OperationView.h: -------------------------------------------------------------------------------- 1 | // 2 | // OperationView.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/20. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface OperationView : UIView 12 | @property (nonatomic,assign)BOOL isShowing; 13 | @property (nonatomic,copy)void (^commentBtnClicked)(); 14 | @property (nonatomic,copy)void (^likeBtnClicked)(); 15 | @property (nonatomic,copy)NSString *praiseString; 16 | @end 17 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumLike.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "AlbumLike@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "AlbumLike@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/LikeCmtBg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "LikeCmtBg@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "LikeCmtBg@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Expression/NSString+MLExpression.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+MLExpression.m 3 | // Pods 4 | // 5 | // Created by molon on 15/6/18. 6 | // 7 | // 8 | 9 | #import "NSString+MLExpression.h" 10 | 11 | @implementation NSString (MLExpression) 12 | 13 | - (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression; 14 | { 15 | return [MLExpressionManager expressionAttributedStringWithString:self expression:expression]; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumComment.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "AlbumComment@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "AlbumComment@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/ZJImageViewBrowser/ZJImageViewBrowser.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZJImageViewBrowser.h 3 | // ZJPictureBrowseDemo 4 | // 5 | // Created by ZJ on 16/4/14. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ZJImageViewBrowser : UIView 12 | -(id)initWithFrame:(CGRect)frame imageViewArray:(NSArray *)array imageViewContainView:(UIView *)containView; 13 | -(void)show; 14 | @property (nonatomic,strong)UIImageView *selectedImageView; 15 | @end 16 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/FaceSourceManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // FaceSourceManager.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | #import "FaceThemeModel.h" 15 | 16 | @interface FaceSourceManager : NSObject 17 | 18 | + (NSArray *)loadFaceSource; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/icons/face/f_static_007/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "f_static_007@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "f_static_007@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Assets.xcassets/AlbumOperateMore.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "AlbumOperateMore@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "AlbumOperateMore@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/FaceThemeView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FaceView.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | 15 | @class FaceThemeModel; 16 | 17 | /** 18 | * 负责管理主题 19 | */ 20 | 21 | @interface FaceThemeView : UIView 22 | 23 | - (void)loadFaceTheme:(FaceThemeModel *)faceTheme; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Expression/NSAttributedString+MLExpression.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSAttributedString+MLExpression.m 3 | // Pods 4 | // 5 | // Created by molon on 15/6/18. 6 | // 7 | // 8 | 9 | #import "NSAttributedString+MLExpression.h" 10 | 11 | @implementation NSAttributedString (MLExpression) 12 | 13 | 14 | - (NSAttributedString*)expressionAttributedStringWithExpression:(MLExpression*)expression 15 | { 16 | return [MLExpressionManager expressionAttributedStringWithString:self expression:expression]; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Category/NSString+MLLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+MLLabel.h 3 | // Pods 4 | // 5 | // Created by molon on 15/6/13. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (MLLabel) 12 | 13 | //这个只是由于换行符的原因所必须有的行数 14 | - (NSUInteger)lineCount; 15 | 16 | //拿到某行之前的字符串 17 | - (NSString*)subStringToLineIndex:(NSUInteger)lineIndex; 18 | 19 | //拿到某行之前的字符串的长度 20 | - (NSUInteger)lengthToLineIndex:(NSUInteger)lineIndex; 21 | 22 | //是否最后字符属于换行符 23 | - (BOOL)isNewlineCharacterAtEnd; 24 | @end 25 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIColor+ZJ.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+ZJ.h 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIColor (ZJ) 12 | /** 13 | * 十六进制颜色 14 | */ 15 | + (UIColor *)colorWithHexColorString:(NSString *)hexColorString; 16 | 17 | /** 18 | 随机得到一个颜色 19 | */ 20 | +(UIColor*)ZJRandomColor; 21 | 22 | /** 普通定义 */ 23 | #define SHOWCOLOR(r,g,b) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:1.0f] 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Models/FaceThemeModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // FaceModel.m 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import "FaceThemeModel.h" 14 | 15 | @implementation FaceModel 16 | 17 | @end 18 | 19 | @implementation FaceThemeModel 20 | 21 | - (NSString *)description 22 | { 23 | return [NSString stringWithFormat:@"%@ %@", self.themeIcon, self.themeDecribe]; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/ToolBarPanel/OfficialAccountToolbar.h: -------------------------------------------------------------------------------- 1 | // 2 | // OfficialAccountToolbar.h 3 | // KeyboardForChat 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/4/1. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | 14 | /** 15 | * 可以完全定制,控件只是为了演示效果 16 | */ 17 | 18 | #import 19 | 20 | typedef void (^SWITCHACTION) (); 21 | 22 | @interface OfficialAccountToolbar : UIView 23 | 24 | @property (nonatomic, copy) SWITCHACTION switchAction; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/FacePageView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PageFaceView.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | #import "FaceThemeModel.h" 15 | /** 16 | 负责展示主题的每一页 17 | */ 18 | @interface FacePageView : UICollectionViewCell 19 | 20 | @property (nonatomic, assign) FaceThemeStyle themeStyle; 21 | 22 | - (void)loadPerPageFaceData:(NSArray *)faceData; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/ZJImageViewBrowser/MyCollectionViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // MyCollectionViewCell.m 3 | // Mission 4 | // 5 | // Created by 李阳 on 15/8/31. 6 | // Copyright (c) 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import "MyCollectionViewCell.h" 10 | 11 | @implementation MyCollectionViewCell 12 | -(UIImageView *)customImgView 13 | { 14 | if(!_customImgView) 15 | { 16 | _customImgView = [[UIImageView alloc] initWithFrame:self.bounds]; 17 | _customImgView.backgroundColor = [UIColor cyanColor]; 18 | [self addSubview:_customImgView]; 19 | } 20 | return _customImgView; 21 | } 22 | @end 23 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/MASLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * When you are debugging or printing the constraints attached to a view this subclass 13 | * makes it easier to identify which constraints have been created via Masonry 14 | */ 15 | @interface MASLayoutConstraint : NSLayoutConstraint 16 | 17 | /** 18 | * a key to associate with this constraint 19 | */ 20 | @property (nonatomic, strong) id mas_key; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/ContainView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ContainView.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/5/4. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "FriendLineCellModel.h" 11 | 12 | @protocol ContainViewDelegate 13 | 14 | -(void)didClickImageViewWithCurrentImageView:(UIImageView *)imageView imageViewArray:(NSMutableArray *)array imageSuperView:(UIView *)superView; 15 | 16 | @end 17 | 18 | @interface ContainView : UIView 19 | @property (nonatomic,strong)FriendLineCellModel *model; 20 | @property (nonatomic,weak)id delegate; 21 | @end 22 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/MASCompositeConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASCompositeConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | #import "MASUtilities.h" 11 | 12 | /** 13 | * A group of MASConstraint objects 14 | */ 15 | @interface MASCompositeConstraint : MASConstraint 16 | 17 | /** 18 | * Creates a composite with a predefined array of children 19 | * 20 | * @param children child MASConstraints 21 | * 22 | * @return a composite constraint 23 | */ 24 | - (id)initWithChildren:(NSArray *)children; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/ZJImageViewBrowser/ZJCustomScrollView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZJCustomScrollView.h 3 | // ZJPictureBrowseDemo 4 | // 5 | // Created by ZJ on 16/4/14. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol ZJCustomScrollViewDelegate 12 | 13 | - (void)customScrollViewTappedWithObject:(id) sender; 14 | 15 | @end 16 | 17 | @interface ZJCustomScrollView : UIScrollView 18 | @property (weak,nonatomic) id i_delegate; 19 | @property (nonatomic,strong)UIImage *image; 20 | -(void)setImageViewFrame:(CGRect)rect; 21 | -(void)beginRectAnimation; 22 | -(void)changeOriginRect; 23 | @end 24 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/ZJRefreshBaseView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZJRefreshBaseView.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/11. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | UIKIT_EXTERN NSString *const ZJBaseRefreshViewObserveKeyPath; 12 | 13 | typedef NS_ENUM(NSInteger, ZJRefreshState) { 14 | ZJRefreshStatePulling, 15 | ZJRefreshStateNormal, 16 | ZJRefreshStateRefreshing 17 | }; 18 | @interface ZJRefreshBaseView : UIView 19 | @property (nonatomic,assign)ZJRefreshState refreshState; 20 | @property (nonatomic,copy)void(^callbackBlock)(); 21 | @property (nonatomic, strong) UIScrollView *scrollView; 22 | @end 23 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/CommentView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CommentView.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/20. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | @class CommentModel; 11 | @class FriendLineCellModel; 12 | 13 | @protocol CommentViewDelegate 14 | 15 | -(void)didClickRowWithFirstIndexPath:(NSIndexPath *)firIndexPath secondIndex:(NSIndexPath *)secIndexPath; 16 | 17 | @end 18 | 19 | @interface CommentView : UIView 20 | -(id)init; 21 | - (void)configCellWithModel:(FriendLineCellModel *)model indexPath:(NSIndexPath *)indexPath; 22 | 23 | @property (nonatomic,weak) id delegate; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIImage+ZJ.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+ZJ.h 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (ZJ) 12 | 13 | /** 14 | * 拉伸图片 自定义比例 15 | */ 16 | +(UIImage *)resizeWithImageName:(NSString *)name leftCap:(CGFloat)leftCap topCap:(CGFloat)topCap; 17 | 18 | /** 19 | *返回中心拉伸的图片 20 | */ 21 | +(UIImage *)resizeWithImageName:(NSString *)name; 22 | 23 | /** 24 | * 从给定UIView中截图:UIView转UIImage 25 | */ 26 | +(UIImage *)cutFromView:(UIView *)view; 27 | 28 | /** 29 | * 从给定UIImage和指定Frame截图: 30 | */ 31 | -(UIImage *)cutWithFrame:(CGRect)frame; 32 | @end 33 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Models/MoreItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // MoreItem.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/31. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | 15 | @interface MoreItem : NSObject 16 | 17 | @property (nonatomic, copy) NSString * itemPicName; 18 | @property (nonatomic, copy) NSString * itemHighlightPicName; 19 | @property (nonatomic, copy) NSString * itemName; 20 | 21 | + (instancetype)moreItemWithPicName:(NSString *)picName highLightPicName:(NSString *)highLightPicName itemName:(NSString *)itemName; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/model/FriendLineCellModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FriendLineCellModel.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/13. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FriendLineCellModel : NSObject 12 | @property (nonatomic,copy)NSString *usernName; 13 | @property (nonatomic,copy)NSString *headImgName; 14 | @property (nonatomic,copy)NSString *msgContent; 15 | @property (nonatomic,strong)NSArray *picNameArray; 16 | 17 | @property (nonatomic,strong)NSArray *likeNameArray; 18 | @property (nonatomic,strong)NSArray *commentArray; 19 | 20 | @property (nonatomic,assign)BOOL isLiked; 21 | ///发布说说的展开状态 22 | @property (nonatomic, assign) BOOL isExpand; 23 | @end 24 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/MorePanel/MorePanel.h: -------------------------------------------------------------------------------- 1 | // 2 | // MorePannel.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/31. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | 15 | @class MoreItem; 16 | @class MorePanel; 17 | @protocol MorePannelDelegate 18 | 19 | @optional 20 | - (void)morePannel:(MorePanel *)morePannel didSelectItemIndex:(NSInteger)index; 21 | 22 | @end 23 | 24 | @interface MorePanel : UIView 25 | 26 | @property (nonatomic, weak) id delegate; 27 | 28 | + (instancetype)morePannel; 29 | 30 | - (void)loadMoreItems:(NSArray *)items; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/controller/BaseNavifationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BaseNavifationController.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "BaseNavifationController.h" 10 | 11 | @implementation BaseNavifationController 12 | - (void)viewDidLoad 13 | { 14 | [super viewDidLoad]; 15 | //导航条字体颜色,字体大小 16 | [self.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName,[UIFont systemFontOfSize:20],NSFontAttributeName, nil]]; 17 | //导航条背景色 18 | self.navigationBar.barTintColor = [UIColor colorWithRed:20/255.0 green:20/255.0 blue:20/255.0 alpha:1]; 19 | self.navigationBar.tintColor = [UIColor whiteColor]; 20 | } 21 | @end 22 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/ToolBarPanel/RFTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // RFTextView.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/28. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | 15 | @class RFTextView; 16 | @protocol RFTextViewDelegate 17 | 18 | - (void)textViewDeleteBackward:(RFTextView *)textView; 19 | 20 | @end 21 | 22 | @interface RFTextView : UITextView 23 | 24 | @property(nonatomic ,weak) id delegate; 25 | 26 | @property (nonatomic, copy) NSString * placeHolder; 27 | 28 | @property (nonatomic, strong) UIColor * placeHolderTextColor; 29 | 30 | - (NSUInteger)numberOfLinesOfText; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/NSString+ZJ.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+ZJ.h 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (ZJ) 12 | /** 13 | * 是否是空字符串 14 | */ 15 | -(BOOL)isEmptyString; 16 | 17 | /** 18 | * 是否是有效的电话号码 19 | */ 20 | -(BOOL)isValidatePhoneNumber; 21 | 22 | /** 23 | 是否是有效的邮箱 24 | */ 25 | -(BOOL)isValidateEmail; 26 | 27 | /** 28 | 是否是纯数字字符串 29 | */ 30 | -(BOOL)isOnlyNumberString; 31 | 32 | /** 33 | 是否是纯字母字符串 34 | */ 35 | -(BOOL)isOnlyCharcterString; 36 | 37 | /** 38 | 得到当前时间的字符串 39 | */ 40 | +(NSString *)getCurrentTime; 41 | 42 | /** 43 | 根据文字多少计算高度 44 | */ 45 | + (float)stringHeightWithString:(NSString *)string size:(CGFloat)fontSize maxWidth:(CGFloat)maxWidth; 46 | @end 47 | -------------------------------------------------------------------------------- /ZJFriendLineDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 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 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ZJFriendLineDemoUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 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 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIDevice+ZJ.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIDevice+ZJ.m 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import "UIDevice+ZJ.h" 10 | 11 | @implementation UIDevice (ZJ) 12 | +(NSString *)currentVersion 13 | { 14 | NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 15 | return currentVersion; 16 | } 17 | 18 | +(NSString *)currentBuild 19 | { 20 | NSString *currentBuild = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 21 | return currentBuild; 22 | } 23 | +(CGFloat)systemVersion 24 | { 25 | CGFloat version = 0; 26 | UIDevice *currentDevice = [UIDevice currentDevice]; 27 | version = currentDevice.systemVersion.floatValue; 28 | return version; 29 | } 30 | @end 31 | -------------------------------------------------------------------------------- /ZJFriendLineDemo.xcodeproj/xcuserdata/ZJ.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ZJFriendLineDemo.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 38B9F5431CB687AA001B198F 16 | 17 | primary 18 | 19 | 20 | 38B9F55C1CB687AA001B198F 21 | 22 | primary 23 | 24 | 25 | 38B9F5671CB687AA001B198F 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Cagegory/NSString+Emoji.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Emoji.m 3 | // KeyboardForChat 4 | // 5 | // Created by ruofei on 16/5/16. 6 | // Copyright © 2016年 ruofei. All rights reserved. 7 | // 8 | 9 | #import "NSString+Emoji.h" 10 | 11 | @implementation NSString (Emoji) 12 | 13 | - (BOOL)isEmoji{ 14 | const unichar high = [self characterAtIndex:0]; 15 | 16 | // Surrogate pair (U+1D000-1F77F) 17 | if (0xd800 <= high && high <= 0xdbff && self.length >= 2) { 18 | const unichar low = [self characterAtIndex:1]; 19 | const int codepoint = ((high - 0xd800) * 0x400) + (low - 0xdc00) + 0x10000; 20 | 21 | return (0x1d000 <= codepoint && codepoint <= 0x1f77f); 22 | 23 | // Not surrogate pair (U+2100-27BF) 24 | } else { 25 | return (0x2100 <= high && high <= 0x27bf); 26 | } 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Category/NSMutableAttributedString+MLLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString+MLLabel.m 3 | // MLLabel 4 | // 5 | // Created by molon on 15/6/5. 6 | // Copyright (c) 2015年 molon. All rights reserved. 7 | // 8 | 9 | #import "NSMutableAttributedString+MLLabel.h" 10 | 11 | @implementation NSMutableAttributedString (MLLabel) 12 | 13 | - (void)removeAllNSOriginalFontAttributes 14 | { 15 | [self enumerateAttribute:@"NSOriginalFont" inRange:NSMakeRange(0, self.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { 16 | if (value){ 17 | [self removeAttribute:@"NSOriginalFont" range:range]; 18 | } 19 | }]; 20 | } 21 | 22 | 23 | - (void)removeAttributes:(NSArray *)names range:(NSRange)range 24 | { 25 | for (NSString *name in names) { 26 | [self removeAttribute:name range:range]; 27 | } 28 | } 29 | @end 30 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Models/ChatToolBarItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // ToolBarItem.h 3 | // KeyboardForChat 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by caipeng on 16/4/1. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | 15 | typedef NS_ENUM(NSInteger, BarItemKind){ 16 | kBarItemVoice, 17 | kBarItemFace, 18 | kBarItemMore, 19 | kBarItemSwitchBar 20 | }; 21 | 22 | @interface ChatToolBarItem : NSObject 23 | 24 | @property (nonatomic, copy) NSString *normalStr; 25 | @property (nonatomic, copy) NSString *highLStr; 26 | @property (nonatomic, copy) NSString *selectStr; 27 | @property (nonatomic, assign) BarItemKind itemKind; 28 | 29 | + (instancetype)barItemWithKind:(BarItemKind)itemKind normal:(NSString*)normalStr high:(NSString *)highLstr select:(NSString *)selectStr; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Helper/MLLabel+Override.h: -------------------------------------------------------------------------------- 1 | // 2 | // MLLabel+Override.h 3 | // MLLabel 4 | // 5 | // Created by molon on 15/6/6. 6 | // Copyright (c) 2015年 molon. All rights reserved. 7 | // 8 | 9 | #import "MLLabel.h" 10 | 11 | @class MLLabelLayoutManager; 12 | @interface MLLabel (Override) 13 | 14 | @property (nonatomic, strong) NSTextStorage *textStorage; 15 | @property (nonatomic, strong) MLLabelLayoutManager *layoutManager; 16 | @property (nonatomic, strong) NSTextContainer *textContainer; 17 | 18 | @property (nonatomic, strong) NSAttributedString *lastAttributedText; 19 | @property (nonatomic, assign) MLLastTextType lastTextType; 20 | 21 | //初始化 22 | - (void)commonInit; 23 | 24 | //复写这个可以最终文本改变 25 | - (NSMutableAttributedString*)attributedTextForTextStorageFromLabelProperties; 26 | 27 | //获取绘制起点 28 | - (CGPoint)textOffsetWithTextSize:(CGSize)textSize; 29 | 30 | //可以完全重绘当前label 31 | - (void)reSetText; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/Masonry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Masonry.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Masonry. 12 | FOUNDATION_EXPORT double MasonryVersionNumber; 13 | 14 | //! Project version string for Masonry. 15 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 16 | 17 | #import "MASUtilities.h" 18 | #import "View+MASAdditions.h" 19 | #import "View+MASShorthandAdditions.h" 20 | #import "ViewController+MASAdditions.h" 21 | #import "NSArray+MASAdditions.h" 22 | #import "NSArray+MASShorthandAdditions.h" 23 | #import "MASConstraint.h" 24 | #import "MASCompositeConstraint.h" 25 | #import "MASViewAttribute.h" 26 | #import "MASViewConstraint.h" 27 | #import "MASConstraintMaker.h" 28 | #import "MASLayoutConstraint.h" 29 | #import "NSLayoutConstraint+MASDebugAdditions.h" 30 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/ZJRefreshBaseView.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZJRefreshBaseView.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/11. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "ZJRefreshBaseView.h" 10 | 11 | NSString *const ZJBaseRefreshViewObserveKeyPath = @"contentOffset"; 12 | 13 | @implementation ZJRefreshBaseView 14 | 15 | 16 | - (void)willMoveToSuperview:(UIView *)newSuperview 17 | { 18 | [super willMoveToSuperview:newSuperview]; 19 | 20 | [self.superview removeObserver:self forKeyPath:ZJBaseRefreshViewObserveKeyPath]; 21 | [newSuperview addObserver:self forKeyPath:ZJBaseRefreshViewObserveKeyPath options:NSKeyValueObservingOptionNew context:nil]; 22 | 23 | _scrollView = (UIScrollView *)newSuperview; 24 | 25 | } 26 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 27 | { 28 | // 子类实现 29 | 30 | } 31 | @end 32 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/MLLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // MLLabel.h 3 | // MLLabel 4 | // 5 | // Created by molon on 15/5/18. 6 | // Copyright (c) 2015年 molon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(NSUInteger, MLLastTextType) { 12 | MLLastTextTypeNormal, 13 | MLLastTextTypeAttributed, 14 | }; 15 | // UILabel的baselineAdjustment属性功能没模拟,其他的属性都模拟了 16 | 17 | @interface MLLabel : UILabel 18 | 19 | @property (nonatomic, assign) CGFloat lineHeightMultiple; //行高的multiple 20 | @property (nonatomic, assign) CGFloat lineSpacing; //行间距 21 | 22 | @property (nonatomic, assign) UIEdgeInsets textInsets; 23 | 24 | @property (nonatomic, copy) void(^doBeforeDrawingTextBlock)(CGRect rect,CGPoint beginOffset,CGSize drawSize); 25 | 26 | - (CGSize)preferredSizeWithMaxWidth:(CGFloat)maxWidth; 27 | 28 | 29 | //方便码代码 30 | - (void)setDoBeforeDrawingTextBlock:(void (^)(CGRect rect,CGPoint beginOffset,CGSize drawSize))doBeforeDrawingTextBlock; 31 | @end 32 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/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 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/FacePanel.h: -------------------------------------------------------------------------------- 1 | // 2 | // ChatFacePanel.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | 14 | /** 15 | * 管理所有的表情主题 16 | */ 17 | 18 | #import 19 | #import "FaceThemeModel.h" 20 | 21 | @class FacePanel; 22 | @protocol FacePanelDelegate 23 | @optional 24 | - (void)facePanelFacePicked:(FacePanel *)facePanel faceStyle:(FaceThemeStyle)themeStyle faceName:(NSString *)faceName isDeleteKey:(BOOL)deletekey; 25 | - (void)facePanelSendTextAction:(FacePanel *)facePanel; 26 | - (void)facePanelAddSubject:(FacePanel *)facePanel; 27 | - (void)facePanelSetSubject:(FacePanel *)facePanel; 28 | 29 | @end 30 | 31 | @interface FacePanel : UIView 32 | 33 | @property (nonatomic, weak) id delegate; 34 | 35 | - (void)loadFaceThemeItems:(NSArray*)themeItems; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Models/FaceThemeModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FaceModel.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | 15 | typedef NS_ENUM(NSInteger, FaceThemeStyle) 16 | { 17 | FaceThemeStyleSystemEmoji, //30*30 18 | FaceThemeStyleCustomEmoji, //40*40 19 | FaceThemeStyleGif //60*60 20 | }; 21 | 22 | @interface FaceModel : NSObject 23 | 24 | /** 表情标题 */ 25 | @property (nonatomic, copy) NSString *faceTitle; 26 | /** 表情图片 */ 27 | @property (nonatomic, copy) NSString *faceIcon; 28 | 29 | @end 30 | 31 | @interface FaceThemeModel : NSObject 32 | 33 | @property (nonatomic, assign) FaceThemeStyle themeStyle; 34 | @property (nonatomic, copy) NSString *themeIcon; 35 | @property (nonatomic, copy) NSString *themeDecribe; 36 | @property (nonatomic, strong) NSArray *faceModels; 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Models/ChatToolBarItem.m: -------------------------------------------------------------------------------- 1 | // 2 | // ToolBarItem.m 3 | // KeyboardForChat 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by caipeng on 16/4/1. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import "ChatToolBarItem.h" 14 | 15 | @implementation ChatToolBarItem 16 | 17 | + (instancetype)barItemWithKind:(BarItemKind)itemKind normal:(NSString*)normalStr high:(NSString *)highLstr select:(NSString *)selectStr 18 | { 19 | return [[[self class] alloc] initWithItemKind:itemKind normal:normalStr high:highLstr select:selectStr]; 20 | } 21 | 22 | 23 | - (instancetype)initWithItemKind:(BarItemKind)itemKind normal:(NSString*)normalStr high:(NSString *)highLstr select:(NSString *)selectStr 24 | { 25 | if (self = [super init]) { 26 | self.itemKind = itemKind; 27 | self.normalStr = normalStr; 28 | self.highLStr = highLstr; 29 | self.selectStr = selectStr; 30 | } 31 | return self; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/ViewController+MASAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.h 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "MASUtilities.h" 10 | #import "MASConstraintMaker.h" 11 | #import "MASViewAttribute.h" 12 | 13 | #ifdef MAS_VIEW_CONTROLLER 14 | 15 | @interface MAS_VIEW_CONTROLLER (MASAdditions) 16 | 17 | /** 18 | * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute 19 | */ 20 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; 21 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; 22 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; 23 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; 24 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; 25 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; 26 | 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /ZJFriendLineDemoTests/ZJFriendLineDemoTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZJFriendLineDemoTests.m 3 | // ZJFriendLineDemoTests 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ZJFriendLineDemoTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation ZJFriendLineDemoTests 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 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/FriendLineCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FriendLineCell.h 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/13. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | @class FriendLineCellModel; 11 | @class OperationView; 12 | @protocol FriendLineCellDelegate 13 | 14 | -(void)didClickedMoreBtn:(UIButton *)btn indexPath:(NSIndexPath *)indexPath; 15 | -(void)didClickImageViewWithCurrentView:(UIImageView *)imageView imageViewArray:(NSMutableArray *)array imageSuperView:(UIView *)view indexPath:(NSIndexPath *)indexPath; 16 | -(void)didClickenLikeBtnWithIndexPath:(NSIndexPath *)indexPath; 17 | -(void)didClickCommentBtnWithIndexPath:(NSIndexPath *)indexPath; 18 | -(void)didClickRowWithFirstIndexPath:(NSIndexPath *)firIndexPath secondIndex:(NSIndexPath *)secIndexPath; 19 | @end 20 | 21 | @interface FriendLineCell : UITableViewCell 22 | @property (nonatomic,strong)OperationView *operationView; 23 | @property (nonatomic,weak)id delegate; 24 | 25 | - (void)configCellWithModel:(FriendLineCellModel *)model indexPath:(NSIndexPath *)indexPath; 26 | @end 27 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/HYBMasonryAutoCellHeight/UITableView+HYBCacheHeight.h: -------------------------------------------------------------------------------- 1 | // 2 | // UITableView+HYBCacheHeight.h 3 | // CellAutoHeightDemo 4 | // 5 | // Created by huangyibiao on 16/1/22. 6 | // Copyright © 2016年 huangyibiao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * 基于Masonry自动布局实现的自动计算cell的行高扩展 13 | * 14 | * @author huangyibiao 15 | * @email huangyibiao520@163.com 16 | * @github https://github.com/CoderJackyHuang 17 | * @blog http://www.henishuo.com/masonry-cell-height-auto-calculate/ 18 | * 19 | * @note Make friends with me: 20 | * QQ:(632840804) 21 | * Please tell me your real name when you send message to me.3Q. 22 | */ 23 | @interface UITableView (HYBCacheHeight) 24 | 25 | /** 26 | * @author 黄仪标, 16-01-22 20:01:09 27 | * 28 | * 用于缓存cell的行高 29 | */ 30 | @property (nonatomic, strong, readonly) NSMutableDictionary *hyb_cacheCellHeightDict; 31 | 32 | /** 33 | * @author 黄仪标, 16-03-01 21:03:19 34 | * 35 | * 用于获取或者添加计算行高的cell,因为理论上只有一个cell用来计算行高,以降低消耗 36 | */ 37 | @property (nonatomic, strong, readonly) NSMutableDictionary *hyb_reuseCells; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Expression/MLExpressionManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // MLExpressionManager.h 3 | // Pods 4 | // 5 | // Created by molon on 15/6/18. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface MLExpression : NSObject 12 | 13 | @property (readonly, nonatomic, copy) NSString *regex; 14 | @property (readonly, nonatomic, copy) NSString *plistName; 15 | @property (readonly, nonatomic, copy) NSString *bundleName; 16 | 17 | + (instancetype)expressionWithRegex:(NSString*)regex plistName:(NSString*)plistName bundleName:(NSString*)bundleName; 18 | 19 | @end 20 | 21 | @interface MLExpressionManager : NSObject 22 | 23 | + (instancetype)sharedInstance; 24 | 25 | //获取对应的表情attrStr 26 | + (NSAttributedString*)expressionAttributedStringWithString:(id)string expression:(MLExpression*)expression; 27 | //给一个str数组,返回其对应的表情attrStr数组,顺序一致 28 | + (NSArray *)expressionAttributedStringsWithStrings:(NSArray*)strings expression:(MLExpression*)expression; 29 | //同上,但是以回调方式返回 30 | + (void)expressionAttributedStringsWithStrings:(NSArray*)strings expression:(MLExpression*)expression callback:(void(^)(NSArray *result))callback; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIView+ZJ.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+ZJ.m 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import "UIView+ZJ.h" 10 | 11 | @implementation UIView (ZJ) 12 | - (CGFloat)sd_height 13 | { 14 | return self.frame.size.height; 15 | } 16 | 17 | - (void)setSd_height:(CGFloat)sd_height 18 | { 19 | CGRect temp = self.frame; 20 | temp.size.height = sd_height; 21 | self.frame = temp; 22 | } 23 | 24 | - (CGFloat)sd_width 25 | { 26 | return self.frame.size.width; 27 | } 28 | - (void)setSd_width:(CGFloat)sd_width 29 | { 30 | CGRect temp = self.frame; 31 | temp.size.width = sd_width; 32 | self.frame = temp; 33 | } 34 | - (CGFloat)sd_y 35 | { 36 | return self.frame.origin.y; 37 | } 38 | 39 | - (void)setSd_y:(CGFloat)sd_y 40 | { 41 | CGRect temp = self.frame; 42 | temp.origin.y = sd_y; 43 | self.frame = temp; 44 | } 45 | 46 | - (CGFloat)sd_x 47 | { 48 | return self.frame.origin.x; 49 | } 50 | 51 | - (void)setSd_x:(CGFloat)sd_x 52 | { 53 | CGRect temp = self.frame; 54 | temp.origin.x = sd_x; 55 | self.frame = temp; 56 | } 57 | @end 58 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Models/MoreItem.m: -------------------------------------------------------------------------------- 1 | // 2 | // MoreItem.m 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/31. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import "MoreItem.h" 14 | 15 | @implementation MoreItem 16 | 17 | + (instancetype)moreItemWithPicName:(NSString *)picName highLightPicName:(NSString *)highLightPicName itemName:(NSString *)itemName 18 | { 19 | return [[self alloc] initWithPicName:picName highLightPicName:highLightPicName itemName:itemName]; 20 | } 21 | 22 | - (instancetype)initWithPicName:(NSString *)picName highLightPicName:(NSString *)highLightPicName itemName:(NSString *)itemName 23 | { 24 | if (self = [super init]) { 25 | if (picName.length == 0) { 26 | picName = nil; 27 | } 28 | if (highLightPicName.length == 0) { 29 | highLightPicName = nil; 30 | } 31 | self.itemName = itemName; 32 | self.itemPicName = picName; 33 | self.itemHighlightPicName = highLightPicName; 34 | } 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/PanelBottomView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PanelBottomView.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/31. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | /** 14 | * 可以定制,控件只是为了演示,(原因是缺少图片) 15 | */ 16 | 17 | #import 18 | 19 | typedef void (^ADDACTIONBLOCK)(); 20 | typedef void (^SETACTIONBLOCK)(); 21 | 22 | @class PanelBottomView; 23 | 24 | @protocol PanelBottomViewDelegate 25 | 26 | @optional 27 | - (void)panelBottomView:(PanelBottomView*)panelBottomView didPickerFaceSubjectIndex:(NSInteger)faceSubjectIndex; 28 | - (void)panelBottomViewSendAction:(PanelBottomView*)panelBottomView; 29 | 30 | @end 31 | 32 | @interface PanelBottomView : UIView 33 | 34 | @property (nonatomic, weak) id delegate; 35 | 36 | @property (nonatomic, copy) ADDACTIONBLOCK addAction; 37 | @property (nonatomic, copy) SETACTIONBLOCK setAction; 38 | 39 | - (void)loadfaceThemePickerSource:(NSArray *)pickerSource; 40 | - (void)changeFaceSubjectIndex:(NSInteger)subjectIndex; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/plist/emotion.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | emotion0 6 | section0_emotion0 7 | emotion1 8 | section0_emotion1 9 | emotion2 10 | section0_emotion2 11 | emotion3 12 | section0_emotion3 13 | emotion4 14 | section0_emotion4 15 | emotion5 16 | section0_emotion5 17 | emotion6 18 | section0_emotion6 19 | emotion7 20 | section0_emotion7 21 | emotion8 22 | section0_emotion8 23 | emotion9 24 | section0_emotion9 25 | emotion10 26 | section0_emotion10 27 | emotion11 28 | section0_emotion11 29 | emotion12 30 | section0_emotion12 31 | emotion13 32 | section0_emotion13 33 | emotion14 34 | section0_emotion14 35 | 36 | 37 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/NSArray+MASShorthandAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+MASShorthandAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 22/07/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "NSArray+MASAdditions.h" 10 | 11 | #ifdef MAS_SHORTHAND 12 | 13 | /** 14 | * Shorthand array additions without the 'mas_' prefixes, 15 | * only enabled if MAS_SHORTHAND is defined 16 | */ 17 | @interface NSArray (MASShorthandAdditions) 18 | 19 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; 20 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; 21 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; 22 | 23 | @end 24 | 25 | @implementation NSArray (MASShorthandAdditions) 26 | 27 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { 28 | return [self mas_makeConstraints:block]; 29 | } 30 | 31 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { 32 | return [self mas_updateConstraints:block]; 33 | } 34 | 35 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { 36 | return [self mas_remakeConstraints:block]; 37 | } 38 | 39 | @end 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Expression/MLTextAttachment.h: -------------------------------------------------------------------------------- 1 | // 2 | // MLTextAttachment.h 3 | // MLLabel 4 | // 5 | // Created by molon on 15/6/11. 6 | // Copyright (c) 2015年 molon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MLTextAttachment : NSTextAttachment 12 | 13 | @property (readonly, nonatomic, assign) CGFloat width; 14 | @property (readonly, nonatomic, assign) CGFloat height; 15 | 16 | /** 17 | * 优先级比上面的高,以lineHeight为根据来决定高度 18 | * 宽度根据imageAspectRatio来定 19 | */ 20 | @property (readonly, nonatomic, assign) CGFloat lineHeightMultiple; 21 | 22 | /** 23 | * image.size.width/image.size.height 24 | */ 25 | @property (readonly, nonatomic, assign) CGFloat imageAspectRatio; 26 | 27 | + (instancetype)textAttachmentWithWidth:(CGFloat)width height:(CGFloat)height imageBlock:(UIImage * (^)(CGRect imageBounds,NSTextContainer *textContainer,NSUInteger charIndex,MLTextAttachment *textAttachment))imageBlock; 28 | 29 | + (instancetype)textAttachmentWithLineHeightMultiple:(CGFloat)lineHeightMultiple imageBlock:(UIImage * (^)(CGRect imageBounds,NSTextContainer *textContainer,NSUInteger charIndex,MLTextAttachment *textAttachment))imageBlock 30 | imageAspectRatio:(CGFloat)imageAspectRatio; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/ToolBarPanel/OfficialAccountToolbar.m: -------------------------------------------------------------------------------- 1 | // 2 | // OfficialAccountToolbar.m 3 | // KeyboardForChat 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/4/1. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import "OfficialAccountToolbar.h" 14 | #import "ChatKeyBoardMacroDefine.h" 15 | 16 | @implementation OfficialAccountToolbar 17 | { 18 | UIButton *_switchBtn; 19 | } 20 | 21 | - (instancetype)initWithFrame:(CGRect)frame 22 | { 23 | self = [super initWithFrame:frame]; 24 | if (self) { 25 | self.backgroundColor = [UIColor blackColor]; 26 | _switchBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 27 | [_switchBtn setImage:[UIImage imageNamed:@"switchUp"] forState:UIControlStateNormal]; 28 | [_switchBtn addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventTouchUpInside]; 29 | _switchBtn.frame = CGRectMake(0, 0, 44, kChatToolBarHeight); 30 | [self addSubview:_switchBtn]; 31 | } 32 | return self; 33 | } 34 | 35 | - (void)switchAction:(UIButton *)btn 36 | { 37 | if (self.switchAction) { 38 | self.switchAction(); 39 | } 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Category/NSAttributedString+MLLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSAttributedString+MLLabel.m 3 | // Pods 4 | // 5 | // Created by molon on 15/6/13. 6 | // 7 | // 8 | 9 | #import "NSAttributedString+MLLabel.h" 10 | 11 | @implementation NSAttributedString (MLLabel) 12 | 13 | + (instancetype)attributedStringWithHTML:(NSString*)htmlString 14 | { 15 | NSData* htmlData = [htmlString dataUsingEncoding:NSUTF8StringEncoding]; 16 | if (htmlData) { 17 | __block id attributedString = nil; 18 | dispatch_block_t block = ^{ 19 | attributedString = [[self alloc] initWithData:htmlData 20 | options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 21 | NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} 22 | documentAttributes:nil 23 | error:NULL]; 24 | }; 25 | 26 | //这个解析必须在主线程执行,文档上要求的 27 | if ([NSThread isMainThread]) { 28 | block(); 29 | }else{ 30 | dispatch_sync(dispatch_get_main_queue(), block); 31 | } 32 | 33 | return attributedString; 34 | } 35 | 36 | return nil; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/MASViewAttribute.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASAttribute.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | 11 | @implementation MASViewAttribute 12 | 13 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { 14 | self = [self initWithView:view item:view layoutAttribute:layoutAttribute]; 15 | return self; 16 | } 17 | 18 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute { 19 | self = [super init]; 20 | if (!self) return nil; 21 | 22 | _view = view; 23 | _item = item; 24 | _layoutAttribute = layoutAttribute; 25 | 26 | return self; 27 | } 28 | 29 | - (BOOL)isSizeAttribute { 30 | return self.layoutAttribute == NSLayoutAttributeWidth 31 | || self.layoutAttribute == NSLayoutAttributeHeight; 32 | } 33 | 34 | - (BOOL)isEqual:(MASViewAttribute *)viewAttribute { 35 | if ([viewAttribute isKindOfClass:self.class]) { 36 | return self.view == viewAttribute.view 37 | && self.layoutAttribute == viewAttribute.layoutAttribute; 38 | } 39 | return [super isEqual:viewAttribute]; 40 | } 41 | 42 | - (NSUInteger)hash { 43 | return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /ZJFriendLineDemoUITests/ZJFriendLineDemoUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZJFriendLineDemoUITests.m 3 | // ZJFriendLineDemoUITests 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ZJFriendLineDemoUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation ZJFriendLineDemoUITests 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 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIDevice+ZJ.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIDevice+ZJ.h 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIDevice (ZJ) 12 | /** 13 | 获取当前Version号 14 | */ 15 | +(NSString *)currentVersion; 16 | 17 | /** 18 | 获取当前build号 19 | */ 20 | +(NSString *)currentBuild; 21 | 22 | /*! 23 | 系统版本 24 | */ 25 | +(CGFloat)systemVersion; 26 | 27 | //屏幕宽高 28 | 29 | #define kScreenHeight [[UIScreen mainScreen] bounds].size.height 30 | #define kScreenWidth [[UIScreen mainScreen] bounds].size.width 31 | 32 | #define ScreenWidth [[UIScreen mainScreen] bounds].size.width 33 | #define ScreenHeight [[UIScreen mainScreen] bounds].size.height 34 | 35 | //ios系统版本 36 | #define ios8x [[[UIDevice currentDevice] systemVersion] floatValue] >=8.0f 37 | #define ios7x ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) && ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0f) 38 | #define ios6x [[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f 39 | 40 | #define iphone4 ([UIScreen mainScreen].bounds.size.height==480.0f) 41 | 42 | #define iphone5 ([UIScreen mainScreen].bounds.size.height==568.0f) 43 | 44 | #define iphone6 ([UIScreen mainScreen].bounds.size.height==667.0f) 45 | 46 | #define iphone6Plus ([UIScreen mainScreen].bounds.size.height==736.0f || [UIScreen mainScreen].bounds.size.height==414.0f) 47 | @end 48 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/MASViewAttribute.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASAttribute.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * An immutable tuple which stores the view and the related NSLayoutAttribute. 13 | * Describes part of either the left or right hand side of a constraint equation 14 | */ 15 | @interface MASViewAttribute : NSObject 16 | 17 | /** 18 | * The view which the reciever relates to. Can be nil if item is not a view. 19 | */ 20 | @property (nonatomic, weak, readonly) MAS_VIEW *view; 21 | 22 | /** 23 | * The item which the reciever relates to. 24 | */ 25 | @property (nonatomic, weak, readonly) id item; 26 | 27 | /** 28 | * The attribute which the reciever relates to 29 | */ 30 | @property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; 31 | 32 | /** 33 | * Convenience initializer. 34 | */ 35 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; 36 | 37 | /** 38 | * The designated initializer. 39 | */ 40 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute; 41 | 42 | /** 43 | * Determine whether the layoutAttribute is a size attribute 44 | * 45 | * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight 46 | */ 47 | - (BOOL)isSizeAttribute; 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/ViewController+MASAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.m 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "ViewController+MASAdditions.h" 10 | 11 | #ifdef MAS_VIEW_CONTROLLER 12 | 13 | @implementation MAS_VIEW_CONTROLLER (MASAdditions) 14 | 15 | - (MASViewAttribute *)mas_topLayoutGuide { 16 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 17 | } 18 | - (MASViewAttribute *)mas_topLayoutGuideTop { 19 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 20 | } 21 | - (MASViewAttribute *)mas_topLayoutGuideBottom { 22 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 23 | } 24 | 25 | - (MASViewAttribute *)mas_bottomLayoutGuide { 26 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 27 | } 28 | - (MASViewAttribute *)mas_bottomLayoutGuideTop { 29 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 30 | } 31 | - (MASViewAttribute *)mas_bottomLayoutGuideBottom { 32 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 33 | } 34 | 35 | 36 | 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/MASViewConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | #import "MASConstraint.h" 11 | #import "MASLayoutConstraint.h" 12 | #import "MASUtilities.h" 13 | 14 | /** 15 | * A single constraint. 16 | * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view 17 | */ 18 | @interface MASViewConstraint : MASConstraint 19 | 20 | /** 21 | * First item/view and first attribute of the NSLayoutConstraint 22 | */ 23 | @property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; 24 | 25 | /** 26 | * Second item/view and second attribute of the NSLayoutConstraint 27 | */ 28 | @property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; 29 | 30 | /** 31 | * initialises the MASViewConstraint with the first part of the equation 32 | * 33 | * @param firstViewAttribute view.mas_left, view.mas_width etc. 34 | * 35 | * @return a new view constraint 36 | */ 37 | - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; 38 | 39 | /** 40 | * Returns all MASViewConstraints installed with this view as a first item. 41 | * 42 | * @param view A view to retrieve constraints for. 43 | * 44 | * @return An array of MASViewConstraints. 45 | */ 46 | + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/ZJDataSaver.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZJDataSaver.h 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ZJDataSaver : NSObject 12 | /** 13 | 将字符串存到自带plist文件中 14 | */ 15 | +(void)saveString:(NSString *)string forKey:(NSString *)key; 16 | 17 | /** 18 | 从plist文件中取出key所对应的值 19 | */ 20 | +(NSString*)getStringForKey:(NSString *)key; 21 | 22 | /** 23 | 从plist文件中删除键值 24 | */ 25 | +(void)removeStringForKey:(NSString *)key; 26 | 27 | /** 28 | 自定义单个对象存到本地 29 | */ 30 | +(void)saveCustomObject:(id)obj; 31 | 32 | /** 33 | 根据类名从本地取出自定义单个对象 34 | */ 35 | +(id)getCustomObjectWithClassName:(NSString *)name; 36 | 37 | /** 38 | 将字典、数组、字符串、数据 存到本地文件中 39 | */ 40 | +(void)saveCommonData:(id)obj withName:(NSString *)name; 41 | 42 | /** 43 | 将字典、数组、字符串、数据 从本地取出来 44 | */ 45 | +(id)getCommonDataWithFileName:(NSString *)name className:(Class)aclass; 46 | 47 | /** 48 | 根据文件名删除本地数据 49 | */ 50 | +(void)removeCommonDataWithName:(NSString *)name; 51 | 52 | /** 53 | 删除所有数据 54 | */ 55 | +(void)clearAllData; 56 | 57 | /** 58 | 获得文件总大小(kb) 59 | */ 60 | +(float)floderSize; 61 | 62 | /** 63 | 获取Documents文件夹目录 64 | */ 65 | +(NSString *)getDocumentsPath; 66 | 67 | /** 68 | 获取library文件夹目录 69 | */ 70 | +(NSString *)getLibraryPath; 71 | 72 | /** 73 | 获取cache文件夹目录 74 | */ 75 | +(NSString *)getCachePath; 76 | 77 | /** 78 | 获取temp文件夹目录 79 | */ 80 | +(NSString *)getTempPath; 81 | @end 82 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/HYBMasonryAutoCellHeight/UITableView+HYBCacheHeight.m: -------------------------------------------------------------------------------- 1 | // 2 | // UITableView+HYBCacheHeight.m 3 | // CellAutoHeightDemo 4 | // 5 | // Created by huangyibiao on 16/1/22. 6 | // Copyright © 2016年 huangyibiao. All rights reserved. 7 | // 8 | 9 | #import "UITableView+HYBCacheHeight.h" 10 | #import 11 | 12 | static const void *__hyb_tableview_cacheCellHeightKey = "__hyb_tableview_cacheCellHeightKey"; 13 | static const void *__hyb_tableview_reuse_cells_key = "__hyb_tableview_reuse_cells_key"; 14 | 15 | @implementation UITableView (HYBCacheHeight) 16 | 17 | - (NSMutableDictionary *)hyb_cacheCellHeightDict { 18 | NSMutableDictionary *dict = objc_getAssociatedObject(self, __hyb_tableview_cacheCellHeightKey); 19 | 20 | if (dict == nil) { 21 | dict = [[NSMutableDictionary alloc] init]; 22 | 23 | objc_setAssociatedObject(self, 24 | __hyb_tableview_cacheCellHeightKey, 25 | dict, 26 | OBJC_ASSOCIATION_RETAIN_NONATOMIC); 27 | } 28 | 29 | return dict; 30 | } 31 | 32 | - (NSMutableDictionary *)hyb_reuseCells { 33 | NSMutableDictionary *cells = objc_getAssociatedObject(self, __hyb_tableview_reuse_cells_key); 34 | 35 | if (cells == nil) { 36 | cells = [[NSMutableDictionary alloc] init]; 37 | 38 | objc_setAssociatedObject(self, 39 | __hyb_tableview_reuse_cells_key, 40 | cells, 41 | OBJC_ASSOCIATION_RETAIN); 42 | } 43 | 44 | return cells; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/ToolBarPanel/RFRecordButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // RFRecordButton.h 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/29. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import 14 | @class RFRecordButton; 15 | 16 | typedef void (^RecordTouchDown) (RFRecordButton *recordButton); 17 | typedef void (^RecordTouchUpOutside) (RFRecordButton *recordButton); 18 | typedef void (^RecordTouchUpInside) (RFRecordButton *recordButton); 19 | typedef void (^RecordTouchDragEnter) (RFRecordButton *recordButton); 20 | typedef void (^RecordTouchDragInside) (RFRecordButton *recordButton); 21 | typedef void (^RecordTouchDragOutside) (RFRecordButton *recordButton); 22 | typedef void (^RecordTouchDragExit) (RFRecordButton *recordButton); 23 | 24 | @interface RFRecordButton : UIButton 25 | 26 | @property (nonatomic, copy) RecordTouchDown recordTouchDownAction; 27 | @property (nonatomic, copy) RecordTouchUpOutside recordTouchUpOutsideAction; 28 | @property (nonatomic, copy) RecordTouchUpInside recordTouchUpInsideAction; 29 | @property (nonatomic, copy) RecordTouchDragEnter recordTouchDragEnterAction; 30 | @property (nonatomic, copy) RecordTouchDragInside recordTouchDragInsideAction; 31 | @property (nonatomic, copy) RecordTouchDragOutside recordTouchDragOutsideAction; 32 | @property (nonatomic, copy) RecordTouchDragExit recordTouchDragExitAction; 33 | 34 | - (void)setButtonStateWithRecording; 35 | - (void)setButtonStateWithNormal; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/UIScrollView+ZJRefresh.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+ZJRefresh.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/11. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "UIScrollView+ZJRefresh.h" 10 | #import "ZJRefreshHeaderView.h" 11 | #import 12 | @interface UIScrollView() 13 | @property (nonatomic,strong)ZJRefreshHeaderView *headerView; 14 | @end 15 | 16 | @implementation UIScrollView (ZJRefresh) 17 | 18 | static char ZJRefreshHeaderViewKey; 19 | 20 | - (void)setHeaderView:(ZJRefreshHeaderView *)headerView 21 | { 22 | [self willChangeValueForKey:@"ZJRefreshHeaderViewKey"]; 23 | objc_setAssociatedObject(self, &ZJRefreshHeaderViewKey, 24 | headerView, 25 | OBJC_ASSOCIATION_ASSIGN); 26 | [self didChangeValueForKey:@"ZJRefreshHeaderViewKey"]; 27 | } 28 | - (ZJRefreshHeaderView *)headerView { 29 | return objc_getAssociatedObject(self, &ZJRefreshHeaderViewKey); 30 | } 31 | -(void)addRefreshHeaderViewWithCallback:(void(^)())callback 32 | { 33 | 34 | if(!self.headerView) 35 | { 36 | ZJRefreshHeaderView *headerView = [[ZJRefreshHeaderView alloc] init]; 37 | headerView.callbackBlock = callback; 38 | 39 | [self addSubview:headerView]; 40 | [self bringSubviewToFront:headerView]; 41 | self.headerView = headerView; 42 | } 43 | } 44 | -(void)headerEndRefreshing 45 | { 46 | 47 | self.headerView.refreshState = ZJRefreshStateNormal; 48 | } 49 | -(void)beginHeaderRefresh; 50 | { 51 | self.headerView.refreshState = ZJRefreshStateRefreshing; 52 | } 53 | @end 54 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/ChatKeyBoardMacroDefine.h: -------------------------------------------------------------------------------- 1 | // 2 | // Macrol.h 3 | // FaceKeyboard 4 | // 5 | // Created by ruofei on 16/3/31. 6 | // Copyright © 2016年 ruofei. All rights reserved. 7 | // 8 | 9 | #ifndef ChatKeyBoardMacroDefine_h 10 | #define ChatKeyBoardMacroDefine_h 11 | 12 | //#define kScreenWidth [[UIScreen mainScreen] bounds].size.width 13 | //#define kScreenHeight [[UIScreen mainScreen] bounds].size.height 14 | 15 | /** 判断文字中是否包含表情 */ 16 | #define IsTextContainFace(text) [text containsString:@"["] && [text containsString:@"]"] && [[text substringFromIndex:text.length - 1] isEqualToString:@"]"] 17 | 18 | /** 判断emoji下标 */ 19 | #define emojiText(text) (text.length >= 2) ? [text substringFromIndex:text.length - 2] : [text substringFromIndex:0] 20 | 21 | //ChatKeyBoard背景颜色 22 | #define kChatKeyBoardColor [UIColor colorWithRed:245/255.f green:245/255.f blue:245/255.f alpha:1.0f] 23 | 24 | //键盘上面的工具条 25 | #define kChatToolBarHeight 49 26 | 27 | //表情模块高度 28 | #define kFacePanelHeight 216 29 | #define kFacePanelBottomToolBarHeight 40 30 | #define kUIPageControllerHeight 25 31 | 32 | //拍照、发视频等更多功能模块的面板的高度 33 | #define kMorePanelHeight 216 34 | #define kMoreItemH 80 35 | #define kMoreItemIconSize 60 36 | 37 | 38 | //整个聊天工具的高度 39 | #define kChatKeyBoardHeight kChatToolBarHeight + kFacePanelHeight 40 | 41 | #define isIPhone4_5 (kScreenWidth == 320) 42 | #define isIPhone6_6s (kScreenWidth == 375) 43 | #define isIPhone6p_6sp (kScreenWidth == 414) 44 | 45 | #endif /* ChatKeyBoardMacroDefine_h */ 46 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIImage+ZJ.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+ZJ.m 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import "UIImage+ZJ.h" 10 | 11 | @implementation UIImage (ZJ) 12 | 13 | +(UIImage *)resizeWithImageName:(NSString *)name leftCap:(CGFloat)leftCap topCap:(CGFloat)topCap 14 | { 15 | UIImage *image = [self imageNamed:name]; 16 | return [image stretchableImageWithLeftCapWidth:image.size.width * leftCap topCapHeight:image.size.height * topCap]; 17 | } 18 | +(UIImage *)resizeWithImageName:(NSString *)name 19 | { 20 | 21 | return [self resizeWithImageName:name leftCap:.5f topCap:.5f]; 22 | 23 | } 24 | +(UIImage *)cutFromView:(UIView *)view{ 25 | 26 | //开启图形上下文 27 | UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0f); 28 | 29 | //获取上下文 30 | CGContextRef context = UIGraphicsGetCurrentContext(); 31 | 32 | //在新建的图形上下文中渲染view的layer 33 | [view.layer renderInContext:context]; 34 | 35 | [[UIColor clearColor] setFill]; 36 | 37 | //获取图片 38 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 39 | 40 | //关闭图形上下文 41 | UIGraphicsEndImageContext(); 42 | 43 | return image; 44 | 45 | } 46 | -(UIImage *)cutWithFrame:(CGRect)frame{ 47 | 48 | //创建CGImage 49 | CGImageRef cgimage = CGImageCreateWithImageInRect(self.CGImage, frame); 50 | 51 | //创建image 52 | UIImage *newImage=[UIImage imageWithCGImage:cgimage]; 53 | 54 | //释放CGImage 55 | CGImageRelease(cgimage); 56 | 57 | return newImage; 58 | 59 | 60 | } 61 | @end 62 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/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 | 27 | 28 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/FriendHeaderView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FriendHeaderView.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "FriendHeaderView.h" 10 | 11 | @implementation FriendHeaderView 12 | - (instancetype)initWithFrame:(CGRect)frame 13 | { 14 | if (self = [super initWithFrame:frame]) { 15 | self.backgroundColor = [UIColor colorWithRed:50/255.0 green:50/255.0 blue:50/255.0 alpha:1]; 16 | UIImageView * backgroundImageView = [UIImageView new]; 17 | backgroundImageView.image = [UIImage imageNamed:@"pbg.jpg"]; 18 | [self addSubview:backgroundImageView]; 19 | backgroundImageView.frame = CGRectMake(0, 64, ScreenWidth, frame.size.height-64-20); 20 | 21 | UIView *whiteView = [[UIView alloc] initWithFrame:CGRectMake(0, frame.size.height-20, ScreenWidth, 20)]; 22 | whiteView.backgroundColor = [UIColor whiteColor]; 23 | [self addSubview:whiteView]; 24 | 25 | UIImageView * iconView = [UIImageView new]; 26 | iconView.frame = CGRectMake(ScreenWidth-100, frame.size.height-80, 80, 80); 27 | iconView.image = [UIImage imageNamed:@"icon1.jpg"]; 28 | iconView.layer.borderColor = [UIColor whiteColor].CGColor; 29 | iconView.layer.borderWidth = 2; 30 | [self addSubview:iconView]; 31 | 32 | UILabel * nameLabel = [UILabel new]; 33 | nameLabel.frame = CGRectMake(ScreenWidth-220, iconView.sd_y+20, 100, 30); 34 | nameLabel.text = @"Sky"; 35 | nameLabel.textColor = [UIColor whiteColor]; 36 | nameLabel.textAlignment = NSTextAlignmentRight; 37 | nameLabel.font = [UIFont boldSystemFontOfSize:15]; 38 | [self addSubview:nameLabel]; 39 | } 40 | return self; 41 | } 42 | @end 43 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/plist/systemEmoji.plist: -------------------------------------------------------------------------------- 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 | 😇 30 | 😇 31 | 😬 32 | 😬 33 | 😆 34 | 😆 35 | 😱 36 | 😱 37 | 🎅 38 | 🎅 39 | 😴 40 | 😴 41 | 😕 42 | 😕 43 | 😷 44 | 😷 45 | 😯 46 | 😯 47 | 😏 48 | 😏 49 | 😑 50 | 😑 51 | 💖 52 | 💖 53 | 💔 54 | 💔 55 | 🌙 56 | 🌙 57 | 🌟 58 | 🌟 59 | 🌞 60 | 🌞 61 | 🌈 62 | 🌈 63 | 😍 64 | 😍 65 | 😚 66 | 😚 67 | 💋 68 | 💋 69 | 🌹 70 | 🌹 71 | 🍂 72 | 🍂 73 | 👍 74 | 👍 75 | 76 | 77 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/UIColor+ZJ.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+ZJ.m 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import "UIColor+ZJ.h" 10 | 11 | @implementation UIColor (ZJ) 12 | + (UIColor *)colorWithHexColorString:(NSString *)hexColorString 13 | { 14 | NSString *cString = [[hexColorString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 15 | 16 | // String should be 6 or 8 characters 17 | if ([cString length] < 6) { 18 | return [UIColor clearColor]; 19 | } 20 | 21 | // strip 0X if it appears 22 | if ([cString hasPrefix:@"0X"]) 23 | cString = [cString substringFromIndex:2]; 24 | if ([cString hasPrefix:@"#"]) 25 | cString = [cString substringFromIndex:1]; 26 | if ([cString length] != 6) 27 | return [UIColor clearColor]; 28 | 29 | // Separate into r, g, b substrings 30 | NSRange range; 31 | range.location = 0; 32 | range.length = 2; 33 | 34 | //r 35 | NSString *rString = [cString substringWithRange:range]; 36 | 37 | //g 38 | range.location = 2; 39 | NSString *gString = [cString substringWithRange:range]; 40 | 41 | //b 42 | range.location = 4; 43 | NSString *bString = [cString substringWithRange:range]; 44 | 45 | // Scan values 46 | unsigned int r, g, b; 47 | [[NSScanner scannerWithString:rString] scanHexInt:&r]; 48 | [[NSScanner scannerWithString:gString] scanHexInt:&g]; 49 | [[NSScanner scannerWithString:bString] scanHexInt:&b]; 50 | 51 | return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f]; 52 | } 53 | 54 | +(UIColor*)ZJRandomColor 55 | { 56 | UIColor *color = [UIColor colorWithRed:arc4random_uniform(256)/255.0f green:arc4random_uniform(256)/255.0f blue:arc4random_uniform(256)/255.0f alpha:1.0f]; 57 | return color; 58 | } 59 | @end 60 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Masonry/MASConstraint+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASConstraint+Private.h 3 | // Masonry 4 | // 5 | // Created by Nick Tymchenko on 29/04/14. 6 | // Copyright (c) 2014 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | 11 | @protocol MASConstraintDelegate; 12 | 13 | 14 | @interface MASConstraint () 15 | 16 | /** 17 | * Whether or not to check for an existing constraint instead of adding constraint 18 | */ 19 | @property (nonatomic, assign) BOOL updateExisting; 20 | 21 | /** 22 | * Usually MASConstraintMaker but could be a parent MASConstraint 23 | */ 24 | @property (nonatomic, weak) id delegate; 25 | 26 | /** 27 | * Based on a provided value type, is equal to calling: 28 | * NSNumber - setOffset: 29 | * NSValue with CGPoint - setPointOffset: 30 | * NSValue with CGSize - setSizeOffset: 31 | * NSValue with MASEdgeInsets - setInsets: 32 | */ 33 | - (void)setLayoutConstantWithValue:(NSValue *)value; 34 | 35 | @end 36 | 37 | 38 | @interface MASConstraint (Abstract) 39 | 40 | /** 41 | * Sets the constraint relation to given NSLayoutRelation 42 | * returns a block which accepts one of the following: 43 | * MASViewAttribute, UIView, NSValue, NSArray 44 | * see readme for more details. 45 | */ 46 | - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation; 47 | 48 | /** 49 | * Override to set a custom chaining behaviour 50 | */ 51 | - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; 52 | 53 | @end 54 | 55 | 56 | @protocol MASConstraintDelegate 57 | 58 | /** 59 | * Notifies the delegate when the constraint needs to be replaced with another constraint. For example 60 | * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks 61 | */ 62 | - (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint; 63 | 64 | - (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/ContainView.m: -------------------------------------------------------------------------------- 1 | // 2 | // ContainView.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/5/4. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "ContainView.h" 10 | @interface ContainView() 11 | @property (nonatomic,strong)NSMutableArray *cusImageViewArray; 12 | @property (nonatomic,strong)UIImageView *imageView; 13 | @end 14 | @implementation ContainView 15 | 16 | -(id)init 17 | { 18 | self = [super init]; 19 | if(self) 20 | { 21 | 22 | } 23 | return self; 24 | } 25 | -(void)setModel:(FriendLineCellModel *)model 26 | { 27 | _model = model; 28 | self.cusImageViewArray = [NSMutableArray array]; 29 | [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 30 | if(model.picNameArray.count > 0) 31 | { 32 | float heightAndWidth = (ScreenWidth - 80 - 10)/3; 33 | [model.picNameArray enumerateObjectsUsingBlock:^(NSString * imageName, NSUInteger idx, BOOL * _Nonnull stop) { 34 | 35 | UIImageView *imageView = [[UIImageView alloc] init]; 36 | imageView.userInteractionEnabled = YES; 37 | imageView.frame = CGRectMake((idx%3) * (heightAndWidth+5), (idx/3)* (heightAndWidth+5), heightAndWidth, heightAndWidth); 38 | imageView.image = [UIImage imageNamed:imageName]; 39 | imageView.clipsToBounds = YES; 40 | imageView.contentMode = UIViewContentModeScaleAspectFill; 41 | [self addSubview:imageView]; 42 | [self.cusImageViewArray addObject:imageView]; 43 | UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; 44 | [imageView addGestureRecognizer:tap]; 45 | }]; 46 | } 47 | 48 | } 49 | -(void)tap:(UITapGestureRecognizer *)tap 50 | { 51 | UIImageView *view = (UIImageView *)tap.view; 52 | if([_delegate respondsToSelector:@selector(didClickImageViewWithCurrentImageView:imageViewArray:imageSuperView:)]) 53 | { 54 | [_delegate didClickImageViewWithCurrentImageView:view imageViewArray:self.cusImageViewArray imageSuperView:self]; 55 | } 56 | } 57 | @end 58 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/4/7. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "BaseNavifationController.h" 11 | #import "FriendLineController.h" 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/MyLinkLabel/Category/NSString+MLLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+MLLabel.m 3 | // Pods 4 | // 5 | // Created by molon on 15/6/13. 6 | // 7 | // 8 | 9 | #import "NSString+MLLabel.h" 10 | 11 | @implementation NSString (MLLabel) 12 | 13 | - (NSUInteger)lineCount 14 | { 15 | if (self.length<=0) { return 0; } 16 | 17 | NSUInteger numberOfLines, index, stringLength = [self length]; 18 | for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) { 19 | index = NSMaxRange([self lineRangeForRange:NSMakeRange(index, 0)]); 20 | } 21 | 22 | if ([self isNewlineCharacterAtEnd]) { 23 | return numberOfLines+1; 24 | } 25 | 26 | return numberOfLines; 27 | } 28 | 29 | - (BOOL)isNewlineCharacterAtEnd 30 | { 31 | if (self.length<=0) { 32 | return NO; 33 | } 34 | //检查最后是否有一个换行符 35 | NSCharacterSet *separator = [NSCharacterSet newlineCharacterSet]; 36 | NSRange lastRange = [self rangeOfCharacterFromSet:separator options:NSBackwardsSearch]; 37 | return (NSMaxRange(lastRange) == self.length); 38 | } 39 | 40 | - (NSString*)subStringToLineIndex:(NSUInteger)lineIndex 41 | { 42 | NSUInteger index = [self lengthToLineIndex:lineIndex]; 43 | 44 | return [self substringToIndex:index]; 45 | } 46 | 47 | - (NSUInteger)lengthToLineIndex:(NSUInteger)lineIndex 48 | { 49 | if (self.length<=0) { 50 | return 0; 51 | } 52 | 53 | NSUInteger numberOfLines, index, stringLength = [self length]; 54 | for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) { 55 | NSRange lineRange = [self lineRangeForRange:NSMakeRange(index, 0)]; 56 | index = NSMaxRange(lineRange); 57 | 58 | if (numberOfLines==lineIndex) { 59 | NSString *lineString = [self substringWithRange:lineRange]; 60 | if (![lineString isNewlineCharacterAtEnd]) { 61 | return index; 62 | } 63 | //把这行对应的换行符给忽略 64 | if (NSMaxRange([lineString rangeOfString:@"\r\n"])==lineString.length) { 65 | return index-2; 66 | } 67 | 68 | return index - 1; 69 | } 70 | } 71 | 72 | return 0; 73 | } 74 | 75 | 76 | @end 77 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/KeyBoard/Views/FacePanel/FaceSourceManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // FaceSourceManager.m 3 | // FaceKeyboard 4 | 5 | // Company: SunEee 6 | // Blog: devcai.com 7 | // Communicate: 2581502433@qq.com 8 | 9 | // Created by ruofei on 16/3/30. 10 | // Copyright © 2016年 ruofei. All rights reserved. 11 | // 12 | 13 | #import "FaceSourceManager.h" 14 | 15 | @implementation FaceSourceManager 16 | 17 | //从持久化存储里面加载表情源 18 | + (NSArray *)loadFaceSource 19 | { 20 | NSMutableArray *subjectArray = [NSMutableArray array]; 21 | 22 | NSArray *sources = @[@"face", @"systemEmoji",@"emotion",@"systemEmoji",@"face",@"systemEmoji",@"emotion",@"emotion",@"face",@"face",@"emotion",@"face", @"emotion",@"face", @"emotion"]; 23 | 24 | for (int i = 0; i < sources.count; ++i) 25 | { 26 | NSString *plistName = sources[i]; 27 | 28 | NSString *plistPath = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; 29 | NSDictionary *faceDic = [NSDictionary dictionaryWithContentsOfFile:plistPath]; 30 | NSArray *allkeys = faceDic.allKeys; 31 | 32 | FaceThemeModel *themeM = [[FaceThemeModel alloc] init]; 33 | 34 | if ([plistName isEqualToString:@"face"]) { 35 | themeM.themeStyle = FaceThemeStyleCustomEmoji; 36 | themeM.themeDecribe = [NSString stringWithFormat:@"f%d", i]; 37 | themeM.themeIcon = @"section0_emotion0"; 38 | }else if ([plistName isEqualToString:@"systemEmoji"]){ 39 | themeM.themeStyle = FaceThemeStyleSystemEmoji; 40 | themeM.themeDecribe = @"sEmoji"; 41 | themeM.themeIcon = @""; 42 | } 43 | else { 44 | themeM.themeStyle = FaceThemeStyleGif; 45 | themeM.themeDecribe = [NSString stringWithFormat:@"e%d", i]; 46 | themeM.themeIcon = @"f_static_000"; 47 | } 48 | 49 | 50 | NSMutableArray *modelsArr = [NSMutableArray array]; 51 | 52 | for (int i = 0; i < allkeys.count; ++i) { 53 | NSString *name = allkeys[i]; 54 | FaceModel *fm = [[FaceModel alloc] init]; 55 | fm.faceTitle = name; 56 | fm.faceIcon = [faceDic objectForKey:name]; 57 | [modelsArr addObject:fm]; 58 | } 59 | themeM.faceModels = modelsArr; 60 | 61 | [subjectArray addObject:themeM]; 62 | } 63 | 64 | 65 | return subjectArray; 66 | } 67 | 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/view/CommentCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // CommentCell.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/20. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "CommentCell.h" 10 | #import "UITableViewCell+HYBMasonryAutoCellHeight.h" 11 | #import "CommentModel.h" 12 | #import "MLLinkLabel.h" 13 | @interface CommentCell () 14 | @property (nonatomic, strong) MLLinkLabel *contentLabel; 15 | @end 16 | @implementation CommentCell 17 | 18 | - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 19 | if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) 20 | { 21 | self.contentLabel = [[MLLinkLabel alloc] init]; 22 | self.contentLabel.delegate = self; 23 | self.contentLabel.linkTextAttributes = @{NSForegroundColorAttributeName : [UIColor colorWithRed:92/255.0 green:140/255.0 blue:255/255.0 alpha:1.0]}; 24 | self.contentLabel.activeLinkTextAttributes = @{NSForegroundColorAttributeName : [UIColor redColor]}; 25 | [self.contentView addSubview:self.contentLabel]; 26 | 27 | 28 | self.contentLabel.numberOfLines = 0; 29 | self.contentLabel.font = [UIFont systemFontOfSize:14.0]; 30 | 31 | 32 | self.contentLabel.preferredMaxLayoutWidth = ScreenWidth-80;; 33 | [self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) { 34 | make.left.right.mas_equalTo(self.contentView); 35 | make.top.mas_equalTo(self.contentView).offset(0); 36 | }]; 37 | 38 | 39 | self.hyb_lastViewInCell = self.contentLabel; 40 | self.hyb_bottomOffsetToCell = 5.0; 41 | } 42 | return self; 43 | } 44 | - (void)configCellWithModel:(CommentModel *)model 45 | { 46 | NSString *string =[NSString stringWithFormat:@"%@:%@",model.userName,model.content]; 47 | if(model.replyUserName.length != 0) 48 | { 49 | string =[NSString stringWithFormat:@"%@回复%@:%@",model.userName,model.replyUserName ,model.content]; 50 | } 51 | NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:string]; 52 | [text setAttributes:@{NSLinkAttributeName : model.userName} range:[string rangeOfString:model.userName]]; 53 | if(model.replyUserName.length != 0) 54 | { 55 | [text setAttributes:@{NSLinkAttributeName : model.replyUserName} range:[string rangeOfString:model.replyUserName]]; 56 | } 57 | self.contentLabel.attributedText = text; 58 | } 59 | - (void)didClickLink:(MLLink*)link linkText:(NSString*)linkText linkLabel:(MLLinkLabel*)linkLabel 60 | { 61 | NSLog(@"点击了:%@",link.linkValue); 62 | } 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/Expand/Categories/NSString+ZJ.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+ZJ.m 3 | // MyCategories 4 | // 5 | // Created by ZJ on 15/11/11. 6 | // Copyright © 2015年 WXDL. All rights reserved. 7 | // 8 | 9 | #import "NSString+ZJ.h" 10 | 11 | @implementation NSString (ZJ) 12 | -(BOOL)isEmptyString 13 | { 14 | if (self == nil || self == NULL) 15 | return YES; 16 | if (self.length==0) 17 | return YES; 18 | if ([self isEqualToString:@""]) 19 | return YES; 20 | if ([self isKindOfClass:[NSNull class]]) 21 | return YES; 22 | if ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]==0) 23 | return YES; 24 | if ([self isEqualToString:@"(null)"]) 25 | return YES; 26 | if ([self isEqualToString:@""]) 27 | return YES; 28 | return NO; 29 | } 30 | -(BOOL)isValidatePhoneNumber 31 | { 32 | NSString * phoneRegex = @"^1(3[0-9]|5[0-35-9]|8[025-9]|7[0-9])\\d{8}$"; 33 | NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex]; 34 | return [phoneTest evaluateWithObject:self]; 35 | } 36 | -(BOOL)isValidateEmail 37 | { 38 | NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 39 | NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 40 | return [emailTest evaluateWithObject:self]; 41 | } 42 | -(BOOL)isOnlyNumberString 43 | { 44 | NSCharacterSet *disallowedCharacters = [[NSCharacterSet 45 | characterSetWithCharactersInString:@"0123456789."] invertedSet]; 46 | NSRange foundRange = [self rangeOfCharacterFromSet:disallowedCharacters]; 47 | if (foundRange.location != NSNotFound) 48 | { 49 | //不是纯数字 50 | return NO; 51 | } 52 | else 53 | { 54 | //是纯数字 55 | return YES; 56 | } 57 | } 58 | -(BOOL)isOnlyCharcterString 59 | { 60 | NSString* number=@"^[A-Za-z]+$"; 61 | NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number]; 62 | return [numberPre evaluateWithObject:self]; 63 | } 64 | +(NSString *)getCurrentTime 65 | { 66 | NSDate *date = [NSDate date]; 67 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 68 | [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 69 | NSString *dateStr = [formatter stringFromDate:date]; 70 | return dateStr; 71 | } 72 | /** 73 | 根据文字多少计算高度 74 | */ 75 | + (float)stringHeightWithString:(NSString *)string size:(CGFloat)fontSize maxWidth:(CGFloat)maxWidth 76 | { 77 | NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:[UIFont systemFontOfSize:fontSize],NSFontAttributeName, nil]; 78 | 79 | float height = [string boundingRectWithSize:CGSizeMake(maxWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dic context:nil].size.height; 80 | return ceilf(height); 81 | } 82 | @end 83 | -------------------------------------------------------------------------------- /ZJFriendLineDemo/other/DataSourceManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // DataSourceManager.m 3 | // ZJFriendLineDemo 4 | // 5 | // Created by ZJ on 16/6/23. 6 | // Copyright © 2016年 ZJ. All rights reserved. 7 | // 8 | 9 | #import "DataSourceManager.h" 10 | #import "FriendLineCellModel.h" 11 | #import "CommentModel.h" 12 | @implementation DataSourceManager 13 | +(NSMutableArray *)loadDataArray 14 | { 15 | NSMutableArray *dataArray = [NSMutableArray array]; 16 | 17 | NSArray *nameArray = @[@"伤心天涯人",@"寂寞高手",@"怎么忍心怪你犯了错",@"布吉"]; 18 | NSArray *msgStringArray = @[@"这是个测试数据", 19 | @"这是个测试数据,这是个测试数据,这是个测试数据,这是个测试数据,", 20 | @"这是个测试数据,这是个测试数据,这是个测试数据,这是个测试数据,这是试数据,这是个测试数据,这是个测试数据,这是个测试数据这是个测试数据,这是个测试数据,这是个测试数据", 21 | @"这是个测试数据,这是个测试数据,这是个测试数据,这是个测试数据,这是试数据,这是个测试数据,这是个测试数据,这是个测试数据这是个测试数据,这是个测试数据,这是个测试数据这是个测试数据,这是个测试数据,这是个测试数据,这是个测试数据,这是试数据,这是个测试数据,这是个测试数据,这是个测试数据这是个测试数据,这是个测试数据,这是个测试数据这是个测试数据,这是个测试数据,这是个测试数据这是个测试数据,这是个测试数据,这是个测试数据"]; 22 | NSArray *headImgNameArray = @[@"icon1",@"icon2",@"icon3",@"icon4"]; 23 | NSArray *picImageNamesArray = @[ @"pic00.jpg", 24 | @"pic01.jpg", 25 | @"pic02.jpg", 26 | @"pic03.jpg", 27 | @"pic04.jpg", 28 | @"pic05.jpg" 29 | ]; 30 | for(int i = 0;i < 10 ;i++) 31 | { 32 | FriendLineCellModel *model = [[FriendLineCellModel alloc] init]; 33 | int randomIndex = arc4random_uniform(4);// 生成 0-3随机数 34 | int picCount = arc4random_uniform(7); 35 | model.usernName = nameArray[randomIndex]; 36 | model.headImgName = headImgNameArray[randomIndex]; 37 | model.msgContent = msgStringArray[randomIndex]; 38 | 39 | NSMutableArray *picTemArray = [NSMutableArray array]; 40 | NSMutableArray *commentArray = @[].mutableCopy; 41 | for(int i = 0;i < picCount ;i++) 42 | { 43 | int picIndex = arc4random_uniform(6); 44 | [picTemArray addObject:picImageNamesArray[picIndex]]; 45 | } 46 | if(picTemArray.count != 0) 47 | { 48 | //图片的数组 49 | model.picNameArray = [NSArray arrayWithArray:picTemArray]; 50 | } 51 | for(int i=0;i<3;i++) 52 | { 53 | CommentModel *comment = [[CommentModel alloc] init]; 54 | comment.userName = nameArray[i]; 55 | comment.content = msgStringArray[i]; 56 | if(i==1) 57 | { 58 | comment.replyUserName = nameArray[3]; 59 | } 60 | [commentArray addObject:comment]; 61 | } 62 | //赞的数组 63 | model.likeNameArray = @[@"怎么忍心怪你犯了错",@"伤心天涯人"]; 64 | //评论的数组 65 | model.commentArray = [NSArray arrayWithArray:commentArray]; 66 | [dataArray addObject:model]; 67 | } 68 | return dataArray; 69 | } 70 | @end 71 | --------------------------------------------------------------------------------