├── 编辑.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 | 
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 |
--------------------------------------------------------------------------------