├── .gitignore
├── KeyBoard
├── KeyBoard.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── KeyBoard
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ └── img_defaulthead_nor.imageset
│ │ ├── Contents.json
│ │ ├── img_defaulthead_nor.png
│ │ ├── img_defaulthead_nor@2x.png
│ │ └── img_defaulthead_nor@3x.png
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── KeyBoard
│ ├── Class
│ │ ├── CollectionViewFlowLayout.h
│ │ ├── CollectionViewFlowLayout.m
│ │ ├── EmojiButtonView.h
│ │ ├── EmojiButtonView.m
│ │ ├── EmojiCollectionViewCell.h
│ │ ├── EmojiCollectionViewCell.m
│ │ ├── EmotionImages.h
│ │ ├── EmotionImages.m
│ │ ├── IMEmotionEntity.h
│ │ ├── IMEmotionEntity.m
│ │ ├── InputToolbar.h
│ │ ├── InputToolbar.m
│ │ ├── MoreButtonView.h
│ │ ├── MoreButtonView.m
│ │ ├── UITextView+Category.h
│ │ ├── UITextView+Category.m
│ │ ├── UIView+Extension.h
│ │ ├── UIView+Extension.m
│ │ ├── VoiceButtonView.h
│ │ └── VoiceButtonView.m
│ └── KerboardResource
│ │ ├── Emoji.plist
│ │ ├── emotion
│ │ ├── DeleteEmoticonBtn@2x.png
│ │ ├── DeleteEmoticonBtnHL@2x.png
│ │ ├── Expression_100@2x.png
│ │ ├── Expression_101@2x.png
│ │ ├── Expression_102@2x.png
│ │ ├── Expression_103@2x.png
│ │ ├── Expression_104@2x.png
│ │ ├── Expression_105@2x.png
│ │ ├── Expression_10@2x.png
│ │ ├── Expression_11@2x.png
│ │ ├── Expression_12@2x.png
│ │ ├── Expression_13@2x.png
│ │ ├── Expression_14@2x.png
│ │ ├── Expression_15@2x.png
│ │ ├── Expression_16@2x.png
│ │ ├── Expression_17@2x.png
│ │ ├── Expression_18@2x.png
│ │ ├── Expression_19@2x.png
│ │ ├── Expression_1@2x.png
│ │ ├── Expression_20@2x.png
│ │ ├── Expression_21@2x.png
│ │ ├── Expression_22@2x.png
│ │ ├── Expression_23@2x.png
│ │ ├── Expression_24@2x.png
│ │ ├── Expression_25@2x.png
│ │ ├── Expression_26@2x.png
│ │ ├── Expression_27@2x.png
│ │ ├── Expression_28@2x.png
│ │ ├── Expression_29@2x.png
│ │ ├── Expression_2@2x.png
│ │ ├── Expression_30@2x.png
│ │ ├── Expression_31@2x.png
│ │ ├── Expression_32@2x.png
│ │ ├── Expression_33@2x.png
│ │ ├── Expression_34@2x.png
│ │ ├── Expression_35@2x.png
│ │ ├── Expression_36@2x.png
│ │ ├── Expression_37@2x.png
│ │ ├── Expression_38@2x.png
│ │ ├── Expression_39@2x.png
│ │ ├── Expression_3@2x.png
│ │ ├── Expression_40@2x.png
│ │ ├── Expression_41@2x.png
│ │ ├── Expression_42@2x.png
│ │ ├── Expression_43@2x.png
│ │ ├── Expression_44@2x.png
│ │ ├── Expression_45@2x.png
│ │ ├── Expression_46@2x.png
│ │ ├── Expression_47@2x.png
│ │ ├── Expression_48@2x.png
│ │ ├── Expression_49@2x.png
│ │ ├── Expression_4@2x.png
│ │ ├── Expression_50@2x.png
│ │ ├── Expression_51@2x.png
│ │ ├── Expression_52@2x.png
│ │ ├── Expression_53@2x.png
│ │ ├── Expression_54@2x.png
│ │ ├── Expression_55@2x.png
│ │ ├── Expression_56@2x.png
│ │ ├── Expression_57@2x.png
│ │ ├── Expression_58@2x.png
│ │ ├── Expression_59@2x.png
│ │ ├── Expression_5@2x.png
│ │ ├── Expression_60@2x.png
│ │ ├── Expression_61@2x.png
│ │ ├── Expression_62@2x.png
│ │ ├── Expression_63@2x.png
│ │ ├── Expression_64@2x.png
│ │ ├── Expression_65@2x.png
│ │ ├── Expression_66@2x.png
│ │ ├── Expression_67@2x.png
│ │ ├── Expression_68@2x.png
│ │ ├── Expression_69@2x.png
│ │ ├── Expression_6@2x.png
│ │ ├── Expression_70@2x.png
│ │ ├── Expression_71@2x.png
│ │ ├── Expression_72@2x.png
│ │ ├── Expression_73@2x.png
│ │ ├── Expression_74@2x.png
│ │ ├── Expression_75@2x.png
│ │ ├── Expression_76@2x.png
│ │ ├── Expression_77@2x.png
│ │ ├── Expression_78@2x.png
│ │ ├── Expression_79@2x.png
│ │ ├── Expression_7@2x.png
│ │ ├── Expression_80@2x.png
│ │ ├── Expression_81@2x.png
│ │ ├── Expression_82@2x.png
│ │ ├── Expression_83@2x.png
│ │ ├── Expression_84@2x.png
│ │ ├── Expression_85@2x.png
│ │ ├── Expression_86@2x.png
│ │ ├── Expression_87@2x.png
│ │ ├── Expression_88@2x.png
│ │ ├── Expression_89@2x.png
│ │ ├── Expression_8@2x.png
│ │ ├── Expression_90@2x.png
│ │ ├── Expression_91@2x.png
│ │ ├── Expression_92@2x.png
│ │ ├── Expression_93@2x.png
│ │ ├── Expression_94@2x.png
│ │ ├── Expression_95@2x.png
│ │ ├── Expression_96@2x.png
│ │ ├── Expression_97@2x.png
│ │ ├── Expression_98@2x.png
│ │ ├── Expression_99@2x.png
│ │ ├── Expression_9@2x.png
│ │ └── emotion_icons.plist
│ │ ├── img_defaulthead_nor.png
│ │ ├── img_defaulthead_nor@2x.png
│ │ ├── img_defaulthead_nor@3x.png
│ │ ├── liaotian_ic_biaoqing_nor.png
│ │ ├── liaotian_ic_biaoqing_nor@2x.png
│ │ ├── liaotian_ic_biaoqing_nor@3x.png
│ │ ├── liaotian_ic_biaoqing_press.png
│ │ ├── liaotian_ic_biaoqing_press@2x.png
│ │ ├── liaotian_ic_biaoqing_press@3x.png
│ │ ├── liaotian_ic_gengduo_nor.png
│ │ ├── liaotian_ic_gengduo_nor@2x.png
│ │ ├── liaotian_ic_gengduo_nor@3x.png
│ │ ├── liaotian_ic_gengduo_press.png
│ │ ├── liaotian_ic_gengduo_press@2x.png
│ │ ├── liaotian_ic_gengduo_press@3x.png
│ │ ├── liaotian_ic_jianpan_nor.png
│ │ ├── liaotian_ic_jianpan_nor@2x.png
│ │ ├── liaotian_ic_jianpan_nor@3x.png
│ │ ├── liaotian_ic_jianpan_press.png
│ │ ├── liaotian_ic_jianpan_press@2x.png
│ │ ├── liaotian_ic_jianpan_press@3x.png
│ │ ├── liaotian_ic_press.png
│ │ ├── liaotian_ic_press@2x.png
│ │ ├── liaotian_ic_press@3x.png
│ │ ├── liaotian_ic_yuyin_nor.png
│ │ ├── liaotian_ic_yuyin_nor@2x.png
│ │ ├── liaotian_ic_yuyin_nor@3x.png
│ │ └── mianView.png
│ ├── PushViewController.h
│ ├── PushViewController.m
│ ├── ViewController.h
│ ├── ViewController.m
│ └── main.m
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xcuserstate
23 |
24 | ## Obj-C/Swift specific
25 | *.hmap
26 | *.ipa
27 | *.dSYM.zip
28 | *.dSYM
29 |
30 | # CocoaPods
31 | #
32 | # We recommend against adding the Pods directory to your .gitignore. However
33 | # you should judge for yourself, the pros and cons are mentioned at:
34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
35 | #
36 | # Pods/
37 |
38 | # Carthage
39 | #
40 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
41 | # Carthage/Checkouts
42 |
43 | Carthage/Build
44 |
45 | # fastlane
46 | #
47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
48 | # screenshots whenever they are needed.
49 | # For more information about the recommended setup visit:
50 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
51 |
52 | fastlane/report.xml
53 | fastlane/screenshots
54 |
55 | #Code Injection
56 | #
57 | # After new code Injection tools there's a generated folder /iOSInjectionProject
58 | # https://github.com/johnno1962/injectionforxcode
59 |
60 | iOSInjectionProject/
61 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/17.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 | @end
16 |
17 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/17.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @interface AppDelegate ()
12 |
13 | @end
14 |
15 | @implementation AppDelegate
16 |
17 |
18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
19 | // Override point for customization after application launch.
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 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Assets.xcassets/img_defaulthead_nor.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "img_defaulthead_nor.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "img_defaulthead_nor@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "img_defaulthead_nor@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Assets.xcassets/img_defaulthead_nor.imageset/img_defaulthead_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/Assets.xcassets/img_defaulthead_nor.imageset/img_defaulthead_nor.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Assets.xcassets/img_defaulthead_nor.imageset/img_defaulthead_nor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/Assets.xcassets/img_defaulthead_nor.imageset/img_defaulthead_nor@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Assets.xcassets/img_defaulthead_nor.imageset/img_defaulthead_nor@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/Assets.xcassets/img_defaulthead_nor.imageset/img_defaulthead_nor@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/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 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
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 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSCameraUsageDescription
6 | YES
7 | LSApplicationCategoryType
8 |
9 | NSPhotoLibraryUsageDescription
10 | YES
11 | CFBundleDevelopmentRegion
12 | en
13 | CFBundleExecutable
14 | $(EXECUTABLE_NAME)
15 | CFBundleIdentifier
16 | $(PRODUCT_BUNDLE_IDENTIFIER)
17 | CFBundleInfoDictionaryVersion
18 | 6.0
19 | CFBundleName
20 | $(PRODUCT_NAME)
21 | CFBundlePackageType
22 | APPL
23 | CFBundleShortVersionString
24 | 1.0
25 | CFBundleSignature
26 | ????
27 | CFBundleVersion
28 | 1
29 | LSRequiresIPhoneOS
30 |
31 | UILaunchStoryboardName
32 | LaunchScreen
33 | UIMainStoryboardFile
34 | Main
35 | UIRequiredDeviceCapabilities
36 |
37 | armv7
38 |
39 | UISupportedInterfaceOrientations
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationLandscapeLeft
43 | UIInterfaceOrientationLandscapeRight
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/CollectionViewFlowLayout.h:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionViewFlowLayout.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/19.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface CollectionViewFlowLayout : UICollectionViewFlowLayout
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/CollectionViewFlowLayout.m:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionViewFlowLayout.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/19.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import "CollectionViewFlowLayout.h"
10 |
11 | @implementation CollectionViewFlowLayout
12 |
13 | - (void)prepareLayout {
14 |
15 | [super prepareLayout];
16 | CGFloat W = (self.collectionView.bounds.size.width) / 7;
17 | CGFloat H = (self.collectionView.bounds.size.height) / 3;
18 |
19 | self.itemSize = CGSizeMake(W, H);
20 | self.minimumLineSpacing = 0;
21 | self.minimumInteritemSpacing = 0;
22 | self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
23 |
24 | self.collectionView.pagingEnabled = YES;
25 | self.collectionView.bounces = YES;
26 | self.collectionView.showsHorizontalScrollIndicator = NO;
27 |
28 | CGFloat Y = (self.collectionView.bounds.size.height - 3 * H);
29 | self.collectionView.contentInset = UIEdgeInsetsMake(Y, 0, 0, 0);
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/EmojiButtonView.h:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiButtonView.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "EmojiCollectionViewCell.h"
11 | @class EmojiButtonView;
12 | @protocol EmojiButtonViewDelegate
13 | - (void)emojiButtonView:(EmojiButtonView *)emojiButtonView emojiText:(NSObject *)text;
14 | - (void)emojiButtonView:(EmojiButtonView *)emojiButtonView sendButtonClick:(UIButton *)sender;
15 | @end
16 |
17 | @interface EmojiButtonView : UIView
18 | @property(nonatomic,weak) iddelegate;
19 | @end
20 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/EmojiButtonView.m:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiButtonView.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 | #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
9 | #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
10 | #define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);
11 |
12 | #import "EmojiButtonView.h"
13 | #import "CollectionViewFlowLayout.h"
14 | #import "EmojiCollectionViewCell.h"
15 | #import "UIView+Extension.h"
16 | #import "EmotionImages.h"
17 |
18 | @interface EmojiButtonView ()
19 | @property (nonatomic,strong)UIView *emojiFooterView;
20 | @property (nonatomic,strong)UIScrollView *emojiFooterScrollView;
21 | @property (nonatomic,strong)UIPageControl *pageControl;
22 | @property (nonatomic,strong)UICollectionView *collectionView;
23 | @property (nonatomic,strong)UIButton *sendButton;
24 | @property (nonatomic,strong)UIButton *emojiButotn;
25 | @property (nonatomic,strong)UIButton *emojiImageButotn;
26 | @property (nonatomic,strong)CollectionViewFlowLayout *layout;
27 | @property (nonatomic,strong)NSMutableArray *defaultEmoticons;
28 | @property (nonatomic,strong)NSArray *emoticonImages;
29 | @property (nonatomic,strong)NSArray *emoticonImagesString;
30 | @end
31 |
32 | @implementation EmojiButtonView
33 |
34 | - (instancetype)initWithFrame:(CGRect)frame
35 | {
36 | if (self = [super initWithFrame:frame]) {
37 |
38 | _defaultEmoticons = [NSMutableArray array];
39 | _emoticonImages = [NSMutableArray array];
40 | [[EmotionImages shareEmotinImages] initEmotionImages];
41 | _emoticonImages = [EmotionImages shareEmotinImages].images;
42 | _emoticonImagesString = [NSMutableArray array];
43 |
44 | for (int i=0x1F600; i<=0x1F64F; i++) {
45 | if (i < 0x1F641 || i > 0x1F640) {
46 | int sym = EMOJI_CODE_TO_SYMBOL(i);
47 | NSString *emoT = [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
48 | [_defaultEmoticons addObject:emoT];
49 | }
50 | }
51 |
52 | _emoticonImagesString = [_defaultEmoticons arrayByAddingObjectsFromArray:[EmotionImages shareEmotinImages].emotions];
53 | [_defaultEmoticons addObjectsFromArray:[EmotionImages shareEmotinImages].images];
54 |
55 | for (NSInteger i = 0;i < _defaultEmoticons.count;i ++) {
56 | if (i == 20 || i == 41 || i == 62 || i == 83 || i == 104 || i == 125 || i == 146 || i == 167) {
57 | [_defaultEmoticons insertObject:deleteButtonId atIndex:i];
58 | }
59 | }
60 | if (self.defaultEmoticons.count % 21 != 0) {
61 | for (NSInteger i = self.defaultEmoticons.count; i < self.defaultEmoticons.count + 21; i ++) {
62 | [self.defaultEmoticons addObject:@""];
63 | if (self.defaultEmoticons.count % 21 == 0) {
64 | break;
65 | }
66 | }
67 | }
68 | [self.defaultEmoticons replaceObjectAtIndex:self.defaultEmoticons.count - 1 withObject:deleteButtonId];
69 | self.backgroundColor = [UIColor colorWithRed:243 / 255.0 green:243 / 255.0 blue:243 / 255.0 alpha:1];
70 | [self layoutUI];
71 | }
72 | return self;
73 | }
74 |
75 | - (void)layoutUI
76 | {
77 | self.emojiFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 160, SCREEN_WIDTH, 40)];
78 | self.emojiFooterView.backgroundColor = [UIColor whiteColor];
79 | [self addSubview:self.emojiFooterView];
80 | UILabel *line = [[UILabel alloc] initWithFrame:CGRectMake(0, 160, SCREEN_WIDTH, 0.5)];
81 | line.backgroundColor = [UIColor lightGrayColor];
82 | [self addSubview:line];
83 |
84 | self.sendButton = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH / 5 * 4, 0, SCREEN_WIDTH / 5, 40)];
85 | [self.sendButton setTitle:@"发送" forState:UIControlStateNormal];
86 | self.sendButton.backgroundColor = [UIColor colorWithRed:230 / 255.0 green:230 / 255.0 blue:230 / 255.0 alpha:1];
87 | self.sendButton.titleLabel.font = [UIFont systemFontOfSize:15];
88 | [self.sendButton setTitleColor:[UIColor darkTextColor] forState:UIControlStateNormal];
89 | [self.sendButton addTarget:self action:@selector(clickSenderButton:) forControlEvents:UIControlEventTouchUpInside];
90 | [self.emojiFooterView addSubview:self.sendButton];
91 |
92 | self.emojiFooterScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH - (SCREEN_WIDTH / 5) - 1, self.emojiFooterView.height)];
93 | self.emojiFooterScrollView.showsHorizontalScrollIndicator = NO;
94 | self.emojiFooterScrollView.showsVerticalScrollIndicator = NO;
95 | self.emojiFooterScrollView.contentSize = CGSizeMake(SCREEN_WIDTH - (SCREEN_WIDTH / 5), self.emojiFooterView.height);
96 | [self.emojiFooterView addSubview:self.emojiFooterScrollView];
97 |
98 | self.emojiButotn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH / 6, 40)];
99 | [self.emojiButotn setImage:[UIImage imageNamed:@"liaotian_ic_biaoqing_nor"] forState:UIControlStateNormal];
100 | [self.emojiButotn setImage:[UIImage imageNamed:@"liaotian_ic_biaoqing_press"] forState:UIControlStateSelected];
101 | [self.emojiButotn addTarget:self action:@selector(clickEmojiButton) forControlEvents:UIControlEventTouchUpInside];
102 | [self.emojiFooterScrollView addSubview:self.emojiButotn];
103 | self.emojiButotn.selected = YES;
104 |
105 | self.emojiImageButotn = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH / 6, 0, SCREEN_WIDTH / 6, 40)];
106 | [self.emojiImageButotn setImage:[UIImage imageNamed:@"liaotian_ic_biaoqing_nor"] forState:UIControlStateNormal];
107 | [self.emojiImageButotn setImage:[UIImage imageNamed:@"liaotian_ic_biaoqing_press"] forState:UIControlStateSelected];
108 | [self.emojiImageButotn addTarget:self action:@selector(clickEmojiImageButton) forControlEvents:UIControlEventTouchUpInside];
109 | [self.emojiFooterScrollView addSubview:self.emojiImageButotn];
110 | self.emojiImageButotn.selected = NO;
111 |
112 | self.layout = [[CollectionViewFlowLayout alloc] init];
113 |
114 | self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 130) collectionViewLayout:self.layout];
115 | self.collectionView.backgroundColor = [UIColor colorWithRed:243 / 255.0 green:243 / 255.0 blue:243 / 255.0 alpha:1];
116 | self.collectionView.dataSource = self;
117 | self.collectionView.delegate = self;
118 | [self addSubview:self.collectionView];
119 | [self.collectionView registerClass:[EmojiCollectionViewCell class] forCellWithReuseIdentifier:@"UICollectionViewCell"];
120 |
121 | self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 140, 0, 10)];
122 | self.pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
123 | self.pageControl.pageIndicatorTintColor = [UIColor grayColor];
124 | self.pageControl.userInteractionEnabled = NO;
125 |
126 | self.pageControl.numberOfPages = (self.defaultEmoticons.count - self.emoticonImages.count) / 21;
127 | [self addSubview:self.pageControl];
128 | }
129 |
130 | - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
131 | {
132 | if (scrollView == self.collectionView) {
133 | if (scrollView.contentOffset.x >= SCREEN_WIDTH * ((self.defaultEmoticons.count - self.emoticonImages.count) / 21)) {
134 | self.pageControl.numberOfPages = self.emoticonImages.count % 21 == 0 ? self.emoticonImages.count % 21 : self.emoticonImages.count % 21 + 1 ;
135 | self.pageControl.currentPage = ((scrollView.contentOffset.x - SCREEN_WIDTH * ((self.defaultEmoticons.count - self.emoticonImages.count) / 21)) / SCREEN_WIDTH);
136 | self.emojiButotn.selected = NO;
137 | self.emojiImageButotn.selected = YES;
138 |
139 | } else {
140 | self.pageControl.numberOfPages = (self.defaultEmoticons.count - self.emoticonImages.count) / 21;
141 | self.pageControl.currentPage = (scrollView.contentOffset.x / SCREEN_WIDTH);
142 | self.emojiButotn.selected = YES;
143 | self.emojiImageButotn.selected = NO;
144 | }
145 | }
146 | }
147 |
148 | - (NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView
149 | {
150 | return 1;
151 | }
152 |
153 | - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
154 | {
155 | return self.defaultEmoticons.count;
156 | }
157 |
158 | - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
159 | {
160 | EmojiCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"UICollectionViewCell" forIndexPath:indexPath];
161 | if ([self.defaultEmoticons[indexPath.row] isKindOfClass:[UIImage class]]) {
162 | cell.image = self.defaultEmoticons[indexPath.row];
163 | } else {
164 | cell.string = self.defaultEmoticons[indexPath.row];
165 | }
166 | return cell;
167 | }
168 |
169 | - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
170 | {
171 | NSObject *str = self.defaultEmoticons[indexPath.row];
172 | if (str) {
173 | if ([_delegate respondsToSelector:@selector(emojiButtonView:emojiText:)]) {
174 | [_delegate emojiButtonView:self emojiText:str];
175 | }
176 | }
177 | }
178 |
179 | - (void)clickEmojiButton
180 | {
181 | self.emojiButotn.selected = YES;
182 | self.emojiImageButotn.selected = NO;
183 | [self.collectionView setContentOffset:CGPointMake(0, 0) animated:0];
184 | self.pageControl.numberOfPages = (self.defaultEmoticons.count - self.emoticonImages.count) / 21;
185 | self.pageControl.currentPage = (self.collectionView.contentOffset.x / SCREEN_WIDTH);
186 | }
187 |
188 | - (void)clickEmojiImageButton
189 | {
190 | self.emojiButotn.selected = NO;
191 | self.emojiImageButotn.selected = YES;
192 | [self.collectionView setContentOffset:CGPointMake(SCREEN_WIDTH * 4, 0) animated:0];
193 | self.pageControl.numberOfPages = self.emoticonImages.count % 21 == 0 ? self.emoticonImages.count % 21 : self.emoticonImages.count % 21 + 1 ;
194 | self.pageControl.currentPage = ((self.collectionView.contentOffset.x - SCREEN_WIDTH * ((self.defaultEmoticons.count - self.emoticonImages.count) / 21)) / SCREEN_WIDTH);
195 | }
196 |
197 | - (void)clickSenderButton:(UIButton *)sender
198 | {
199 | if ([_delegate respondsToSelector:@selector(emojiButtonView:sendButtonClick:)]) {
200 | [_delegate emojiButtonView:self sendButtonClick:sender];
201 | }
202 | }
203 |
204 | @end
205 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/EmojiCollectionViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiCollectionViewCell.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/19.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 | static NSString *const deleteButtonId = @"DeleteButtonId";
11 | @interface EmojiCollectionViewCell : UICollectionViewCell
12 | @property (nonatomic,strong)NSString *string;
13 | @property (nonatomic,strong)UIImage *image;
14 | @end
15 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/EmojiCollectionViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiCollectionViewCell.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/19.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 | #import "EmojiCollectionViewCell.h"
9 |
10 | @interface EmojiCollectionViewCell ()
11 | @property (nonatomic,strong)UIButton *button;
12 | @end
13 |
14 | @implementation EmojiCollectionViewCell
15 |
16 | - (instancetype)initWithFrame:(CGRect)frame
17 | {
18 | if (self = [super initWithFrame:frame]) {
19 | [self setupUI];
20 | }
21 | return self;
22 | }
23 |
24 | - (void)setupUI
25 | {
26 | self.button = [[UIButton alloc] init];
27 | self.button.userInteractionEnabled = false;
28 | [self.contentView addSubview:self.button];
29 | }
30 |
31 | - (void)setString:(NSString *)string
32 | {
33 | if ([string isEqual: deleteButtonId]) {
34 | [self.button setTitle:nil forState:UIControlStateNormal];
35 | [self.button setImage:[UIImage imageNamed:@"DeleteEmoticonBtn"] forState:UIControlStateNormal];
36 | [self.button setImage:[UIImage imageNamed:@"DeleteEmoticonBtnHL"] forState:UIControlStateHighlighted];
37 | [self.button setFrame:CGRectMake(7, 3, self.contentView.frame.size.width - 10, self.contentView.frame.size.height - 6)];
38 | } else {
39 | [self.button setImage:nil forState:UIControlStateNormal];
40 | [self.button setImage:nil forState:UIControlStateHighlighted];
41 | [self.button setTitle:string forState:UIControlStateNormal];
42 | self.button.frame = CGRectInset(self.contentView.bounds, 0, 0);
43 | }
44 | }
45 |
46 | - (void)setImage:(UIImage *)image
47 | {
48 | self.button.frame = CGRectInset(self.contentView.bounds, 0, 0);
49 | [self.button setTitle:nil forState:UIControlStateNormal];
50 | if (image) {
51 | [self.button setImage:image forState:UIControlStateNormal];
52 | [self.button setImage:image forState:UIControlStateHighlighted];
53 | } else {
54 | [self.button setImage:nil forState:UIControlStateNormal];
55 | [self.button setImage:nil forState:UIControlStateHighlighted];
56 | }
57 | }
58 |
59 | @end
60 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/EmotionImages.h:
--------------------------------------------------------------------------------
1 | //
2 | // Emotion.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/9/2.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | @interface EmotionImages : NSObject
12 | @property(nonatomic,strong)NSMutableArray* emotions;
13 | @property(nonatomic,strong)NSMutableArray* images;
14 | - (void)initEmotionImages;
15 | + (EmotionImages *)shareEmotinImages;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/EmotionImages.m:
--------------------------------------------------------------------------------
1 | //
2 | // Emotion.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/9/2.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import "EmotionImages.h"
10 | #import "IMEmotionEntity.h"
11 | @implementation EmotionImages
12 |
13 | + (EmotionImages *)shareEmotinImages
14 | {
15 | static EmotionImages *initEmotionImagesInstance = nil;
16 | static dispatch_once_t predicate;
17 | dispatch_once(&predicate, ^{
18 | initEmotionImagesInstance = [[self alloc] init];
19 | });
20 | return initEmotionImagesInstance;
21 | }
22 |
23 | - (void)initEmotionImages
24 | {
25 | _emotions = [NSMutableArray array];
26 | _images = [NSMutableArray array];
27 | NSString *path = [[NSBundle mainBundle] pathForResource:@"emotion_icons.plist" ofType:nil];
28 | NSArray* array = [NSArray arrayWithContentsOfFile:path];
29 | NSMutableArray* entities = [NSMutableArray arrayWithCapacity:array.count];
30 | IMEmotionEntity* entity = nil;
31 | NSDictionary* dic = nil;
32 | for (int i = 0; i < array.count; i++) {
33 | dic = array[i];
34 | entity = [IMEmotionEntity entityWithDictionary:dic atIndex:i];
35 | [entities addObject:entity];
36 | [_emotions addObject:entity.name];
37 | [_images addObject:[UIImage imageNamed:entity.imageName]];
38 | }
39 | }
40 | @end
41 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/IMEmotionEntity.h:
--------------------------------------------------------------------------------
1 | //
2 | // IMEmotionEntity.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface IMEmotionEntity : NSObject
12 |
13 | + (IMEmotionEntity *)entityWithDictionary:(NSDictionary*)dic atIndex:(int)index;
14 |
15 | @property (nonatomic, copy) NSString* code;//for post, ex:[0]
16 | @property (nonatomic, copy) NSString* name;//for parse, ex:[微笑]
17 | @property (nonatomic, copy) NSString* imageName;//ex, Expression_1.png
18 |
19 | @end
20 |
21 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/IMEmotionEntity.m:
--------------------------------------------------------------------------------
1 | //
2 | // IMEmotionEntity.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import "IMEmotionEntity.h"
10 |
11 | @implementation IMEmotionEntity
12 |
13 | + (IMEmotionEntity *)entityWithDictionary:(NSDictionary*)dic atIndex:(int)index
14 | {
15 | IMEmotionEntity* entity = [[IMEmotionEntity alloc] init];
16 | entity.name = dic[@"name"];
17 | entity.code = [NSString stringWithFormat:@"[%d]", index];//[dic objectForKey:@"code"];
18 | entity.imageName = [NSString stringWithFormat:@"Expression_%d.png", index+1];//[dic objectForKey:@"image"];
19 |
20 | return entity;
21 | }
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/InputToolbar.h:
--------------------------------------------------------------------------------
1 | //
2 | // InputToolbar.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "MoreButtonView.h"
11 | #import "VoiceButtonView.h"
12 | #import "EmojiButtonView.h"
13 |
14 | @interface InputToolbar : UIView
15 |
16 | +(instancetype) shareInstance;
17 |
18 | /**
19 | * 当前键盘是否可见
20 | */
21 | @property (nonatomic,assign)BOOL keyboardIsVisiable;
22 |
23 | /**
24 | * 设置第一响应
25 | */
26 | @property (nonatomic,assign)BOOL isBecomeFirstResponder;
27 |
28 | /**
29 | * 设置输入框最多可见行数
30 | */
31 | @property (nonatomic,assign)NSInteger textViewMaxVisibleLine;
32 |
33 | /**
34 | * 点击发送后要发送的文本
35 | */
36 | @property (nonatomic,copy)void(^sendContent)(NSObject *content);
37 |
38 | /**
39 | * InputToolbar所占高度
40 | */
41 | @property (nonatomic,copy)void(^inputToolbarFrameChange)(CGFloat height,CGFloat orignY);
42 |
43 | /**
44 | * 添加moreButtonView代理
45 | */
46 | - (void)setMorebuttonViewDelegate:(id)delegate;
47 |
48 | /**
49 | * 清空inputToolbar内容
50 | */
51 | - (void)clearInputToolbarContent;
52 |
53 | /**
54 | * 重置inputToolbar
55 | */
56 | - (void)resetInputToolbar;
57 | @end
58 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/InputToolbar.m:
--------------------------------------------------------------------------------
1 | //
2 | // InputToolbar.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
10 | #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
11 | #define customKeyboardHeight 200
12 | #define InputToolbarHeight 49
13 | #define NavigationHeight 64
14 |
15 | #import "InputToolbar.h"
16 | #import "UIView+Extension.h"
17 | #import "EmotionImages.h"
18 |
19 | @interface InputToolbar ()
20 | @property (nonatomic, assign)CGFloat textInputHeight;
21 | @property (nonatomic, assign)NSInteger TextInputMaxHeight;
22 | @property (nonatomic, assign)NSInteger keyboardHeight;
23 | @property (nonatomic,assign)BOOL showKeyboardButton; //YES: 显示键盘图标
24 | @property (nonatomic,assign)BOOL showMoreViewButton; //YES: 显示显示非键盘
25 | @property (nonatomic,assign)BOOL showVoiceViewButton; //YES: 显示显示非键盘
26 |
27 | @property (nonatomic,strong)UIButton *voiceButton;
28 | @property (nonatomic,strong)UITextView *textInput;
29 | @property (nonatomic,strong)UITextView *textUpload;
30 | @property (nonatomic,strong)UIButton *emojiButton;
31 | @property (nonatomic,strong)UIButton *moreButton;
32 |
33 | @property (nonatomic,strong)VoiceButtonView *voiceButtonView;
34 | @property (nonatomic,strong)EmojiButtonView *emojiButtonView;
35 | @property (nonatomic,strong)MoreButtonView *moreButtonView;
36 |
37 | @end
38 |
39 | @implementation InputToolbar
40 |
41 | - (VoiceButtonView *)voiceButtonView
42 | {
43 | if (!_voiceButtonView) {
44 | _voiceButtonView = [[VoiceButtonView alloc] init];
45 | _voiceButtonView.width = self.width;
46 | _voiceButtonView.height = customKeyboardHeight;
47 | _keyboardHeight = customKeyboardHeight;
48 | }
49 | return _voiceButtonView;
50 | }
51 |
52 | - (EmojiButtonView *)emojiButtonView
53 | {
54 | if (!_emojiButtonView) {
55 | _emojiButtonView = [[EmojiButtonView alloc] init];
56 | _emojiButtonView.delegate = self;
57 | _emojiButtonView.width = self.width;
58 | _emojiButtonView.height = customKeyboardHeight;
59 | _keyboardHeight = customKeyboardHeight;
60 | }
61 | return _emojiButtonView;
62 | }
63 |
64 | - (MoreButtonView *)moreButtonView
65 | {
66 | if (!_moreButtonView) {
67 | _moreButtonView = [[MoreButtonView alloc] init];
68 | _moreButtonView.width = self.width;
69 | _moreButtonView.height = customKeyboardHeight;
70 | _keyboardHeight = customKeyboardHeight;
71 | }
72 | return _moreButtonView;
73 | }
74 |
75 | static InputToolbar* _instance = nil;
76 | +(instancetype) shareInstance
77 | {
78 | static dispatch_once_t onceToken ;
79 | dispatch_once(&onceToken, ^{
80 | _instance = [[InputToolbar alloc] init] ;
81 | });
82 | return _instance ;
83 | }
84 |
85 | + (instancetype)alloc
86 | {
87 | static dispatch_once_t onceToken ;
88 | dispatch_once(&onceToken, ^{
89 | _instance = [[super alloc] init] ;
90 | });
91 | return _instance ;
92 | }
93 |
94 | - (instancetype)initWithFrame:(CGRect)frame
95 | {
96 | if (self = [super initWithFrame:frame]) {
97 |
98 | self.backgroundColor = [UIColor colorWithRed:243 / 255.0 green:243 / 255.0 blue:243 / 255.0 alpha:1];
99 |
100 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
101 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];
102 |
103 | [self layoutUI];
104 | }
105 | return self;
106 | }
107 |
108 | - (void)dealloc
109 | {
110 | [[NSNotificationCenter defaultCenter] removeObserver:self];
111 | }
112 |
113 | - (void)keyboardWillShow:(NSNotification *)notification
114 | {
115 | CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
116 | _keyboardHeight = keyboardFrame.size.height;
117 | CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
118 | [UIView beginAnimations:nil context:NULL];
119 | [UIView setAnimationBeginsFromCurrentState:YES];
120 | [UIView setAnimationDuration:duration];
121 | [UIView setAnimationCurve:7];
122 | self.y = keyboardFrame.origin.y - self.height;
123 | [UIView commitAnimations];
124 | _inputToolbarFrameChange(self.height,self.y);
125 | self.keyboardIsVisiable = YES;
126 | }
127 |
128 | - (void)keyboardWillHidden:(NSNotification *)notification
129 | {
130 | CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
131 | CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
132 | [UIView animateWithDuration:duration animations:^{
133 | self.y = keyboardFrame.origin.y - self.height;
134 | }];
135 | _inputToolbarFrameChange(self.height,self.y);
136 | self.keyboardIsVisiable = NO;
137 | [self setShowKeyboardButton:NO];
138 | }
139 |
140 | - (void)layoutUI
141 | {
142 | self.voiceButton = [[UIButton alloc] initWithFrame:CGRectMake(5, 9, 30, 30)];
143 | [self.voiceButton setImage:[UIImage imageNamed:@"liaotian_ic_yuyin_nor"] forState:UIControlStateNormal];
144 | [self.voiceButton setImage:[UIImage imageNamed:@"liaotian_ic_press"] forState:UIControlStateHighlighted];
145 | [self.voiceButton addTarget:self action:@selector(clickVoiceButton) forControlEvents:UIControlEventTouchUpInside];
146 | [self addSubview:self.voiceButton];
147 |
148 | self.textInput = [[UITextView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.voiceButton.frame) + 5, 5, SCREEN_WIDTH - 115, 36)];
149 | self.textInput.font = [UIFont systemFontOfSize:18];
150 | self.textInput.layer.cornerRadius = 3;
151 | self.textInput.layer.masksToBounds = YES;
152 | self.textInput.returnKeyType = UIReturnKeySend;
153 | self.textInput.enablesReturnKeyAutomatically = YES;
154 | self.textInput.delegate = self;
155 | [self addSubview:self.textInput];
156 | self.textUpload = [[UITextView alloc] init];
157 | self.textUpload.delegate = self;
158 |
159 |
160 | self.emojiButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.textInput.frame) + 5, 9, 30, 30)];
161 | [self.emojiButton setImage:[UIImage imageNamed:@"liaotian_ic_biaoqing_nor"] forState:UIControlStateNormal];
162 | [self.emojiButton setImage:[UIImage imageNamed:@"liaotian_ic_biaoqing_press"] forState:UIControlStateHighlighted];
163 | [self.emojiButton addTarget:self action:@selector(clickEmojiButton) forControlEvents:UIControlEventTouchUpInside];
164 | [self addSubview:self.emojiButton];
165 |
166 | self.moreButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.emojiButton.frame) + 5, 9, 30, 30)];
167 | [self.moreButton setImage:[UIImage imageNamed:@"liaotian_ic_gengduo_nor"] forState:UIControlStateNormal];
168 | [self.moreButton setImage:[UIImage imageNamed:@"liaotian_ic_gengduo_press"] forState:UIControlStateHighlighted];
169 | [self.moreButton addTarget:self action:@selector(clickMoreButton) forControlEvents:UIControlEventTouchUpInside];
170 | [self addSubview:self.moreButton];
171 | }
172 |
173 | - (void)textViewDidChange:(UITextView *)textView
174 | {
175 | _textInputHeight = ceilf([self.textInput sizeThatFits:CGSizeMake(self.textInput.bounds.size.width, MAXFLOAT)].height);
176 | self.textInput.scrollEnabled = _textInputHeight > _TextInputMaxHeight && _TextInputMaxHeight > 0;
177 | if (self.textInput.scrollEnabled) {
178 | self.textInput.height = 5 + _TextInputMaxHeight;
179 | self.y = SCREEN_HEIGHT - _keyboardHeight - _TextInputMaxHeight - 5 - 8;
180 | self.height = _TextInputMaxHeight + 15;
181 | } else {
182 | self.textInput.height = _textInputHeight;
183 | self.y = SCREEN_HEIGHT - _keyboardHeight - _textInputHeight - 5 - 8;
184 | self.height = _textInputHeight + 15;
185 | }
186 | _inputToolbarFrameChange(self.height,self.y);
187 | }
188 |
189 | - (void)textViewDidBeginEditing:(UITextView *)textView
190 | {
191 | self.textInput.inputView = nil;
192 | self.textUpload.inputView = nil;
193 | }
194 |
195 | - (void)emojiButtonView:(EmojiButtonView *)emojiButtonView emojiText:(NSObject *)text
196 | {
197 | if ([text isEqual: deleteButtonId]) {
198 | NSInteger location = self.textUpload.selectedRange.location;
199 | NSString *string = [self.textUpload.text substringToIndex:location];
200 | if ([string hasSuffix:@"]"]) {
201 | for (NSInteger i = string.length - 1; i >= 0; i --) {
202 | char c = [string characterAtIndex:i];
203 | [self.textUpload deleteBackward];
204 | if (c == '[') {
205 | break;
206 | }
207 | }
208 | [self.textInput deleteBackward];
209 | } else {
210 | [self.textUpload deleteBackward];
211 | [self.textInput deleteBackward];
212 | }
213 | return;
214 | }
215 | if (![text isKindOfClass:[UIImage class]]) {
216 | [self.textInput replaceRange:self.textInput.selectedTextRange withText:(NSString *)text];
217 | [self.textUpload replaceRange:self.textUpload.selectedTextRange withText:(NSString *)text];
218 | } else {
219 | NSTextAttachment *textAttachment = [[NSTextAttachment alloc] initWithData:nil ofType:nil] ;
220 | textAttachment.image = (UIImage *)text;
221 | textAttachment.bounds = CGRectMake(0, - 5, self.textInput.font.lineHeight + 2, self.textInput.font.lineHeight + 2);
222 | NSAttributedString *imageText = [NSAttributedString attributedStringWithAttachment:textAttachment];
223 |
224 | NSMutableAttributedString *strM = [[NSMutableAttributedString alloc] initWithAttributedString:self.textInput.attributedText];
225 | [strM replaceCharactersInRange:self.textInput.selectedRange withAttributedString:imageText];
226 | [strM addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:18] range:NSMakeRange(self.textInput.selectedRange.location, 1)];
227 | self.textInput.attributedText = strM;
228 | self.textInput.selectedRange = NSMakeRange(self.textInput.selectedRange.location + 1,0);
229 | [self.textInput.delegate textViewDidChange:self.textInput];
230 |
231 | NSString *stringImage = [EmotionImages shareEmotinImages].emotions[[[EmotionImages shareEmotinImages].images indexOfObject:(UIImage *)text]];
232 | NSMutableString *mString = [NSMutableString stringWithString:self.textUpload.text];
233 | [mString replaceCharactersInRange:self.textUpload.selectedRange withString:stringImage];
234 | self.textUpload.text = mString;
235 | self.textUpload.selectedRange = NSMakeRange(self.textUpload.selectedRange.location + 1,0);
236 | [self.textInput.delegate textViewDidChange:self.textUpload];
237 | }
238 | }
239 |
240 | - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
241 | {
242 | //默认键盘删除键
243 | if ([text isEqualToString:@""]) {
244 | //确定光标位置并且删除
245 | NSInteger location = self.textUpload.selectedRange.location;
246 | NSString *string = [self.textUpload.text substringToIndex:location];
247 | if ([string hasSuffix:@"]"]) {
248 | for (NSInteger i = string.length - 1; i >= 0; i --) {
249 | char c = [string characterAtIndex:i];
250 | [self.textUpload deleteBackward];
251 | if (c == '[') {
252 | break;
253 | }
254 | }
255 | } else {
256 | [self.textUpload deleteBackward];
257 | }
258 | }
259 | //键盘默认发送键
260 | if ([text isEqualToString:@"\n"]) {
261 | if (_sendContent) {
262 | _sendContent(self.textUpload.text);
263 | self.y = SCREEN_HEIGHT - _keyboardHeight - InputToolbarHeight;
264 | _inputToolbarFrameChange(self.height,self.y);
265 | }
266 | textView.text = nil;
267 | self.textUpload.text = nil;
268 | self.textInput.height = 36;
269 | self.height = InputToolbarHeight;
270 | return NO;
271 | }
272 | NSMutableString *mString = [NSMutableString stringWithString:self.textUpload.text];
273 | [mString replaceCharactersInRange:self.textUpload.selectedRange withString:text];
274 | self.textUpload.text = mString;
275 |
276 | return YES;
277 | }
278 |
279 | - (void)emojiButtonView:(EmojiButtonView *)emojiButtonView sendButtonClick:(UIButton *)sender
280 | {
281 | if (_sendContent) {
282 | _sendContent(self.textUpload.text);
283 | self.y = SCREEN_HEIGHT - _keyboardHeight - InputToolbarHeight;
284 | _inputToolbarFrameChange(self.height,self.y);
285 | }
286 | self.textInput.text = nil;
287 | self.textUpload.text = nil;
288 | self.textInput.height = 36;
289 | self.height = InputToolbarHeight;
290 | }
291 |
292 | - (void)clickVoiceButton
293 | {
294 | self.showMoreViewButton = NO;
295 | self.showKeyboardButton = NO;
296 | if (self.showVoiceViewButton) {
297 | [self.textInput resignFirstResponder];
298 | self.textInput.inputView = nil;
299 | self.showVoiceViewButton = NO;
300 | } else {
301 | [self.textInput resignFirstResponder];
302 | self.textInput.inputView = self.voiceButtonView;
303 | self.showVoiceViewButton = YES;
304 | }
305 | [self.textInput endEditing:YES];
306 | [self.textInput becomeFirstResponder];
307 | }
308 |
309 | - (void)clickEmojiButton
310 | {
311 | self.showMoreViewButton = NO;
312 | self.showVoiceViewButton = NO;
313 | if (!self.showKeyboardButton) {
314 | [self.textInput resignFirstResponder];
315 | self.textInput.inputView = self.emojiButtonView;
316 | self.showKeyboardButton = YES;
317 | } else {
318 | [self.textInput resignFirstResponder];
319 | self.textInput.inputView = nil;
320 | self.showKeyboardButton = NO;
321 | }
322 | [self.textInput endEditing:YES];
323 | [self.textInput becomeFirstResponder];
324 | }
325 |
326 | - (void)clickMoreButton
327 | {
328 | self.showVoiceViewButton = NO;
329 | self.showKeyboardButton = NO;
330 | if (self.showMoreViewButton) {
331 | [self.textInput resignFirstResponder];
332 | self.textInput.inputView = nil;
333 | self.showMoreViewButton = NO;
334 | } else {
335 | [self.textInput resignFirstResponder];
336 | self.textInput.inputView = self.moreButtonView;
337 | self.showMoreViewButton = YES;
338 | }
339 | [self.textInput endEditing:YES];
340 | [self.textInput becomeFirstResponder];
341 | }
342 |
343 | - (void)setShowKeyboardButton:(BOOL)showKeyboardButton
344 | {
345 | _showKeyboardButton = showKeyboardButton;
346 |
347 | // 默认的图片名
348 | NSString *image = @"liaotian_ic_biaoqing_nor";
349 | NSString *highImage = @"liaotian_ic_biaoqing_press";
350 |
351 | // 显示键盘图标
352 | if (showKeyboardButton) {
353 | image = @"liaotian_ic_jianpan_nor";
354 | highImage = @"liaotian_ic_jianpan_press";
355 | }
356 |
357 | // 设置图片
358 | [self.emojiButton setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
359 | [self.emojiButton setImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];
360 | }
361 |
362 | - (void)setIsBecomeFirstResponder:(BOOL)isBecomeFirstResponder
363 | {
364 | if (isBecomeFirstResponder) {
365 | [self.textInput becomeFirstResponder];
366 | [self.textUpload becomeFirstResponder];
367 | } else {
368 | [self.textInput resignFirstResponder];
369 | [self.textUpload resignFirstResponder];
370 | }
371 | }
372 |
373 | - (void)setMorebuttonViewDelegate:(id)delegate
374 | {
375 | self.moreButtonView.delegate = delegate;
376 | }
377 |
378 | - (void)setTextViewMaxVisibleLine:(NSInteger)textViewMaxVisibleLine
379 | {
380 | _textViewMaxVisibleLine = textViewMaxVisibleLine;
381 | _TextInputMaxHeight = ceil(self.textInput.font.lineHeight * (textViewMaxVisibleLine - 1) + self.textInput.textContainerInset.top + self.textInput.textContainerInset.bottom);
382 | }
383 |
384 | - (void)clearInputToolbarContent
385 | {
386 | self.textInput.text = nil;
387 | self.textUpload.text = nil;
388 | }
389 |
390 | - (void)resetInputToolbar
391 | {
392 | self.textInput.text = nil;
393 | self.textUpload.text = nil;
394 | self.textInput.height = 36;
395 | self.height = InputToolbarHeight;
396 | }
397 |
398 | @end
399 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/MoreButtonView.h:
--------------------------------------------------------------------------------
1 | //
2 | // MoreButtonScrollView.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 | @class MoreButtonView;
11 | typedef enum {
12 | MoreButtonViewButtonTypeImages,
13 | MoreButtonViewButtonTypeCamera,
14 | MoreButtonViewButtonTypeFile,
15 | MoreButtonViewButtonTypeContact,
16 | MoreButtonViewButtonTypeLocation,
17 | MoreButtonViewButtonTypeSeal,
18 | MoreButtonViewButtonTypeEmail,
19 | } MoreButtonViewButtonType;
20 |
21 | @protocol MoreButtonViewDelegate
22 | - (void)moreButtonView:(MoreButtonView *)moreButtonView didClickButton:(MoreButtonViewButtonType )buttonType;
23 | @end
24 |
25 | @interface MoreButtonView : UIView
26 | @property (nonatomic,weak) iddelegate;
27 | @end
28 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/MoreButtonView.m:
--------------------------------------------------------------------------------
1 | //
2 | // MoreButtonScrollView.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 | #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
9 | #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
10 | #import "MoreButtonView.h"
11 |
12 | @interface MoreButtonView ()
13 | @end
14 |
15 | @implementation MoreButtonView
16 |
17 | - (instancetype)initWithFrame:(CGRect)frame
18 | {
19 | if (self = [super initWithFrame:frame]) {
20 |
21 | self.backgroundColor = [UIColor colorWithRed:243 / 255.0 green:243 / 255.0 blue:243 / 255.0 alpha:1];
22 | [self layoutUI];
23 | }
24 | return self;
25 | }
26 |
27 | - (void)layoutUI
28 | {
29 | [self addButtonWithIcon:@"img_defaulthead_nor" highIcon:@"img_defaulthead_nor" tag:MoreButtonViewButtonTypeImages title:@"Images"];
30 | [self addButtonWithIcon:@"img_defaulthead_nor" highIcon:@"img_defaulthead_nor" tag:MoreButtonViewButtonTypeCamera title:@"Camera"];
31 | [self addButtonWithIcon:@"img_defaulthead_nor" highIcon:@"img_defaulthead_nor" tag:MoreButtonViewButtonTypeFile title:@"File"];
32 | [self addButtonWithIcon:@"img_defaulthead_nor" highIcon:@"img_defaulthead_nor" tag:MoreButtonViewButtonTypeContact title:@"Contact"];
33 | [self addButtonWithIcon:@"img_defaulthead_nor" highIcon:@"img_defaulthead_nor" tag:MoreButtonViewButtonTypeLocation title:@"Location"];
34 | [self addButtonWithIcon:@"img_defaulthead_nor" highIcon:@"img_defaulthead_nor" tag:MoreButtonViewButtonTypeSeal title:@"Seal"];
35 | [self addButtonWithIcon:@"img_defaulthead_nor" highIcon:@"img_defaulthead_nor" tag:MoreButtonViewButtonTypeEmail title:@"Email"];
36 | }
37 |
38 | - (void)addButtonWithIcon:(NSString *)icon highIcon:(NSString *)heighIcon tag:(int )tag title:(NSString *)title
39 | {
40 | UIButton *button = [[UIButton alloc] init];
41 | button.tag = tag;
42 | [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
43 | [button setBackgroundImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
44 | [button setBackgroundImage:[UIImage imageNamed:heighIcon] forState:UIControlStateNormal];
45 | [self addSubview:button];
46 |
47 | UILabel *label = [[UILabel alloc] init];
48 | label.font = [UIFont systemFontOfSize:14];
49 | label.text = title;
50 | label.textAlignment = NSTextAlignmentCenter;
51 | [self addSubview:label];
52 | }
53 |
54 | - (void)layoutSubviews
55 | {
56 | [super layoutSubviews];
57 | NSMutableArray *mArrayButton = [NSMutableArray array];
58 | NSMutableArray *mArrayLabel = [NSMutableArray array];
59 |
60 | for (UIView *view in self.subviews) {
61 | if ([view isKindOfClass:[UIButton class]]) {
62 | [mArrayButton addObject:view];
63 | } else if ([view isKindOfClass:[UILabel class]]) {
64 | [mArrayLabel addObject:view];
65 | }
66 | }
67 |
68 | CGFloat buttonW = 55;
69 | CGFloat buttonH = buttonW;
70 | for (NSInteger i = 0; i < mArrayButton.count; i ++) {
71 | UIButton *button = mArrayButton[i];
72 | UILabel *label = [mArrayLabel objectAtIndex:i];
73 | CGFloat X = (((SCREEN_WIDTH - (4 * buttonW)) / 5) * ((i % 4) + 1)) + (buttonW * (i % 4));
74 | CGFloat Y = 15 + (i / 4) * (buttonH + 35);
75 | button.frame = CGRectMake(X, Y, buttonW, buttonH);
76 | label.frame = CGRectMake(button.frame.origin.x, CGRectGetMaxY(button.frame) + 3, button.frame.size.width + 5, 20);
77 | }
78 | }
79 |
80 | - (void)buttonClick:(UIButton *)sender
81 | {
82 | if ([_delegate respondsToSelector:@selector(moreButtonView:didClickButton:)]) {
83 | [_delegate moreButtonView:self didClickButton:(MoreButtonViewButtonType)sender.tag];
84 | }
85 | }
86 |
87 | @end
88 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/UITextView+Category.h:
--------------------------------------------------------------------------------
1 | //
2 | // UITextView+Category.h
3 | // Teeim
4 | //
5 | // Created by ShaoFeng on 16/8/25.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UITextView (Category)
12 | @end
13 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/UITextView+Category.m:
--------------------------------------------------------------------------------
1 | //
2 | // UITextView+Category.m
3 | // Teeim
4 | //
5 | // Created by ShaoFeng on 16/8/25.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import "UITextView+Category.h"
10 |
11 | @implementation UITextView (Category)
12 | - (void)_firstBaselineOffsetFromTop {
13 | }
14 | - (void)_baselineOffsetFromBottom {
15 | }
16 | @end
17 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/UIView+Extension.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Extension.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIView (Extension)
12 | @property (nonatomic, assign) CGFloat x;
13 | @property (nonatomic, assign) CGFloat y;
14 | @property (nonatomic, assign) CGFloat centerX;
15 | @property (nonatomic, assign) CGFloat centerY;
16 | @property (nonatomic, assign) CGFloat width;
17 | @property (nonatomic, assign) CGFloat height;
18 | @property (nonatomic, assign) CGSize size;
19 | @property (nonatomic, assign) CGPoint origin;
20 | @end
21 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/UIView+Extension.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Extension.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import "UIView+Extension.h"
10 |
11 | @implementation UIView (Extension)
12 |
13 | - (void)setX:(CGFloat)x
14 | {
15 | CGRect frame = self.frame;
16 | frame.origin.x = x;
17 | self.frame = frame;
18 | }
19 |
20 | - (void)setY:(CGFloat)y
21 | {
22 | CGRect frame = self.frame;
23 | frame.origin.y = y;
24 | self.frame = frame;
25 | }
26 |
27 | - (CGFloat)x
28 | {
29 | return self.frame.origin.x;
30 | }
31 |
32 | - (CGFloat)y
33 | {
34 | return self.frame.origin.y;
35 | }
36 |
37 | - (void)setCenterX:(CGFloat)centerX
38 | {
39 | CGPoint center = self.center;
40 | center.x = centerX;
41 | self.center = center;
42 | }
43 |
44 | - (CGFloat)centerX
45 | {
46 | return self.center.x;
47 | }
48 |
49 | - (void)setCenterY:(CGFloat)centerY
50 | {
51 | CGPoint center = self.center;
52 | center.y = centerY;
53 | self.center = center;
54 | }
55 |
56 | - (CGFloat)centerY
57 | {
58 | return self.center.y;
59 | }
60 |
61 | - (void)setWidth:(CGFloat)width
62 | {
63 | CGRect frame = self.frame;
64 | frame.size.width = width;
65 | self.frame = frame;
66 | }
67 |
68 | - (void)setHeight:(CGFloat)height
69 | {
70 | CGRect frame = self.frame;
71 | frame.size.height = height;
72 | self.frame = frame;
73 | }
74 |
75 | - (CGFloat)height
76 | {
77 | return self.frame.size.height;
78 | }
79 |
80 | - (CGFloat)width
81 | {
82 | return self.frame.size.width;
83 | }
84 |
85 | - (void)setSize:(CGSize)size
86 | {
87 | CGRect frame = self.frame;
88 | frame.size = size;
89 | self.frame = frame;
90 | }
91 |
92 | - (CGSize)size
93 | {
94 | return self.frame.size;
95 | }
96 |
97 | - (void)setOrigin:(CGPoint)origin
98 | {
99 | CGRect frame = self.frame;
100 | frame.origin = origin;
101 | self.frame = frame;
102 | }
103 |
104 | - (CGPoint)origin
105 | {
106 | return self.frame.origin;
107 | }
108 | @end
109 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/VoiceButtonView.h:
--------------------------------------------------------------------------------
1 | //
2 | // VoiceButtonView.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface VoiceButtonView : UIView
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/Class/VoiceButtonView.m:
--------------------------------------------------------------------------------
1 |
2 | //
3 | // VoiceButtonView.m
4 | // KeyBoard
5 | //
6 | // Created by ShaoFeng on 16/8/18.
7 | // Copyright © 2016年 Cocav. All rights reserved.
8 | //
9 | #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
10 | #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
11 |
12 | #import "VoiceButtonView.h"
13 | #import "UIView+Extension.h"
14 | #import
15 | @interface VoiceButtonView ()
16 | {
17 | AVAudioRecorder *audioRecorder;
18 | }
19 | @property (nonatomic,strong)UIView *leftView;
20 | @property (nonatomic,strong)UIImageView *mainView;
21 | @property (nonatomic,strong)UIView *rightView;
22 | @end
23 |
24 | @implementation VoiceButtonView
25 |
26 | - (instancetype)initWithFrame:(CGRect)frame
27 | {
28 | if (self = [super initWithFrame:frame]) {
29 |
30 | self.backgroundColor = [UIColor colorWithRed:243 / 255.0 green:243 / 255.0 blue:243 / 255.0 alpha:1];
31 | [self layoutUI];
32 | }
33 | return self;
34 | }
35 |
36 | - (void)layoutUI
37 | {
38 | self.mainView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mianView"]];
39 | self.mainView.x = SCREEN_WIDTH / 2 - 40;
40 | self.mainView.y = 60;
41 | self.mainView.width = self.mainView.height = 80;
42 | [self addSubview:self.mainView];
43 | self.mainView.userInteractionEnabled = YES;
44 | UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
45 | [self.mainView addGestureRecognizer:swipe];
46 | UILongPressGestureRecognizer *longpress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longpress:)];
47 | [self.mainView addGestureRecognizer:longpress];
48 | }
49 |
50 | - (void)swipe:(UISwipeGestureRecognizer *)recognizer
51 | {
52 | if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
53 | } else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
54 | }
55 | }
56 |
57 | - (void)longpress:(UILongPressGestureRecognizer *)recognizer
58 | {
59 | NSString *name = [NSString stringWithFormat:@"%d.aiff",(int)[NSDate date].timeIntervalSince1970];
60 | NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:name];
61 | NSError *error;
62 | // 录音机 初始化
63 | audioRecorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:path] settings:@{AVNumberOfChannelsKey:@2,AVSampleRateKey:@44100,AVLinearPCMBitDepthKey:@32,AVEncoderAudioQualityKey:@(AVAudioQualityMax),AVEncoderBitRateKey:@128000} error:&error];
64 | [audioRecorder prepareToRecord];
65 | [audioRecorder record];
66 | audioRecorder.delegate = self;
67 | /*
68 | 1.AVNumberOfChannelsKey 通道数 通常为双声道 值2
69 | 2.AVSampleRateKey 采样率 单位HZ 通常设置成44100 也就是44.1k
70 | 3.AVLinearPCMBitDepthKey 比特率 8 16 24 32
71 | 4.AVEncoderAudioQualityKey 声音质量
72 | ① AVAudioQualityMin = 0, 最小的质量
73 | ② AVAudioQualityLow = 0x20, 比较低的质量
74 | ③ AVAudioQualityMedium = 0x40, 中间的质量
75 | ④ AVAudioQualityHigh = 0x60,高的质量
76 | ⑤ AVAudioQualityMax = 0x7F 最好的质量
77 | 5.AVEncoderBitRateKey 音频编码的比特率 单位Kbps 传输的速率 一般设置128000 也就是128kbps
78 |
79 | */
80 |
81 | // NSLog(@"%@",path);
82 | }
83 |
84 | - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{
85 | NSLog(@"录音结束");
86 | // 文件操作的类
87 | NSFileManager *manger = [NSFileManager defaultManager];
88 |
89 | NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
90 | // 获得当前文件的所有子文件subpathsAtPath
91 | NSArray *pathlList = [manger subpathsAtPath:path];
92 |
93 | // 需要只获得录音文件
94 | NSMutableArray *audioPathList = [NSMutableArray array];
95 | // 遍历所有这个文件夹下的子文件
96 | for (NSString *audioPath in pathlList) {
97 | // 通过对比文件的延展名(扩展名 尾缀) 来区分是不是录音文件
98 | if ([audioPath.pathExtension isEqualToString:@"aiff"]) {
99 | // 把筛选出来的文件放到数组中
100 | [audioPathList addObject:audioPath];
101 | }
102 | }
103 | // NSLog(@"%@",audioPathList);
104 | }
105 |
106 | @end
107 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/Emoji.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 | 🎂
78 | 🎓
79 | 🍖
80 | ☔
81 | ⛅
82 | ✏
83 | 💩
84 | 🎄
85 | 🍷
86 | 🎤
87 | 🏀
88 | 🀄
89 | 💣
90 | 📢
91 | 🌏
92 | 🍫
93 | 🎲
94 | 🏂
95 | 💡
96 | 💤
97 | 🚫
98 | 🌻
99 | 🍻
100 | 🎵
101 | 🏡
102 | 💢
103 | 📞
104 | 🚿
105 | 🍚
106 | 👪
107 | 👼
108 | 💊
109 | 🔫
110 | 🌹
111 | 🐶
112 | 💄
113 | 👫
114 | 👽
115 | 💋
116 | 🌙
117 | 🍉
118 | 🐷
119 | 💔
120 | 👻
121 | 👿
122 | 💍
123 | 🌲
124 | 🐴
125 | 👑
126 | 🔥
127 | ⭐
128 | ⚽
129 | 🕖
130 | ⏰
131 | 😁
132 | 🚀
133 | ⏳
134 |
135 |
136 |
137 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/DeleteEmoticonBtn@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/DeleteEmoticonBtn@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/DeleteEmoticonBtnHL@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/DeleteEmoticonBtnHL@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_100@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_100@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_101@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_101@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_102@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_102@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_103@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_103@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_104@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_104@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_105@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_105@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_10@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_10@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_11@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_11@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_12@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_12@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_13@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_13@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_14@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_14@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_15@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_15@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_16@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_17@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_17@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_18@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_18@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_19@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_19@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_1@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_20@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_21@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_21@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_22@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_22@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_23@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_23@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_24@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_24@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_25@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_25@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_26@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_26@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_27@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_27@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_28@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_28@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_29@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_2@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_30@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_30@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_31@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_31@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_32@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_33@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_33@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_34@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_34@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_35@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_35@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_36@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_36@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_37@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_37@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_38@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_38@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_39@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_39@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_3@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_3@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_40@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_41@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_41@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_42@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_42@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_43@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_43@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_44@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_44@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_45@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_45@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_46@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_46@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_47@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_47@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_48@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_48@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_49@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_49@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_4@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_4@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_50@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_51@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_51@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_52@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_52@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_53@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_53@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_54@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_54@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_55@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_55@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_56@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_56@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_57@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_58@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_58@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_59@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_59@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_5@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_60@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_61@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_61@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_62@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_62@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_63@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_63@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_64@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_64@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_65@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_65@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_66@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_66@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_67@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_67@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_68@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_68@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_69@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_69@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_6@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_70@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_70@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_71@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_71@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_72@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_73@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_73@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_74@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_74@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_75@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_75@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_76@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_77@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_77@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_78@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_78@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_79@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_79@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_7@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_7@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_80@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_80@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_81@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_81@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_82@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_82@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_83@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_83@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_84@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_84@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_85@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_85@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_86@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_86@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_87@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_87@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_88@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_88@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_89@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_89@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_8@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_8@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_90@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_90@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_91@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_91@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_92@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_92@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_93@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_93@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_94@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_94@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_95@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_95@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_96@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_96@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_97@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_97@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_98@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_98@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_99@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_99@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_9@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/Expression_9@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/emotion/emotion_icons.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | name
7 | [微笑]
8 |
9 |
10 | name
11 | [撇嘴]
12 |
13 |
14 | name
15 | [色]
16 |
17 |
18 | name
19 | [发呆]
20 |
21 |
22 | name
23 | [得意]
24 |
25 |
26 | name
27 | [流泪]
28 |
29 |
30 | name
31 | [害羞]
32 |
33 |
34 | name
35 | [闭嘴]
36 |
37 |
38 | name
39 | [睡]
40 |
41 |
42 | name
43 | [大哭]
44 |
45 |
46 | name
47 | [尴尬]
48 |
49 |
50 | name
51 | [发怒]
52 |
53 |
54 | name
55 | [调皮]
56 |
57 |
58 | name
59 | [呲牙]
60 |
61 |
62 | name
63 | [惊讶]
64 |
65 |
66 | name
67 | [难过]
68 |
69 |
70 | name
71 | [酷]
72 |
73 |
74 | name
75 | [冷汗]
76 |
77 |
78 | name
79 | [抓狂]
80 |
81 |
82 | name
83 | [吐]
84 |
85 |
86 | name
87 | [偷笑]
88 |
89 |
90 | name
91 | [愉快]
92 |
93 |
94 | name
95 | [白眼]
96 |
97 |
98 | name
99 | [傲慢]
100 |
101 |
102 | name
103 | [饥饿]
104 |
105 |
106 | name
107 | [困]
108 |
109 |
110 | name
111 | [惊恐]
112 |
113 |
114 | name
115 | [流汗]
116 |
117 |
118 | name
119 | [憨笑]
120 |
121 |
122 | name
123 | [休闲]
124 |
125 |
126 | name
127 | [奋斗]
128 |
129 |
130 | name
131 | [咒骂]
132 |
133 |
134 | name
135 | [疑问]
136 |
137 |
138 | name
139 | [嘘]
140 |
141 |
142 | name
143 | [晕]
144 |
145 |
146 | name
147 | [疯了]
148 |
149 |
150 | name
151 | [衰]
152 |
153 |
154 | name
155 | [骷髅]
156 |
157 |
158 | name
159 | [敲打]
160 |
161 |
162 | name
163 | [再见]
164 |
165 |
166 | name
167 | [擦汗]
168 |
169 |
170 | name
171 | [抠鼻]
172 |
173 |
174 | name
175 | [鼓掌]
176 |
177 |
178 | name
179 | [溴大了]
180 |
181 |
182 | name
183 | [坏笑]
184 |
185 |
186 | name
187 | [左哼哼]
188 |
189 |
190 | name
191 | [右哼哼]
192 |
193 |
194 | name
195 | [哈欠]
196 |
197 |
198 | name
199 | [鄙视]
200 |
201 |
202 | name
203 | [委屈]
204 |
205 |
206 | name
207 | [快哭了]
208 |
209 |
210 | name
211 | [阴险]
212 |
213 |
214 | name
215 | [亲亲]
216 |
217 |
218 | name
219 | [吓]
220 |
221 |
222 | name
223 | [可怜]
224 |
225 |
226 | name
227 | [菜刀]
228 |
229 |
230 | name
231 | [西瓜]
232 |
233 |
234 | name
235 | [啤酒]
236 |
237 |
238 | name
239 | [篮球]
240 |
241 |
242 | name
243 | [乒乓]
244 |
245 |
246 | name
247 | [咖啡]
248 |
249 |
250 | name
251 | [饭]
252 |
253 |
254 | name
255 | [猪头]
256 |
257 |
258 | name
259 | [玫瑰]
260 |
261 |
262 | name
263 | [凋谢]
264 |
265 |
266 | name
267 | [嘴唇]
268 |
269 |
270 | name
271 | [爱心]
272 |
273 |
274 | name
275 | [心碎]
276 |
277 |
278 | name
279 | [蛋糕]
280 |
281 |
282 | name
283 | [闪电]
284 |
285 |
286 | name
287 | [炸弹]
288 |
289 |
290 | name
291 | [刀]
292 |
293 |
294 | name
295 | [足球]
296 |
297 |
298 | name
299 | [瓢虫]
300 |
301 |
302 | name
303 | [便便]
304 |
305 |
306 | name
307 | [月亮]
308 |
309 |
310 | name
311 | [太阳]
312 |
313 |
314 | name
315 | [礼物]
316 |
317 |
318 | name
319 | [拥抱]
320 |
321 |
322 | name
323 | [强]
324 |
325 |
326 | name
327 | [弱]
328 |
329 |
330 | name
331 | [握手]
332 |
333 |
334 | name
335 | [胜利]
336 |
337 |
338 | name
339 | [抱拳]
340 |
341 |
342 | name
343 | [勾引]
344 |
345 |
346 | name
347 | [拳头]
348 |
349 |
350 | name
351 | [差劲]
352 |
353 |
354 | name
355 | [爱你]
356 |
357 |
358 | name
359 | [NO]
360 |
361 |
362 | name
363 | [YES]
364 |
365 |
366 | name
367 | [爱情]
368 |
369 |
370 | name
371 | [飞吻]
372 |
373 |
374 | name
375 | [跳跳]
376 |
377 |
378 | name
379 | [发抖]
380 |
381 |
382 | name
383 | [怄火]
384 |
385 |
386 | name
387 | [转圈]
388 |
389 |
390 | name
391 | [磕头]
392 |
393 |
394 | name
395 | [回头]
396 |
397 |
398 | name
399 | [跳绳]
400 |
401 |
402 | name
403 | [投降]
404 |
405 |
406 |
407 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/img_defaulthead_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/img_defaulthead_nor.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/img_defaulthead_nor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/img_defaulthead_nor@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/img_defaulthead_nor@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/img_defaulthead_nor@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_nor.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_nor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_nor@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_nor@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_nor@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_press.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_press@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_biaoqing_press@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_nor.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_nor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_nor@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_nor@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_nor@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_press.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_press@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_gengduo_press@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_nor.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_nor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_nor@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_nor@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_nor@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_press.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_press@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_jianpan_press@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_press.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_press@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_press@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_yuyin_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_yuyin_nor.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_yuyin_nor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_yuyin_nor@2x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_yuyin_nor@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/liaotian_ic_yuyin_nor@3x.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/KeyBoard/KerboardResource/mianView.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/1170197998/QQ-WeChatKeyboard/d048adfac92bf4a5f334ec98754505575c5e93fa/KeyBoard/KeyBoard/KeyBoard/KerboardResource/mianView.png
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/PushViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // PushViewController.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface PushViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/PushViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // PushViewController.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/18.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 | #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
9 | #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
10 |
11 | #import "PushViewController.h"
12 | #import "InputToolbar.h"
13 | #import "UIView+Extension.h"
14 |
15 | @interface PushViewController ()
16 | @property (nonatomic,strong)InputToolbar *inputToolbar;
17 | @property (nonatomic,assign)CGFloat inputToolbarY;
18 | @property (weak, nonatomic) IBOutlet UITextView *textView;
19 | @end
20 |
21 | @implementation PushViewController
22 |
23 | - (void)viewDidLoad {
24 | [super viewDidLoad];
25 |
26 | self.inputToolbar = [InputToolbar shareInstance];
27 | [self.view addSubview:self.inputToolbar];
28 | self.inputToolbar.textViewMaxVisibleLine = 4;
29 | self.inputToolbar.width = self.view.width;
30 | self.inputToolbar.height = 49;
31 | self.inputToolbar.y = self.view.height - self.inputToolbar.height;
32 | [self.inputToolbar setMorebuttonViewDelegate:self];
33 |
34 | __weak typeof(self) weakSelf = self;
35 | self.inputToolbar.sendContent = ^(NSObject *content){
36 | NSLog(@"上传服务器内容☀️:---%@",(NSString *)content);
37 | weakSelf.textView.text = (NSString *)content;
38 | };
39 |
40 | self.inputToolbar.inputToolbarFrameChange = ^(CGFloat height,CGFloat orignY){
41 | weakSelf.inputToolbarY = orignY;
42 | /*
43 | 如果是当前界面是tableView可以直接使用以下代码调试位置
44 | if (weakSelf.tableView.contentSize.height > orignY) {
45 | [weakSelf.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
46 | make.bottom.mas_equalTo(0);
47 | }];
48 | [weakSelf.tableView setContentOffset:CGPointMake(0, weakSelf.tableView.contentSize.height - orignY) animated:YES];
49 | }
50 | */
51 | };
52 | [self.inputToolbar resetInputToolbar];
53 | }
54 |
55 | - (void)dealloc {
56 | NSLog(@"dealloc");
57 | }
58 |
59 | -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
60 | {
61 | self.inputToolbar.isBecomeFirstResponder = NO;
62 | }
63 |
64 | - (void)moreButtonView:(MoreButtonView *)moreButtonView didClickButton:(MoreButtonViewButtonType)buttonType
65 | {
66 | switch (buttonType) {
67 | case MoreButtonViewButtonTypeImages:
68 | {
69 | UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
70 | ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
71 | ipc.delegate = self;
72 | [self presentViewController:ipc animated:YES completion:nil];
73 | } break;
74 |
75 | case MoreButtonViewButtonTypeCamera:
76 | {
77 | UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
78 | ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
79 | ipc.delegate = self;
80 | [self presentViewController:ipc animated:YES completion:nil];
81 | } break;
82 |
83 | default:
84 | break;
85 | }
86 | }
87 |
88 | - (void)inputToolbar:(InputToolbar *)inputToolbar orignY:(CGFloat)orignY
89 | {
90 | _inputToolbarY = orignY;
91 | }
92 |
93 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(nonnull NSDictionary *)info
94 | {
95 | [picker dismissViewControllerAnimated:YES completion:nil];
96 | //UIImage *image = info[UIImagePickerControllerOriginalImage];
97 | //图片选取成功
98 | }
99 |
100 | @end
101 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/17.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/17.
6 | // Copyright © 2016年 Cocav. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 |
11 | @interface ViewController ()
12 |
13 | @end
14 |
15 | @implementation ViewController
16 |
17 | - (void)viewDidLoad {
18 | [super viewDidLoad];
19 | }
20 |
21 | - (void)didReceiveMemoryWarning {
22 | [super didReceiveMemoryWarning];
23 | }
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/KeyBoard/KeyBoard/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // KeyBoard
4 | //
5 | // Created by ShaoFeng on 16/8/17.
6 | // Copyright © 2016年 Cocav. 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 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 更多文章:http://blog.csdn.net/feng2qing?viewmode=list
2 | ## **前言**
3 | ### 1.由于项目需求,需要一个类似QQ/微信的聊天键盘,包括语音,emoji和发送图片,文件,位置,网上找了一番,要不功能不够完善,要不依赖太多,于是干脆自己写一个(在使用过程中如果发现什么问题或有什么建议,还望您提出来,共同进步)
4 | ### 2.微信的语音发送实现网上已经很多了,在这里打算做一个QQ语音发送的效果,此模块正在开发中....
5 |
6 | ## **DEMO效果**
7 | 
8 | ##**类的介绍**
9 | 
10 |
11 | ```
12 | InputToolbar:键盘工具条
13 | VoiceButtonView:语音模块视图
14 | EmojiButtonView:Emoji模块视图
15 | MoreButtonView:加号模块视图(相册,相机,文件,位置...)
16 | CollectionViewFlowLayout:表情键盘CollectionView布局
17 | EmpjiCollectionViewCell:表情键盘collectionViewCell
18 | UIView+Extension:UIView工具类
19 | ```
20 |
21 | ## **集成用法**
22 |
23 | ```
24 | 加头文件:
25 | #import "InputToolbar.h"
26 | 遵守协议
27 |
28 | 添加属性:
29 | @property (nonatomic,strong)InputToolbar *inputToolbar;
30 | 创建inputToolbar
31 | self.inputToolbar = [InputToolbar shareInstance];
32 | [self.view addSubview:self.inputToolbar];
33 |
34 | 输入框最大显示行数
35 | self.inputToolbar.textViewMaxVisibleLine = 4;
36 | 布局inputToolbar
37 | self.inputToolbar.width = self.view.width;
38 | self.inputToolbar.height = 49;
39 | self.inputToolbar.y = self.view.height - self.inputToolbar.height;
40 | 设定代理
41 | [self.inputToolbar setMorebuttonViewDelegate:self];
42 | 点击发送按钮回调,顺便传回输入内容
43 | __weak typeof(self) weakSelf = self;
44 | self.inputToolbar.sendContent = ^(NSObject *content){
45 |
46 | NSLog(@"发射成功☀️:---%@",content);
47 |
48 | if ([content isKindOfClass:[NSTextAttachment class]]) {
49 |
50 | [weakSelf.textView.textStorage insertAttributedString:[NSAttributedString attributedStringWithAttachment:(NSTextAttachment *)content] atIndex:weakSelf.textView.selectedRange.location];
51 |
52 | } else {
53 |
54 | weakSelf.textView.text = ((NSAttributedString *)content).string;
55 | }
56 | };
57 |
58 | self.inputToolbar.inputToolbarFrameChange = ^(CGFloat height,CGFloat orignY){
59 | _inputToolbarY = orignY;
60 | };
61 |
62 | //点击MoreButtonView中的按钮会调用此方法(根据实际需求自行增删)
63 | - (void)moreButtonView:(MoreButtonView *)moreButtonView didClickButton:(MoreButtonViewButtonType)buttonType
64 | {
65 | switch (buttonType) {
66 | case MoreButtonViewButtonTypeImages:
67 | {
68 | //发送相册操作
69 | } break;
70 |
71 | case MoreButtonViewButtonTypeCamera:
72 | {
73 | //发送相机操作
74 | } break;
75 | case MoreButtonViewButtonTypeFile:
76 | {
77 | //发送文件操作
78 | } break;
79 | //.........
80 | default:
81 | break;
82 | }
83 | }
84 | ```
85 |
--------------------------------------------------------------------------------