├── .DS_Store
├── keyboard.gif
├── BCKeyBoard
├── .DS_Store
├── image
│ ├── .DS_Store
│ ├── emoji
│ │ ├── .DS_Store
│ │ ├── faceDelete.png
│ │ └── faceDelete@2x.png
│ └── MessageToolbarImages
│ │ ├── .DS_Store
│ │ ├── Color
│ │ ├── .DS_Store
│ │ ├── chatBar_colorMore_camera@2x.png
│ │ ├── chatBar_colorMore_photo@2x.png
│ │ ├── chatBar_colorMore_video@2x.png
│ │ ├── chatBar_colorMore_audioCall@2x.png
│ │ ├── chatBar_colorMore_location@2x.png
│ │ ├── chatBar_colorMore_cameraSelected@2x.png
│ │ ├── chatBar_colorMore_photoSelected@2x.png
│ │ ├── chatBar_colorMore_videoSelected@2x.png
│ │ ├── chatBar_colorMore_locationSelected@2x.png
│ │ └── chatBar_colorMore_audioCallSelected@2x.png
│ │ ├── Gray
│ │ ├── .DS_Store
│ │ ├── chatBar_more_photo.png
│ │ ├── chatBar_more_camera.png
│ │ ├── chatBar_more_location.png
│ │ ├── chatBar_more_photo@2x.png
│ │ ├── chatBar_more_camera@2x.png
│ │ ├── chatBar_more_location@2x.png
│ │ ├── chatBar_more_photoSelected.png
│ │ ├── chatBar_more_cameraSelected.png
│ │ ├── chatBar_more_cameraSelected@2x.png
│ │ ├── chatBar_more_locationSelected.png
│ │ ├── chatBar_more_photoSelected@2x.png
│ │ └── chatBar_more_locationSelected@2x.png
│ │ ├── chatBar_face.png
│ │ ├── chatBar_more.png
│ │ ├── chatBar_face@2x.png
│ │ ├── chatBar_keyboard.png
│ │ ├── chatBar_more@2x.png
│ │ ├── chatBar_record.png
│ │ ├── chatBar_recordBg.png
│ │ ├── chatBar_record@2x.png
│ │ ├── chatBar_faceSelected.png
│ │ ├── chatBar_keyboard@2x.png
│ │ ├── chatBar_moreSelected.png
│ │ ├── chatBar_recordBg@2x.png
│ │ ├── messageToolbarBg@2x.png
│ │ ├── chatBar_faceSelected@2x.png
│ │ ├── chatBar_moreSelected@2x.png
│ │ ├── chatBar_recordSelected.png
│ │ ├── chatBar_keyboardSelected.png
│ │ ├── chatBar_recordSelected@2x.png
│ │ ├── chatBar_recordSelectedBg.png
│ │ ├── chatBar_keyboardSelected@2x.png
│ │ └── chatBar_recordSelectedBg@2x.png
├── BCTextView.h
├── Const.h
├── BCMoreView.h
├── FaceVIew
│ ├── Emoji.m
│ ├── DXFaceView.h
│ ├── FacialView.h
│ ├── Emoji.h
│ ├── DXFaceView.m
│ ├── EmojiEmoticons.h
│ ├── FacialView.m
│ └── EmojiEmoticons.m
├── BCKeyBoard.h
├── BCMoreView.m
├── BCTextView.m
└── BCKeyBoard.m
├── BCKeyBoardDemo
├── .DS_Store
├── BCKeyBoardDemo
│ ├── BCKeyBoard
│ │ ├── .DS_Store
│ │ ├── image
│ │ │ ├── .DS_Store
│ │ │ ├── emoji
│ │ │ │ ├── .DS_Store
│ │ │ │ ├── faceDelete.png
│ │ │ │ └── faceDelete@2x.png
│ │ │ └── MessageToolbarImages
│ │ │ │ ├── .DS_Store
│ │ │ │ ├── Color
│ │ │ │ ├── .DS_Store
│ │ │ │ ├── chatBar_colorMore_camera@2x.png
│ │ │ │ ├── chatBar_colorMore_photo@2x.png
│ │ │ │ ├── chatBar_colorMore_video@2x.png
│ │ │ │ ├── chatBar_colorMore_audioCall@2x.png
│ │ │ │ ├── chatBar_colorMore_location@2x.png
│ │ │ │ ├── chatBar_colorMore_cameraSelected@2x.png
│ │ │ │ ├── chatBar_colorMore_photoSelected@2x.png
│ │ │ │ ├── chatBar_colorMore_videoSelected@2x.png
│ │ │ │ ├── chatBar_colorMore_locationSelected@2x.png
│ │ │ │ └── chatBar_colorMore_audioCallSelected@2x.png
│ │ │ │ ├── Gray
│ │ │ │ ├── .DS_Store
│ │ │ │ ├── chatBar_more_photo.png
│ │ │ │ ├── chatBar_more_camera.png
│ │ │ │ ├── chatBar_more_location.png
│ │ │ │ ├── chatBar_more_photo@2x.png
│ │ │ │ ├── chatBar_more_camera@2x.png
│ │ │ │ ├── chatBar_more_location@2x.png
│ │ │ │ ├── chatBar_more_photoSelected.png
│ │ │ │ ├── chatBar_more_cameraSelected.png
│ │ │ │ ├── chatBar_more_cameraSelected@2x.png
│ │ │ │ ├── chatBar_more_locationSelected.png
│ │ │ │ ├── chatBar_more_photoSelected@2x.png
│ │ │ │ └── chatBar_more_locationSelected@2x.png
│ │ │ │ ├── chatBar_face.png
│ │ │ │ ├── chatBar_more.png
│ │ │ │ ├── chatBar_face@2x.png
│ │ │ │ ├── chatBar_keyboard.png
│ │ │ │ ├── chatBar_more@2x.png
│ │ │ │ ├── chatBar_record.png
│ │ │ │ ├── chatBar_recordBg.png
│ │ │ │ ├── chatBar_record@2x.png
│ │ │ │ ├── chatBar_faceSelected.png
│ │ │ │ ├── chatBar_keyboard@2x.png
│ │ │ │ ├── chatBar_moreSelected.png
│ │ │ │ ├── chatBar_recordBg@2x.png
│ │ │ │ ├── messageToolbarBg@2x.png
│ │ │ │ ├── chatBar_faceSelected@2x.png
│ │ │ │ ├── chatBar_moreSelected@2x.png
│ │ │ │ ├── chatBar_recordSelected.png
│ │ │ │ ├── chatBar_keyboardSelected.png
│ │ │ │ ├── chatBar_recordSelected@2x.png
│ │ │ │ ├── chatBar_recordSelectedBg.png
│ │ │ │ ├── chatBar_keyboardSelected@2x.png
│ │ │ │ └── chatBar_recordSelectedBg@2x.png
│ │ ├── BCTextView.h
│ │ ├── Const.h
│ │ ├── BCMoreView.h
│ │ ├── FaceVIew
│ │ │ ├── Emoji.m
│ │ │ ├── DXFaceView.h
│ │ │ ├── FacialView.h
│ │ │ ├── Emoji.h
│ │ │ ├── DXFaceView.m
│ │ │ ├── EmojiEmoticons.h
│ │ │ ├── FacialView.m
│ │ │ └── EmojiEmoticons.m
│ │ ├── BCKeyBoard.h
│ │ ├── BCMoreView.m
│ │ ├── BCTextView.m
│ │ └── BCKeyBoard.m
│ ├── ViewController.h
│ ├── AppDelegate.h
│ ├── main.m
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── ViewController.m
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ ├── Info.plist
│ └── AppDelegate.m
├── BCKeyBoardDemo.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcuserdata
│ │ │ └── baochao.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ ├── xcuserdata
│ │ └── baochao.xcuserdatad
│ │ │ └── xcschemes
│ │ │ ├── xcschememanagement.plist
│ │ │ └── BCKeyBoardDemo.xcscheme
│ └── project.pbxproj
├── BCKeyBoardDemoTests
│ ├── Info.plist
│ └── BCKeyBoardDemoTests.m
└── BCKeyBoardDemoUITests
│ ├── Info.plist
│ └── BCKeyBoardDemoUITests.m
└── README.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/.DS_Store
--------------------------------------------------------------------------------
/keyboard.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/keyboard.gif
--------------------------------------------------------------------------------
/BCKeyBoard/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoardDemo/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/emoji/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/emoji/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/emoji/faceDelete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/emoji/faceDelete.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/emoji/faceDelete@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/emoji/faceDelete@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_face.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_more.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_record.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_record.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more.png
--------------------------------------------------------------------------------
/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.xcworkspace/xcuserdata/baochao.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.xcworkspace/xcuserdata/baochao.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // BCKeyBoardDemo
4 | //
5 | // Created by baochao on 15/7/29.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/BCKeyBoard/BCTextView.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCTextView.h
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BCTextView : UITextView
12 | @property (nonatomic, retain) NSString *placeholder;
13 | @property (nonatomic, retain) UIColor *placeholderColor;
14 | @end
15 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // BCKeyBoardDemo
4 | //
5 | // Created by baochao on 15/7/29.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 |
16 | @end
17 |
18 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCTextView.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCTextView.h
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BCTextView : UITextView
12 | @property (nonatomic, retain) NSString *placeholder;
13 | @property (nonatomic, retain) UIColor *placeholderColor;
14 | @end
15 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // BCKeyBoardDemo
4 | //
5 | // Created by baochao on 15/12/28.
6 | // Copyright © 2015年 io.hzlzh.yunshouyi. 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 |
--------------------------------------------------------------------------------
/BCKeyBoard/Const.h:
--------------------------------------------------------------------------------
1 | //
2 | // Const.h
3 | // BCKeyBoardDemo
4 | //
5 | // Created by baochao on 15/7/21.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
10 | #define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
11 |
12 |
13 | #define kBCTextViewHeight 36 /**< 底部textView的高度 */
14 | #define kHorizontalPadding 8 /**< 横向间隔 */
15 | #define kVerticalPadding 5 /**< 纵向间隔 */
16 |
17 |
--------------------------------------------------------------------------------
/BCKeyBoard/BCMoreView.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCMoreView.h
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol BCMoreViewDelegate
12 |
13 | - (void)didselectImageView:(NSInteger)index;
14 |
15 | @end
16 |
17 | @interface BCMoreView : UIView
18 | @property (nonatomic,strong)NSArray *imageArray;
19 | @property (nonatomic,weak)id delegate;
20 | @end
21 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/Const.h:
--------------------------------------------------------------------------------
1 | //
2 | // Const.h
3 | // BCKeyBoardDemo
4 | //
5 | // Created by baochao on 15/7/21.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
10 | #define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
11 |
12 |
13 | #define kBCTextViewHeight 36 /**< 底部textView的高度 */
14 | #define kHorizontalPadding 8 /**< 横向间隔 */
15 | #define kVerticalPadding 5 /**< 纵向间隔 */
16 |
17 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCMoreView.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCMoreView.h
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol BCMoreViewDelegate
12 |
13 | - (void)didselectImageView:(NSInteger)index;
14 |
15 | @end
16 |
17 | @interface BCMoreView : UIView
18 | @property (nonatomic,strong)NSArray *imageArray;
19 | @property (nonatomic,weak)id delegate;
20 | @end
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BCKeyboard
2 | 这是一个聊天键盘,使用方法
3 |
4 | BCKeyBoard *bc = [[BCKeyBoard alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 46, [UIScreen mainScreen].bounds.size.width,46)];
5 |
6 | bc.delegate = self;
7 |
8 | bc.imageArray = @[];图片数组
9 |
10 | bc.placeholder = @"";占位文字
11 |
12 | bc.placeholderColor = ;占位文字颜色
13 |
14 | bc.backgroundColor = [UIColor clearColor];
15 |
16 | bc.currentCtr = self;当前控制器
17 |
18 | [self.view addSubview:bc];
19 |
20 | ###GitHub仓库中的图片
21 | 
22 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/Emoji.m:
--------------------------------------------------------------------------------
1 | //
2 | // Emoji.m
3 | // Emoji
4 | //
5 | // Created by Aliksandr Andrashuk on 26.10.12.
6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved.
7 | //
8 |
9 | #import "Emoji.h"
10 | #import "EmojiEmoticons.h"
11 |
12 |
13 | @implementation Emoji
14 | + (NSString *)emojiWithCode:(int)code {
15 | int sym = EMOJI_CODE_TO_SYMBOL(code);
16 | return [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
17 | }
18 | + (NSArray *)allEmoji {
19 | NSMutableArray *array = [NSMutableArray new];
20 | [array addObjectsFromArray:[EmojiEmoticons allEmoticons]];
21 | return array;
22 | }
23 | @end
24 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/Emoji.m:
--------------------------------------------------------------------------------
1 | //
2 | // Emoji.m
3 | // Emoji
4 | //
5 | // Created by Aliksandr Andrashuk on 26.10.12.
6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved.
7 | //
8 |
9 | #import "Emoji.h"
10 | #import "EmojiEmoticons.h"
11 |
12 |
13 | @implementation Emoji
14 | + (NSString *)emojiWithCode:(int)code {
15 | int sym = EMOJI_CODE_TO_SYMBOL(code);
16 | return [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
17 | }
18 | + (NSArray *)allEmoji {
19 | NSMutableArray *array = [NSMutableArray new];
20 | [array addObjectsFromArray:[EmojiEmoticons allEmoticons]];
21 | return array;
22 | }
23 | @end
24 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemoTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemoUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/xcuserdata/baochao.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | BCKeyBoardDemo.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | CBE2CEE61C30E3FA0078DC13
16 |
17 | primary
18 |
19 |
20 | CBE2CEFF1C30E3FA0078DC13
21 |
22 | primary
23 |
24 |
25 | CBE2CF0A1C30E3FA0078DC13
26 |
27 | primary
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/BCKeyBoard/BCKeyBoard.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCKeyBoard.h
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol BCKeyBoardDelegate
12 |
13 | /**
14 | 发送的文字
15 | */
16 | - (void)didSendText:(NSString *)text;
17 |
18 | /**
19 | 回调返回高度
20 | */
21 | - (void)returnHeight:(CGFloat)height;
22 |
23 | /**
24 | 回调返回的图片
25 | */
26 | - (void)returnImage:(UIImage *)image;
27 |
28 | @end
29 |
30 | @interface BCKeyBoard : UIView
31 |
32 | @property (nonatomic,weak)id delegate;
33 | @property (nonatomic,strong)NSArray *imageArray; /**< 点击加号弹出的View中的图片数组 */
34 | @property (nonatomic,strong)NSString *placeholder; /**< 占位文字 */
35 | @property (nonatomic,strong)UIColor *placeholderColor; /**< 占位文字颜色 */
36 | @property (nonatomic,strong)UIViewController *currentCtr;/**< 控制器 */
37 | @end
38 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCKeyBoard.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCKeyBoard.h
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol BCKeyBoardDelegate
12 |
13 | /**
14 | 发送的文字
15 | */
16 | - (void)didSendText:(NSString *)text;
17 |
18 | /**
19 | 回调返回高度
20 | */
21 | - (void)returnHeight:(CGFloat)height;
22 |
23 | /**
24 | 回调返回的图片
25 | */
26 | - (void)returnImage:(UIImage *)image;
27 |
28 | @end
29 |
30 | @interface BCKeyBoard : UIView
31 |
32 | @property (nonatomic,weak)id delegate;
33 | @property (nonatomic,strong)NSArray *imageArray; /**< 点击加号弹出的View中的图片数组 */
34 | @property (nonatomic,strong)NSString *placeholder; /**< 占位文字 */
35 | @property (nonatomic,strong)UIColor *placeholderColor; /**< 占位文字颜色 */
36 | @property (nonatomic,strong)UIViewController *currentCtr;
37 | @end
38 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/DXFaceView.h:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import
14 |
15 | #import "FacialView.h"
16 |
17 | @protocol DXFaceDelegate
18 |
19 | @required
20 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete;
21 | - (void)sendFace;
22 |
23 | @end
24 |
25 |
26 | @interface DXFaceView : UIView
27 |
28 | @property (nonatomic, assign) id delegate;
29 |
30 | - (BOOL)stringIsFace:(NSString *)string;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/DXFaceView.h:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import
14 |
15 | #import "FacialView.h"
16 |
17 | @protocol DXFaceDelegate
18 |
19 | @required
20 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete;
21 | - (void)sendFace;
22 |
23 | @end
24 |
25 |
26 | @interface DXFaceView : UIView
27 |
28 | @property (nonatomic, assign) id delegate;
29 |
30 | - (BOOL)stringIsFace:(NSString *)string;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/FacialView.h:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import
14 |
15 | @protocol FacialViewDelegate
16 |
17 | @optional
18 | -(void)selectedFacialView:(NSString*)str;
19 | -(void)deleteSelected:(NSString *)str;
20 | -(void)sendFace;
21 |
22 | @end
23 |
24 |
25 | @interface FacialView : UIView
26 | {
27 | NSArray *_faces;
28 | }
29 |
30 | @property(nonatomic) id delegate;
31 |
32 | @property(strong, nonatomic, readonly) NSArray *faces;
33 |
34 | -(void)loadFacialView:(int)page size:(CGSize)size;
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/FacialView.h:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import
14 |
15 | @protocol FacialViewDelegate
16 |
17 | @optional
18 | -(void)selectedFacialView:(NSString*)str;
19 | -(void)deleteSelected:(NSString *)str;
20 | -(void)sendFace;
21 |
22 | @end
23 |
24 |
25 | @interface FacialView : UIView
26 | {
27 | NSArray *_faces;
28 | }
29 |
30 | @property(nonatomic) id delegate;
31 |
32 | @property(strong, nonatomic, readonly) NSArray *faces;
33 |
34 | -(void)loadFacialView:(int)page size:(CGSize)size;
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/Emoji.h:
--------------------------------------------------------------------------------
1 | /*!
2 | @header emoji.h
3 | @abstract 提供对iOS内置表情编码处理
4 | @author EaseMob Inc.
5 | @version 1.00 2014/01/01 Creation (1.00)
6 | */
7 |
8 | #import
9 |
10 | #define MAKE_Q(x) @#x
11 | #define MAKE_EM(x,y) MAKE_Q(x##y)
12 |
13 | #pragma clang diagnostic push
14 | #pragma clang diagnostic ignored "-Wunicode"
15 | #define MAKE_EMOJI(x) MAKE_EM(\U000,x)
16 | #pragma clang diagnostic pop
17 |
18 | #define EMOJI_METHOD(x,y) + (NSString *)x { return MAKE_EMOJI(y); }
19 | #define EMOJI_HMETHOD(x) + (NSString *)x;
20 | #define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);
21 |
22 | /*!
23 | @class
24 | @brief iOS内置表情编码处理类
25 | */
26 | @interface Emoji : NSObject
27 |
28 | /*!
29 | @method
30 | @brief unicode编码转换为iOS内置表情字符串
31 | @discussion
32 | @param code iOS内置表情对应的unicode编码值
33 | @result iOS内置表情字符串
34 | */
35 | + (NSString *)emojiWithCode:(int)code;
36 |
37 | /*!
38 | @method
39 | @brief 获取所有iOS内置表情
40 | @discussion
41 | @result iOS表情字符串数组
42 | */
43 | + (NSArray *)allEmoji;
44 | @end
45 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemoTests/BCKeyBoardDemoTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCKeyBoardDemoTests.m
3 | // BCKeyBoardDemoTests
4 | //
5 | // Created by baochao on 15/12/28.
6 | // Copyright © 2015年 io.hzlzh.yunshouyi. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BCKeyBoardDemoTests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation BCKeyBoardDemoTests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 | // Put setup code here. This method is called before the invocation of each test method in the class.
20 | }
21 |
22 | - (void)tearDown {
23 | // Put teardown code here. This method is called after the invocation of each test method in the class.
24 | [super tearDown];
25 | }
26 |
27 | - (void)testExample {
28 | // This is an example of a functional test case.
29 | // Use XCTAssert and related functions to verify your tests produce the correct results.
30 | }
31 |
32 | - (void)testPerformanceExample {
33 | // This is an example of a performance test case.
34 | [self measureBlock:^{
35 | // Put the code you want to measure the time of here.
36 | }];
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/Emoji.h:
--------------------------------------------------------------------------------
1 | /*!
2 | @header emoji.h
3 | @abstract 提供对iOS内置表情编码处理
4 | @author EaseMob Inc.
5 | @version 1.00 2014/01/01 Creation (1.00)
6 | */
7 |
8 | #import
9 |
10 | #define MAKE_Q(x) @#x
11 | #define MAKE_EM(x,y) MAKE_Q(x##y)
12 |
13 | #pragma clang diagnostic push
14 | #pragma clang diagnostic ignored "-Wunicode"
15 | #define MAKE_EMOJI(x) MAKE_EM(\U000,x)
16 | #pragma clang diagnostic pop
17 |
18 | #define EMOJI_METHOD(x,y) + (NSString *)x { return MAKE_EMOJI(y); }
19 | #define EMOJI_HMETHOD(x) + (NSString *)x;
20 | #define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);
21 |
22 | /*!
23 | @class
24 | @brief iOS内置表情编码处理类
25 | */
26 | @interface Emoji : NSObject
27 |
28 | /*!
29 | @method
30 | @brief unicode编码转换为iOS内置表情字符串
31 | @discussion
32 | @param code iOS内置表情对应的unicode编码值
33 | @result iOS内置表情字符串
34 | */
35 | + (NSString *)emojiWithCode:(int)code;
36 |
37 | /*!
38 | @method
39 | @brief 获取所有iOS内置表情
40 | @discussion
41 | @result iOS表情字符串数组
42 | */
43 | + (NSArray *)allEmoji;
44 | @end
45 |
--------------------------------------------------------------------------------
/BCKeyBoard/BCMoreView.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCMoreView.m
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import "BCMoreView.h"
10 |
11 | @implementation BCMoreView
12 | - (instancetype)initWithFrame:(CGRect)frame{
13 | if(self = [super initWithFrame:frame]){
14 |
15 | }
16 | return self;
17 | }
18 | - (void)setImageArray:(NSArray *)imageArray
19 | {
20 | CGFloat padding = ([UIScreen mainScreen].bounds.size.width - 42*4)/5;
21 | for(int i=0;i
10 |
11 | @interface BCKeyBoardDemoUITests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation BCKeyBoardDemoUITests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 |
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 |
22 | // In UI tests it is usually best to stop immediately when a failure occurs.
23 | self.continueAfterFailure = NO;
24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
25 | [[[XCUIApplication alloc] init] launch];
26 |
27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
28 | }
29 |
30 | - (void)tearDown {
31 | // Put teardown code here. This method is called after the invocation of each test method in the class.
32 | [super tearDown];
33 | }
34 |
35 | - (void)testExample {
36 | // Use recording to get started writing UI tests.
37 | // Use XCTAssert and related functions to verify your tests produce the correct results.
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // BCKeyBoardDemo
4 | //
5 | // Created by baochao on 15/7/29.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import "BCKeyBoard.h"
11 | @interface ViewController ()
12 |
13 | @end
14 |
15 | @implementation ViewController
16 |
17 | - (void)viewDidLoad {
18 | [super viewDidLoad];
19 | NSArray *array = @[@"chatBar_colorMore_photoSelected",@"chatBar_colorMore_audioCall",@"chatBar_colorMore_location",@"chatBar_colorMore_video.png",@"chatBar_colorMore_video.png",@"chatBar_colorMore_video.png"];
20 | BCKeyBoard *bc = [[BCKeyBoard alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 46, [UIScreen mainScreen].bounds.size.width,46)];
21 | bc.delegate = self;
22 | bc.imageArray = array;
23 | bc.placeholder = @"我来说几句";
24 | bc.currentCtr = self;
25 | bc.placeholderColor = [UIColor colorWithRed:133/255 green:133/255 blue:133/255 alpha:0.5];
26 | bc.backgroundColor = [UIColor clearColor];
27 | [self.view addSubview:bc];
28 | }
29 | - (void)didSendText:(NSString *)text
30 | {
31 | NSLog(@"%@",text);
32 | }
33 | - (void)returnHeight:(CGFloat)height
34 | {
35 | NSLog(@"%f",height);
36 | }
37 | - (void)returnImage:(UIImage *)image{
38 | UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
39 | imageView.image = image;
40 | [self.view addSubview:imageView];
41 | }
42 | @end
43 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/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 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/BCKeyBoard/BCTextView.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCTextView.m
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import "BCTextView.h"
10 |
11 | @interface BCTextView ()
12 |
13 | @end
14 |
15 | @implementation BCTextView
16 |
17 | - (id)initWithFrame:(CGRect)frame
18 | {
19 |
20 | self = [super initWithFrame:frame];
21 | if (self) {
22 |
23 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:)
24 | name:UITextViewTextDidChangeNotification
25 | object:nil];
26 |
27 | self.autoresizesSubviews = NO;
28 | self.placeholder = @"";
29 | self.placeholderColor = [UIColor lightGrayColor];
30 |
31 | }
32 | return self;
33 | }
34 | - (void)drawRect:(CGRect)rect
35 | {
36 | //内容为空时才绘制placeholder
37 | if ([self.text isEqualToString:@""]) {
38 | CGRect placeholderRect;
39 | placeholderRect.origin.y = 8;
40 | placeholderRect.size.height = CGRectGetHeight(self.frame)-8;
41 |
42 | placeholderRect.origin.x = 5;
43 | placeholderRect.size.width = CGRectGetWidth(self.frame)-5;
44 |
45 | [self.placeholderColor set];
46 | [self.placeholder drawInRect:placeholderRect
47 | withFont:self.font
48 | lineBreakMode:NSLineBreakByWordWrapping
49 | alignment:NSTextAlignmentLeft];
50 | }
51 | }
52 | - (void)textChanged:(NSNotification *)not
53 | {
54 | [self setNeedsDisplay];
55 | }
56 |
57 | - (void)setText:(NSString *)text
58 | {
59 | [super setText:text];
60 | [self setNeedsDisplay];
61 | }
62 | @end
63 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/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 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/DXFaceView.m:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import "DXFaceView.h"
14 |
15 | @interface DXFaceView ()
16 | {
17 | FacialView *_facialView;
18 | }
19 |
20 | @end
21 |
22 | @implementation DXFaceView
23 |
24 | - (id)initWithFrame:(CGRect)frame
25 | {
26 | self = [super initWithFrame:frame];
27 | if (self) {
28 | _facialView = [[FacialView alloc] initWithFrame: CGRectMake(5, 5, frame.size.width - 10, self.bounds.size.height - 10)];
29 | [_facialView loadFacialView:1 size:CGSizeMake(30, 30)];
30 | _facialView.delegate = self;
31 | [self addSubview:_facialView];
32 | }
33 | return self;
34 | }
35 |
36 | #pragma mark - FacialViewDelegate
37 |
38 | -(void)selectedFacialView:(NSString*)str{
39 | if (_delegate) {
40 | [_delegate selectedFacialView:str isDelete:NO];
41 | }
42 | }
43 |
44 | -(void)deleteSelected:(NSString *)str{
45 | if (_delegate) {
46 | [_delegate selectedFacialView:str isDelete:YES];
47 | }
48 | }
49 |
50 | - (void)sendFace
51 | {
52 | if (_delegate) {
53 | [_delegate sendFace];
54 | }
55 | }
56 |
57 | #pragma mark - public
58 |
59 | - (BOOL)stringIsFace:(NSString *)string
60 | {
61 | if ([_facialView.faces containsObject:string]) {
62 | return YES;
63 | }
64 |
65 | return NO;
66 | }
67 |
68 | @end
69 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/DXFaceView.m:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import "DXFaceView.h"
14 |
15 | @interface DXFaceView ()
16 | {
17 | FacialView *_facialView;
18 | }
19 |
20 | @end
21 |
22 | @implementation DXFaceView
23 |
24 | - (id)initWithFrame:(CGRect)frame
25 | {
26 | self = [super initWithFrame:frame];
27 | if (self) {
28 | _facialView = [[FacialView alloc] initWithFrame: CGRectMake(5, 5, frame.size.width - 10, self.bounds.size.height - 10)];
29 | [_facialView loadFacialView:1 size:CGSizeMake(30, 30)];
30 | _facialView.delegate = self;
31 | [self addSubview:_facialView];
32 | }
33 | return self;
34 | }
35 |
36 | #pragma mark - FacialViewDelegate
37 |
38 | -(void)selectedFacialView:(NSString*)str{
39 | if (_delegate) {
40 | [_delegate selectedFacialView:str isDelete:NO];
41 | }
42 | }
43 |
44 | -(void)deleteSelected:(NSString *)str{
45 | if (_delegate) {
46 | [_delegate selectedFacialView:str isDelete:YES];
47 | }
48 | }
49 |
50 | - (void)sendFace
51 | {
52 | if (_delegate) {
53 | [_delegate sendFace];
54 | }
55 | }
56 |
57 | #pragma mark - public
58 |
59 | - (BOOL)stringIsFace:(NSString *)string
60 | {
61 | if ([_facialView.faces containsObject:string]) {
62 | return YES;
63 | }
64 |
65 | return NO;
66 | }
67 |
68 | @end
69 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCTextView.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCTextView.m
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import "BCTextView.h"
10 |
11 | @interface BCTextView ()
12 |
13 | @end
14 |
15 | @implementation BCTextView
16 |
17 | - (instancetype)initWithFrame:(CGRect)frame
18 | {
19 |
20 | self = [super initWithFrame:frame];
21 | if (self) {
22 |
23 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:)
24 | name:UITextViewTextDidChangeNotification
25 | object:nil];
26 |
27 | self.autoresizesSubviews = NO;
28 | //默认字和颜色
29 | self.placeholder = @"";
30 | self.placeholderColor = [UIColor lightGrayColor];
31 |
32 | }
33 | return self;
34 | }
35 | - (void)drawRect:(CGRect)rect
36 | {
37 | //内容为空时才绘制placeholder
38 | if ([self.text isEqualToString:@""]) {
39 | CGRect placeholderRect;
40 | placeholderRect.origin.y = 8;
41 | placeholderRect.size.height = CGRectGetHeight(self.frame)-8;
42 |
43 | placeholderRect.origin.x = 5;
44 | placeholderRect.size.width = CGRectGetWidth(self.frame)-5;
45 |
46 | [self.placeholderColor set];
47 | [self.placeholder drawInRect:placeholderRect
48 | withFont:self.font
49 | lineBreakMode:NSLineBreakByWordWrapping
50 | alignment:NSTextAlignmentLeft];
51 | }
52 | }
53 | - (void)textChanged:(NSNotification *)not
54 | {
55 | [self setNeedsDisplay];
56 | }
57 |
58 | - (void)setText:(NSString *)text
59 | {
60 | [super setText:text];
61 | [self setNeedsDisplay];
62 | }
63 | @end
64 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // BCKeyBoardDemo
4 | //
5 | // Created by baochao on 15/7/29.
6 | // Copyright (c) 2015年 baochao. 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 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/EmojiEmoticons.h:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiEmoticons.h
3 | // Emoji
4 | //
5 | // Created by Aliksandr Andrashuk on 26.10.12.
6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "Emoji.h"
11 |
12 | @interface EmojiEmoticons : NSObject
13 |
14 | + (NSArray *)allEmoticons;
15 |
16 | EMOJI_HMETHOD(grinningFace);
17 | EMOJI_HMETHOD(grinningFaceWithSmilingEyes);
18 | EMOJI_HMETHOD(faceWithTearsOfJoy);
19 | EMOJI_HMETHOD(smilingFaceWithOpenMouth);
20 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndSmilingEyes);
21 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndColdSweat);
22 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes);
23 | EMOJI_HMETHOD(smilingFaceWithHalo);
24 | EMOJI_HMETHOD(smilingFaceWithHorns);
25 | EMOJI_HMETHOD(winkingFace);
26 | EMOJI_HMETHOD(smilingFaceWithSmilingEyes);
27 | EMOJI_HMETHOD(faceSavouringDeliciousFood);
28 | EMOJI_HMETHOD(relievedFace);
29 | EMOJI_HMETHOD(smilingFaceWithHeartShapedEyes);
30 | EMOJI_HMETHOD(smilingFaceWithSunglasses);
31 | EMOJI_HMETHOD(smirkingFace);
32 | EMOJI_HMETHOD(neutralFace);
33 | EMOJI_HMETHOD(expressionlessFace);
34 | EMOJI_HMETHOD(unamusedFace);
35 | EMOJI_HMETHOD(faceWithColdSweat);
36 | EMOJI_HMETHOD(pensiveFace);
37 | EMOJI_HMETHOD(confusedFace);
38 | EMOJI_HMETHOD(confoundedFace);
39 | EMOJI_HMETHOD(kissingFace);
40 | EMOJI_HMETHOD(faceThrowingAKiss);
41 | EMOJI_HMETHOD(kissingFaceWithSmilingEyes);
42 | EMOJI_HMETHOD(kissingFaceWithClosedEyes);
43 | EMOJI_HMETHOD(faceWithStuckOutTongue);
44 | EMOJI_HMETHOD(faceWithStuckOutTongueAndWinkingEye);
45 | EMOJI_HMETHOD(faceWithStuckOutTongueAndTightlyClosedEyes);
46 | EMOJI_HMETHOD(disappointedFace);
47 | EMOJI_HMETHOD(worriedFace);
48 | EMOJI_HMETHOD(angryFace);
49 | EMOJI_HMETHOD(poutingFace);
50 | EMOJI_HMETHOD(cryingFace);
51 | EMOJI_HMETHOD(perseveringFace);
52 | EMOJI_HMETHOD(faceWithLookOfTriumph);
53 | EMOJI_HMETHOD(disappointedButRelievedFace);
54 | EMOJI_HMETHOD(frowningFaceWithOpenMouth);
55 | EMOJI_HMETHOD(anguishedFace);
56 | EMOJI_HMETHOD(fearfulFace);
57 | EMOJI_HMETHOD(wearyFace);
58 | EMOJI_HMETHOD(sleepyFace);
59 | EMOJI_HMETHOD(tiredFace);
60 | EMOJI_HMETHOD(grimacingFace);
61 | EMOJI_HMETHOD(loudlyCryingFace);
62 | EMOJI_HMETHOD(faceWithOpenMouth);
63 | EMOJI_HMETHOD(hushedFace);
64 | EMOJI_HMETHOD(faceWithOpenMouthAndColdSweat);
65 | EMOJI_HMETHOD(faceScreamingInFear);
66 | EMOJI_HMETHOD(astonishedFace);
67 | EMOJI_HMETHOD(flushedFace);
68 | EMOJI_HMETHOD(sleepingFace);
69 | EMOJI_HMETHOD(dizzyFace);
70 | EMOJI_HMETHOD(faceWithoutMouth);
71 | EMOJI_HMETHOD(faceWithMedicalMask);
72 | EMOJI_HMETHOD(grinningCatFaceWithSmilingEyes);
73 | EMOJI_HMETHOD(catFaceWithTearsOfJoy);
74 | EMOJI_HMETHOD(smilingCatFaceWithOpenMouth);
75 | EMOJI_HMETHOD(smilingCatFaceWithHeartShapedEyes);
76 | EMOJI_HMETHOD(catFaceWithWrySmile);
77 | EMOJI_HMETHOD(kissingCatFaceWithClosedEyes);
78 | EMOJI_HMETHOD(poutingCatFace);
79 | EMOJI_HMETHOD(cryingCatFace);
80 | EMOJI_HMETHOD(wearyCatFace);
81 | EMOJI_HMETHOD(faceWithNoGoodGesture);
82 | EMOJI_HMETHOD(faceWithOkGesture);
83 | EMOJI_HMETHOD(personBowingDeeply);
84 | EMOJI_HMETHOD(seeNoEvilMonkey);
85 | EMOJI_HMETHOD(hearNoEvilMonkey);
86 | EMOJI_HMETHOD(speakNoEvilMonkey);
87 | EMOJI_HMETHOD(happyPersonRaisingOneHand);
88 | EMOJI_HMETHOD(personRaisingBothHandsInCelebration);
89 | EMOJI_HMETHOD(personFrowning);
90 | EMOJI_HMETHOD(personWithPoutingFace);
91 | EMOJI_HMETHOD(personWithFoldedHands);
92 | @end
93 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/EmojiEmoticons.h:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiEmoticons.h
3 | // Emoji
4 | //
5 | // Created by Aliksandr Andrashuk on 26.10.12.
6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "Emoji.h"
11 |
12 | @interface EmojiEmoticons : NSObject
13 |
14 | + (NSArray *)allEmoticons;
15 |
16 | EMOJI_HMETHOD(grinningFace);
17 | EMOJI_HMETHOD(grinningFaceWithSmilingEyes);
18 | EMOJI_HMETHOD(faceWithTearsOfJoy);
19 | EMOJI_HMETHOD(smilingFaceWithOpenMouth);
20 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndSmilingEyes);
21 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndColdSweat);
22 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes);
23 | EMOJI_HMETHOD(smilingFaceWithHalo);
24 | EMOJI_HMETHOD(smilingFaceWithHorns);
25 | EMOJI_HMETHOD(winkingFace);
26 | EMOJI_HMETHOD(smilingFaceWithSmilingEyes);
27 | EMOJI_HMETHOD(faceSavouringDeliciousFood);
28 | EMOJI_HMETHOD(relievedFace);
29 | EMOJI_HMETHOD(smilingFaceWithHeartShapedEyes);
30 | EMOJI_HMETHOD(smilingFaceWithSunglasses);
31 | EMOJI_HMETHOD(smirkingFace);
32 | EMOJI_HMETHOD(neutralFace);
33 | EMOJI_HMETHOD(expressionlessFace);
34 | EMOJI_HMETHOD(unamusedFace);
35 | EMOJI_HMETHOD(faceWithColdSweat);
36 | EMOJI_HMETHOD(pensiveFace);
37 | EMOJI_HMETHOD(confusedFace);
38 | EMOJI_HMETHOD(confoundedFace);
39 | EMOJI_HMETHOD(kissingFace);
40 | EMOJI_HMETHOD(faceThrowingAKiss);
41 | EMOJI_HMETHOD(kissingFaceWithSmilingEyes);
42 | EMOJI_HMETHOD(kissingFaceWithClosedEyes);
43 | EMOJI_HMETHOD(faceWithStuckOutTongue);
44 | EMOJI_HMETHOD(faceWithStuckOutTongueAndWinkingEye);
45 | EMOJI_HMETHOD(faceWithStuckOutTongueAndTightlyClosedEyes);
46 | EMOJI_HMETHOD(disappointedFace);
47 | EMOJI_HMETHOD(worriedFace);
48 | EMOJI_HMETHOD(angryFace);
49 | EMOJI_HMETHOD(poutingFace);
50 | EMOJI_HMETHOD(cryingFace);
51 | EMOJI_HMETHOD(perseveringFace);
52 | EMOJI_HMETHOD(faceWithLookOfTriumph);
53 | EMOJI_HMETHOD(disappointedButRelievedFace);
54 | EMOJI_HMETHOD(frowningFaceWithOpenMouth);
55 | EMOJI_HMETHOD(anguishedFace);
56 | EMOJI_HMETHOD(fearfulFace);
57 | EMOJI_HMETHOD(wearyFace);
58 | EMOJI_HMETHOD(sleepyFace);
59 | EMOJI_HMETHOD(tiredFace);
60 | EMOJI_HMETHOD(grimacingFace);
61 | EMOJI_HMETHOD(loudlyCryingFace);
62 | EMOJI_HMETHOD(faceWithOpenMouth);
63 | EMOJI_HMETHOD(hushedFace);
64 | EMOJI_HMETHOD(faceWithOpenMouthAndColdSweat);
65 | EMOJI_HMETHOD(faceScreamingInFear);
66 | EMOJI_HMETHOD(astonishedFace);
67 | EMOJI_HMETHOD(flushedFace);
68 | EMOJI_HMETHOD(sleepingFace);
69 | EMOJI_HMETHOD(dizzyFace);
70 | EMOJI_HMETHOD(faceWithoutMouth);
71 | EMOJI_HMETHOD(faceWithMedicalMask);
72 | EMOJI_HMETHOD(grinningCatFaceWithSmilingEyes);
73 | EMOJI_HMETHOD(catFaceWithTearsOfJoy);
74 | EMOJI_HMETHOD(smilingCatFaceWithOpenMouth);
75 | EMOJI_HMETHOD(smilingCatFaceWithHeartShapedEyes);
76 | EMOJI_HMETHOD(catFaceWithWrySmile);
77 | EMOJI_HMETHOD(kissingCatFaceWithClosedEyes);
78 | EMOJI_HMETHOD(poutingCatFace);
79 | EMOJI_HMETHOD(cryingCatFace);
80 | EMOJI_HMETHOD(wearyCatFace);
81 | EMOJI_HMETHOD(faceWithNoGoodGesture);
82 | EMOJI_HMETHOD(faceWithOkGesture);
83 | EMOJI_HMETHOD(personBowingDeeply);
84 | EMOJI_HMETHOD(seeNoEvilMonkey);
85 | EMOJI_HMETHOD(hearNoEvilMonkey);
86 | EMOJI_HMETHOD(speakNoEvilMonkey);
87 | EMOJI_HMETHOD(happyPersonRaisingOneHand);
88 | EMOJI_HMETHOD(personRaisingBothHandsInCelebration);
89 | EMOJI_HMETHOD(personFrowning);
90 | EMOJI_HMETHOD(personWithPoutingFace);
91 | EMOJI_HMETHOD(personWithFoldedHands);
92 | @end
93 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/FacialView.m:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import "FacialView.h"
14 | #import "Emoji.h"
15 |
16 | @interface FacialView ()
17 |
18 | @end
19 |
20 | @implementation FacialView
21 |
22 | - (id)initWithFrame:(CGRect)frame
23 | {
24 | self = [super initWithFrame:frame];
25 | if (self) {
26 | _faces = [Emoji allEmoji];
27 | }
28 | return self;
29 | }
30 |
31 |
32 | //给faces设置位置
33 | -(void)loadFacialView:(int)page size:(CGSize)size
34 | {
35 | int maxRow = 5;
36 | int maxCol = 8;
37 | CGFloat itemWidth = self.frame.size.width / maxCol;
38 | CGFloat itemHeight = self.frame.size.height / maxRow;
39 |
40 | UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
41 | [deleteButton setBackgroundColor:[UIColor clearColor]];
42 | [deleteButton setFrame:CGRectMake((maxCol - 1) * itemWidth, (maxRow - 1) * itemHeight, itemWidth, itemHeight)];
43 | [deleteButton setImage:[UIImage imageNamed:@"faceDelete"] forState:UIControlStateNormal];
44 | deleteButton.tag = 10000;
45 | [deleteButton addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside];
46 | [self addSubview:deleteButton];
47 |
48 | UIButton *sendButton = [UIButton buttonWithType:UIButtonTypeCustom];
49 | [sendButton setTitle:NSLocalizedString(@"send", @"Send") forState:UIControlStateNormal];
50 | [sendButton setFrame:CGRectMake((maxCol - 2) * itemWidth+20, (maxRow - 1) * itemHeight + 5, itemWidth + 10, itemHeight - 10)];
51 | [sendButton addTarget:self action:@selector(sendAction:) forControlEvents:UIControlEventTouchUpInside];
52 | [sendButton setBackgroundColor:[UIColor colorWithRed:10 / 255.0 green:82 / 255.0 blue:104 / 255.0 alpha:1.0]];
53 | [self addSubview:sendButton];
54 |
55 | for (int row = 0; row < maxRow; row++) {
56 | for (int col = 0; col < maxCol; col++) {
57 | int index = row * maxCol + col;
58 | if (index < [_faces count]) {
59 | UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
60 | [button setBackgroundColor:[UIColor clearColor]];
61 | [button setFrame:CGRectMake(col * itemWidth, row * itemHeight, itemWidth, itemHeight)];
62 | [button.titleLabel setFont:[UIFont fontWithName:@"AppleColorEmoji" size:29.0]];
63 | [button setTitle: [_faces objectAtIndex:(row * maxCol + col)] forState:UIControlStateNormal];
64 | button.tag = row * maxCol + col;
65 | [button addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside];
66 | [self addSubview:button];
67 | }
68 | else{
69 | break;
70 | }
71 | }
72 | }
73 | }
74 |
75 |
76 | -(void)selected:(UIButton*)bt
77 | {
78 | if (bt.tag == 10000 && _delegate) {
79 | [_delegate deleteSelected:nil];
80 | }else{
81 | NSString *str = [_faces objectAtIndex:bt.tag];
82 | if (_delegate) {
83 | [_delegate selectedFacialView:str];
84 | }
85 | }
86 | }
87 |
88 | - (void)sendAction:(id)sender
89 | {
90 | if (_delegate) {
91 | [_delegate sendFace];
92 | }
93 | }
94 |
95 | @end
96 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/FacialView.m:
--------------------------------------------------------------------------------
1 | /************************************************************
2 | * * EaseMob CONFIDENTIAL
3 | * __________________
4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved.
5 | *
6 | * NOTICE: All information contained herein is, and remains
7 | * the property of EaseMob Technologies.
8 | * Dissemination of this information or reproduction of this material
9 | * is strictly forbidden unless prior written permission is obtained
10 | * from EaseMob Technologies.
11 | */
12 |
13 | #import "FacialView.h"
14 | #import "Emoji.h"
15 |
16 | @interface FacialView ()
17 |
18 | @end
19 |
20 | @implementation FacialView
21 |
22 | - (id)initWithFrame:(CGRect)frame
23 | {
24 | self = [super initWithFrame:frame];
25 | if (self) {
26 | _faces = [Emoji allEmoji];
27 | }
28 | return self;
29 | }
30 |
31 |
32 | //给faces设置位置
33 | -(void)loadFacialView:(int)page size:(CGSize)size
34 | {
35 | int maxRow = 5;
36 | int maxCol = 8;
37 | CGFloat itemWidth = self.frame.size.width / maxCol;
38 | CGFloat itemHeight = self.frame.size.height / maxRow;
39 |
40 | UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
41 | [deleteButton setBackgroundColor:[UIColor clearColor]];
42 | [deleteButton setFrame:CGRectMake((maxCol - 1) * itemWidth, (maxRow - 1) * itemHeight, itemWidth, itemHeight)];
43 | [deleteButton setImage:[UIImage imageNamed:@"faceDelete"] forState:UIControlStateNormal];
44 | deleteButton.tag = 10000;
45 | [deleteButton addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside];
46 | [self addSubview:deleteButton];
47 |
48 | UIButton *sendButton = [UIButton buttonWithType:UIButtonTypeCustom];
49 | [sendButton setTitle:NSLocalizedString(@"send", @"Send") forState:UIControlStateNormal];
50 | [sendButton setFrame:CGRectMake((maxCol - 2) * itemWidth - 10, (maxRow - 1) * itemHeight + 5, itemWidth + 10, itemHeight - 10)];
51 | [sendButton addTarget:self action:@selector(sendAction:) forControlEvents:UIControlEventTouchUpInside];
52 | [sendButton setBackgroundColor:[UIColor colorWithRed:10 / 255.0 green:82 / 255.0 blue:104 / 255.0 alpha:1.0]];
53 | [self addSubview:sendButton];
54 |
55 | for (int row = 0; row < maxRow; row++) {
56 | for (int col = 0; col < maxCol; col++) {
57 | int index = row * maxCol + col;
58 | if (index < [_faces count]) {
59 | UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
60 | [button setBackgroundColor:[UIColor clearColor]];
61 | [button setFrame:CGRectMake(col * itemWidth, row * itemHeight, itemWidth, itemHeight)];
62 | [button.titleLabel setFont:[UIFont fontWithName:@"AppleColorEmoji" size:29.0]];
63 | [button setTitle: [_faces objectAtIndex:(row * maxCol + col)] forState:UIControlStateNormal];
64 | button.tag = row * maxCol + col;
65 | [button addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside];
66 | [self addSubview:button];
67 | }
68 | else{
69 | break;
70 | }
71 | }
72 | }
73 | }
74 |
75 |
76 | -(void)selected:(UIButton*)bt
77 | {
78 | if (bt.tag == 10000 && _delegate) {
79 | [_delegate deleteSelected:nil];
80 | }else{
81 | NSString *str = [_faces objectAtIndex:bt.tag];
82 | if (_delegate) {
83 | [_delegate selectedFacialView:str];
84 | }
85 | }
86 | }
87 |
88 | - (void)sendAction:(id)sender
89 | {
90 | if (_delegate) {
91 | [_delegate sendFace];
92 | }
93 | }
94 |
95 | @end
96 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/xcuserdata/baochao.xcuserdatad/xcschemes/BCKeyBoardDemo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
43 |
49 |
50 |
51 |
52 |
53 |
59 |
60 |
61 |
62 |
63 |
64 |
74 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
95 |
101 |
102 |
103 |
104 |
106 |
107 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/BCKeyBoard/FaceVIew/EmojiEmoticons.m:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiEmoticons.m
3 | // Emoji
4 | //
5 | // Created by Aliksandr Andrashuk on 26.10.12.
6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved.
7 | //
8 |
9 | #import "EmojiEmoticons.h"
10 |
11 | @implementation EmojiEmoticons
12 |
13 | + (NSArray *)allEmoticons {
14 | NSMutableArray *array = [NSMutableArray new];
15 | NSMutableArray * localAry = [[NSMutableArray alloc] initWithObjects:
16 | [Emoji emojiWithCode:0x1F60a],
17 | [Emoji emojiWithCode:0x1F603],
18 | [Emoji emojiWithCode:0x1F609],
19 | [Emoji emojiWithCode:0x1F62e],
20 | [Emoji emojiWithCode:0x1F60b],
21 | [Emoji emojiWithCode:0x1F60e],
22 | [Emoji emojiWithCode:0x1F621],
23 | [Emoji emojiWithCode:0x1F616],
24 | [Emoji emojiWithCode:0x1F633],
25 | [Emoji emojiWithCode:0x1F61e],
26 | [Emoji emojiWithCode:0x1F62d],
27 | [Emoji emojiWithCode:0x1F610],
28 | [Emoji emojiWithCode:0x1F607],
29 | [Emoji emojiWithCode:0x1F62c],
30 | [Emoji emojiWithCode:0x1F606],
31 | [Emoji emojiWithCode:0x1F631],
32 | [Emoji emojiWithCode:0x1F385],
33 | [Emoji emojiWithCode:0x1F634],
34 | [Emoji emojiWithCode:0x1F615],
35 | [Emoji emojiWithCode:0x1F637],
36 | [Emoji emojiWithCode:0x1F62f],
37 | [Emoji emojiWithCode:0x1F60f],
38 | [Emoji emojiWithCode:0x1F611],
39 | [Emoji emojiWithCode:0x1F496],
40 | [Emoji emojiWithCode:0x1F494],
41 | [Emoji emojiWithCode:0x1F319],
42 | [Emoji emojiWithCode:0x1f31f],
43 | [Emoji emojiWithCode:0x1f31e],
44 | [Emoji emojiWithCode:0x1F308],
45 | [Emoji emojiWithCode:0x1F60d],
46 | [Emoji emojiWithCode:0x1F61a],
47 | [Emoji emojiWithCode:0x1F48b],
48 | [Emoji emojiWithCode:0x1F339],
49 | [Emoji emojiWithCode:0x1F342],
50 | [Emoji emojiWithCode:0x1F44d],
51 |
52 | /*[Emoji emojiWithCode:0x1F602],
53 | [Emoji emojiWithCode:0x1F603],
54 | [Emoji emojiWithCode:0x1F604],
55 | [Emoji emojiWithCode:0x1F609],
56 | [Emoji emojiWithCode:0x1F613],
57 | [Emoji emojiWithCode:0x1F614],
58 | [Emoji emojiWithCode:0x1F616],
59 | [Emoji emojiWithCode:0x1F618],
60 | [Emoji emojiWithCode:0x1F61a],
61 | [Emoji emojiWithCode:0x1F61c],
62 | [Emoji emojiWithCode:0x1F61d],
63 | [Emoji emojiWithCode:0x1F61e],
64 | [Emoji emojiWithCode:0x1F620],
65 | [Emoji emojiWithCode:0x1F621],
66 | [Emoji emojiWithCode:0x1F622],
67 | [Emoji emojiWithCode:0x1F623],
68 | [Emoji emojiWithCode:0x1F628],
69 | [Emoji emojiWithCode:0x1F62a],
70 | [Emoji emojiWithCode:0x1F62d],
71 | [Emoji emojiWithCode:0x1F630],
72 | [Emoji emojiWithCode:0x1F631],
73 | [Emoji emojiWithCode:0x1F632],
74 | [Emoji emojiWithCode:0x1F633],
75 | [Emoji emojiWithCode:0x1F645],
76 | [Emoji emojiWithCode:0x1F646],
77 | [Emoji emojiWithCode:0x1F647],
78 | [Emoji emojiWithCode:0x1F64c],
79 | [Emoji emojiWithCode:0x1F6a5],
80 | [Emoji emojiWithCode:0x1F6a7],
81 | [Emoji emojiWithCode:0x1F6b2],
82 | [Emoji emojiWithCode:0x1F6b6],
83 | [Emoji emojiWithCode:0x1F302],
84 | [Emoji emojiWithCode:0x1F319],
85 | [Emoji emojiWithCode:0x1F31f],*/
86 | nil];
87 | [array addObjectsFromArray:localAry];
88 | // for (int i=0x1F600; i<=0x1F64F; i++) {
89 | // if (i < 0x1F641 || i > 0x1F644) {
90 | // [array addObject:[Emoji emojiWithCode:i]];
91 | // }
92 | // }
93 | return array;
94 | }
95 |
96 | EMOJI_METHOD(grinningFace,1F600);
97 | EMOJI_METHOD(grinningFaceWithSmilingEyes,1F601);
98 | EMOJI_METHOD(faceWithTearsOfJoy,1F602);
99 | EMOJI_METHOD(smilingFaceWithOpenMouth,1F603);
100 | EMOJI_METHOD(smilingFaceWithOpenMouthAndSmilingEyes,1F604);
101 | EMOJI_METHOD(smilingFaceWithOpenMouthAndColdSweat,1F605);
102 | EMOJI_METHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes,1F606);
103 | EMOJI_METHOD(smilingFaceWithHalo,1F607);
104 | EMOJI_METHOD(smilingFaceWithHorns,1F608);
105 | EMOJI_METHOD(winkingFace,1F609);
106 | EMOJI_METHOD(smilingFaceWithSmilingEyes,1F60A);
107 | EMOJI_METHOD(faceSavouringDeliciousFood,1F60B);
108 | EMOJI_METHOD(relievedFace,1F60C);
109 | EMOJI_METHOD(smilingFaceWithHeartShapedEyes,1F60D);
110 | EMOJI_METHOD(smilingFaceWithSunglasses,1F60E);
111 | EMOJI_METHOD(smirkingFace,1F60F);
112 | EMOJI_METHOD(neutralFace,1F610);
113 | EMOJI_METHOD(expressionlessFace,1F611);
114 | EMOJI_METHOD(unamusedFace,1F612);
115 | EMOJI_METHOD(faceWithColdSweat,1F613);
116 | EMOJI_METHOD(pensiveFace,1F614);
117 | EMOJI_METHOD(confusedFace,1F615);
118 | EMOJI_METHOD(confoundedFace,1F616);
119 | EMOJI_METHOD(kissingFace,1F617);
120 | EMOJI_METHOD(faceThrowingAKiss,1F618);
121 | EMOJI_METHOD(kissingFaceWithSmilingEyes,1F619);
122 | EMOJI_METHOD(kissingFaceWithClosedEyes,1F61A);
123 | EMOJI_METHOD(faceWithStuckOutTongue,1F61B);
124 | EMOJI_METHOD(faceWithStuckOutTongueAndWinkingEye,1F61C);
125 | EMOJI_METHOD(faceWithStuckOutTongueAndTightlyClosedEyes,1F61D);
126 | EMOJI_METHOD(disappointedFace,1F61E);
127 | EMOJI_METHOD(worriedFace,1F61F);
128 | EMOJI_METHOD(angryFace,1F620);
129 | EMOJI_METHOD(poutingFace,1F621);
130 | EMOJI_METHOD(cryingFace,1F622);
131 | EMOJI_METHOD(perseveringFace,1F623);
132 | EMOJI_METHOD(faceWithLookOfTriumph,1F624);
133 | EMOJI_METHOD(disappointedButRelievedFace,1F625);
134 | EMOJI_METHOD(frowningFaceWithOpenMouth,1F626);
135 | EMOJI_METHOD(anguishedFace,1F627);
136 | EMOJI_METHOD(fearfulFace,1F628);
137 | EMOJI_METHOD(wearyFace,1F629);
138 | EMOJI_METHOD(sleepyFace,1F62A);
139 | EMOJI_METHOD(tiredFace,1F62B);
140 | EMOJI_METHOD(grimacingFace,1F62C);
141 | EMOJI_METHOD(loudlyCryingFace,1F62D);
142 | EMOJI_METHOD(faceWithOpenMouth,1F62E);
143 | EMOJI_METHOD(hushedFace,1F62F);
144 | EMOJI_METHOD(faceWithOpenMouthAndColdSweat,1F630);
145 | EMOJI_METHOD(faceScreamingInFear,1F631);
146 | EMOJI_METHOD(astonishedFace,1F632);
147 | EMOJI_METHOD(flushedFace,1F633);
148 | EMOJI_METHOD(sleepingFace,1F634);
149 | EMOJI_METHOD(dizzyFace,1F635);
150 | EMOJI_METHOD(faceWithoutMouth,1F636);
151 | EMOJI_METHOD(faceWithMedicalMask,1F637);
152 | EMOJI_METHOD(grinningCatFaceWithSmilingEyes,1F638);
153 | EMOJI_METHOD(catFaceWithTearsOfJoy,1F639);
154 | EMOJI_METHOD(smilingCatFaceWithOpenMouth,1F63A);
155 | EMOJI_METHOD(smilingCatFaceWithHeartShapedEyes,1F63B);
156 | EMOJI_METHOD(catFaceWithWrySmile,1F63C);
157 | EMOJI_METHOD(kissingCatFaceWithClosedEyes,1F63D);
158 | EMOJI_METHOD(poutingCatFace,1F63E);
159 | EMOJI_METHOD(cryingCatFace,1F63F);
160 | EMOJI_METHOD(wearyCatFace,1F640);
161 | EMOJI_METHOD(faceWithNoGoodGesture,1F645);
162 | EMOJI_METHOD(faceWithOkGesture,1F646);
163 | EMOJI_METHOD(personBowingDeeply,1F647);
164 | EMOJI_METHOD(seeNoEvilMonkey,1F648);
165 | EMOJI_METHOD(hearNoEvilMonkey,1F649);
166 | EMOJI_METHOD(speakNoEvilMonkey,1F64A);
167 | EMOJI_METHOD(happyPersonRaisingOneHand,1F64B);
168 | EMOJI_METHOD(personRaisingBothHandsInCelebration,1F64C);
169 | EMOJI_METHOD(personFrowning,1F64D);
170 | EMOJI_METHOD(personWithPoutingFace,1F64E);
171 | EMOJI_METHOD(personWithFoldedHands,1F64F);
172 | @end
173 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/EmojiEmoticons.m:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiEmoticons.m
3 | // Emoji
4 | //
5 | // Created by Aliksandr Andrashuk on 26.10.12.
6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved.
7 | //
8 |
9 | #import "EmojiEmoticons.h"
10 |
11 | @implementation EmojiEmoticons
12 |
13 | + (NSArray *)allEmoticons {
14 | NSMutableArray *array = [NSMutableArray new];
15 | NSMutableArray * localAry = [[NSMutableArray alloc] initWithObjects:
16 | [Emoji emojiWithCode:0x1F60a],
17 | [Emoji emojiWithCode:0x1F603],
18 | [Emoji emojiWithCode:0x1F609],
19 | [Emoji emojiWithCode:0x1F62e],
20 | [Emoji emojiWithCode:0x1F60b],
21 | [Emoji emojiWithCode:0x1F60e],
22 | [Emoji emojiWithCode:0x1F621],
23 | [Emoji emojiWithCode:0x1F616],
24 | [Emoji emojiWithCode:0x1F633],
25 | [Emoji emojiWithCode:0x1F61e],
26 | [Emoji emojiWithCode:0x1F62d],
27 | [Emoji emojiWithCode:0x1F610],
28 | [Emoji emojiWithCode:0x1F607],
29 | [Emoji emojiWithCode:0x1F62c],
30 | [Emoji emojiWithCode:0x1F606],
31 | [Emoji emojiWithCode:0x1F631],
32 | [Emoji emojiWithCode:0x1F385],
33 | [Emoji emojiWithCode:0x1F634],
34 | [Emoji emojiWithCode:0x1F615],
35 | [Emoji emojiWithCode:0x1F637],
36 | [Emoji emojiWithCode:0x1F62f],
37 | [Emoji emojiWithCode:0x1F60f],
38 | [Emoji emojiWithCode:0x1F611],
39 | [Emoji emojiWithCode:0x1F496],
40 | [Emoji emojiWithCode:0x1F494],
41 | [Emoji emojiWithCode:0x1F319],
42 | [Emoji emojiWithCode:0x1f31f],
43 | [Emoji emojiWithCode:0x1f31e],
44 | [Emoji emojiWithCode:0x1F308],
45 | [Emoji emojiWithCode:0x1F60d],
46 | [Emoji emojiWithCode:0x1F61a],
47 | [Emoji emojiWithCode:0x1F48b],
48 | [Emoji emojiWithCode:0x1F339],
49 | [Emoji emojiWithCode:0x1F342],
50 | [Emoji emojiWithCode:0x1F44d],
51 |
52 | /*[Emoji emojiWithCode:0x1F602],
53 | [Emoji emojiWithCode:0x1F603],
54 | [Emoji emojiWithCode:0x1F604],
55 | [Emoji emojiWithCode:0x1F609],
56 | [Emoji emojiWithCode:0x1F613],
57 | [Emoji emojiWithCode:0x1F614],
58 | [Emoji emojiWithCode:0x1F616],
59 | [Emoji emojiWithCode:0x1F618],
60 | [Emoji emojiWithCode:0x1F61a],
61 | [Emoji emojiWithCode:0x1F61c],
62 | [Emoji emojiWithCode:0x1F61d],
63 | [Emoji emojiWithCode:0x1F61e],
64 | [Emoji emojiWithCode:0x1F620],
65 | [Emoji emojiWithCode:0x1F621],
66 | [Emoji emojiWithCode:0x1F622],
67 | [Emoji emojiWithCode:0x1F623],
68 | [Emoji emojiWithCode:0x1F628],
69 | [Emoji emojiWithCode:0x1F62a],
70 | [Emoji emojiWithCode:0x1F62d],
71 | [Emoji emojiWithCode:0x1F630],
72 | [Emoji emojiWithCode:0x1F631],
73 | [Emoji emojiWithCode:0x1F632],
74 | [Emoji emojiWithCode:0x1F633],
75 | [Emoji emojiWithCode:0x1F645],
76 | [Emoji emojiWithCode:0x1F646],
77 | [Emoji emojiWithCode:0x1F647],
78 | [Emoji emojiWithCode:0x1F64c],
79 | [Emoji emojiWithCode:0x1F6a5],
80 | [Emoji emojiWithCode:0x1F6a7],
81 | [Emoji emojiWithCode:0x1F6b2],
82 | [Emoji emojiWithCode:0x1F6b6],
83 | [Emoji emojiWithCode:0x1F302],
84 | [Emoji emojiWithCode:0x1F319],
85 | [Emoji emojiWithCode:0x1F31f],*/
86 | nil];
87 | [array addObjectsFromArray:localAry];
88 | // for (int i=0x1F600; i<=0x1F64F; i++) {
89 | // if (i < 0x1F641 || i > 0x1F644) {
90 | // [array addObject:[Emoji emojiWithCode:i]];
91 | // }
92 | // }
93 | return array;
94 | }
95 |
96 | EMOJI_METHOD(grinningFace,1F600);
97 | EMOJI_METHOD(grinningFaceWithSmilingEyes,1F601);
98 | EMOJI_METHOD(faceWithTearsOfJoy,1F602);
99 | EMOJI_METHOD(smilingFaceWithOpenMouth,1F603);
100 | EMOJI_METHOD(smilingFaceWithOpenMouthAndSmilingEyes,1F604);
101 | EMOJI_METHOD(smilingFaceWithOpenMouthAndColdSweat,1F605);
102 | EMOJI_METHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes,1F606);
103 | EMOJI_METHOD(smilingFaceWithHalo,1F607);
104 | EMOJI_METHOD(smilingFaceWithHorns,1F608);
105 | EMOJI_METHOD(winkingFace,1F609);
106 | EMOJI_METHOD(smilingFaceWithSmilingEyes,1F60A);
107 | EMOJI_METHOD(faceSavouringDeliciousFood,1F60B);
108 | EMOJI_METHOD(relievedFace,1F60C);
109 | EMOJI_METHOD(smilingFaceWithHeartShapedEyes,1F60D);
110 | EMOJI_METHOD(smilingFaceWithSunglasses,1F60E);
111 | EMOJI_METHOD(smirkingFace,1F60F);
112 | EMOJI_METHOD(neutralFace,1F610);
113 | EMOJI_METHOD(expressionlessFace,1F611);
114 | EMOJI_METHOD(unamusedFace,1F612);
115 | EMOJI_METHOD(faceWithColdSweat,1F613);
116 | EMOJI_METHOD(pensiveFace,1F614);
117 | EMOJI_METHOD(confusedFace,1F615);
118 | EMOJI_METHOD(confoundedFace,1F616);
119 | EMOJI_METHOD(kissingFace,1F617);
120 | EMOJI_METHOD(faceThrowingAKiss,1F618);
121 | EMOJI_METHOD(kissingFaceWithSmilingEyes,1F619);
122 | EMOJI_METHOD(kissingFaceWithClosedEyes,1F61A);
123 | EMOJI_METHOD(faceWithStuckOutTongue,1F61B);
124 | EMOJI_METHOD(faceWithStuckOutTongueAndWinkingEye,1F61C);
125 | EMOJI_METHOD(faceWithStuckOutTongueAndTightlyClosedEyes,1F61D);
126 | EMOJI_METHOD(disappointedFace,1F61E);
127 | EMOJI_METHOD(worriedFace,1F61F);
128 | EMOJI_METHOD(angryFace,1F620);
129 | EMOJI_METHOD(poutingFace,1F621);
130 | EMOJI_METHOD(cryingFace,1F622);
131 | EMOJI_METHOD(perseveringFace,1F623);
132 | EMOJI_METHOD(faceWithLookOfTriumph,1F624);
133 | EMOJI_METHOD(disappointedButRelievedFace,1F625);
134 | EMOJI_METHOD(frowningFaceWithOpenMouth,1F626);
135 | EMOJI_METHOD(anguishedFace,1F627);
136 | EMOJI_METHOD(fearfulFace,1F628);
137 | EMOJI_METHOD(wearyFace,1F629);
138 | EMOJI_METHOD(sleepyFace,1F62A);
139 | EMOJI_METHOD(tiredFace,1F62B);
140 | EMOJI_METHOD(grimacingFace,1F62C);
141 | EMOJI_METHOD(loudlyCryingFace,1F62D);
142 | EMOJI_METHOD(faceWithOpenMouth,1F62E);
143 | EMOJI_METHOD(hushedFace,1F62F);
144 | EMOJI_METHOD(faceWithOpenMouthAndColdSweat,1F630);
145 | EMOJI_METHOD(faceScreamingInFear,1F631);
146 | EMOJI_METHOD(astonishedFace,1F632);
147 | EMOJI_METHOD(flushedFace,1F633);
148 | EMOJI_METHOD(sleepingFace,1F634);
149 | EMOJI_METHOD(dizzyFace,1F635);
150 | EMOJI_METHOD(faceWithoutMouth,1F636);
151 | EMOJI_METHOD(faceWithMedicalMask,1F637);
152 | EMOJI_METHOD(grinningCatFaceWithSmilingEyes,1F638);
153 | EMOJI_METHOD(catFaceWithTearsOfJoy,1F639);
154 | EMOJI_METHOD(smilingCatFaceWithOpenMouth,1F63A);
155 | EMOJI_METHOD(smilingCatFaceWithHeartShapedEyes,1F63B);
156 | EMOJI_METHOD(catFaceWithWrySmile,1F63C);
157 | EMOJI_METHOD(kissingCatFaceWithClosedEyes,1F63D);
158 | EMOJI_METHOD(poutingCatFace,1F63E);
159 | EMOJI_METHOD(cryingCatFace,1F63F);
160 | EMOJI_METHOD(wearyCatFace,1F640);
161 | EMOJI_METHOD(faceWithNoGoodGesture,1F645);
162 | EMOJI_METHOD(faceWithOkGesture,1F646);
163 | EMOJI_METHOD(personBowingDeeply,1F647);
164 | EMOJI_METHOD(seeNoEvilMonkey,1F648);
165 | EMOJI_METHOD(hearNoEvilMonkey,1F649);
166 | EMOJI_METHOD(speakNoEvilMonkey,1F64A);
167 | EMOJI_METHOD(happyPersonRaisingOneHand,1F64B);
168 | EMOJI_METHOD(personRaisingBothHandsInCelebration,1F64C);
169 | EMOJI_METHOD(personFrowning,1F64D);
170 | EMOJI_METHOD(personWithPoutingFace,1F64E);
171 | EMOJI_METHOD(personWithFoldedHands,1F64F);
172 | @end
173 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCKeyBoard.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCKeyBoard.m
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import "BCKeyBoard.h"
10 | #import "BCTextView.h"
11 |
12 | #import "DXFaceView.h"
13 | #import "BCMoreView.h"
14 |
15 |
16 | #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
17 | #define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
18 |
19 |
20 | #define kBCTextViewHeight 36 /**< 底部textView的高度 */
21 | #define kHorizontalPadding 8 /**< 横向间隔 */
22 | #define kVerticalPadding 5 /**< 纵向间隔 */
23 |
24 | @interface BCKeyBoard ()
25 | @property (nonatomic,strong)UIImageView *backgroundImageView;
26 | @property (nonatomic,strong)UIButton *faceBtn;
27 | @property (nonatomic,strong)UIButton *moreBtn;
28 | @property (nonatomic,strong)BCTextView *textView;
29 | @property (nonatomic,strong)UIView *faceView;
30 | @property (nonatomic,strong)UIView *moreView;
31 | @property (nonatomic,assign)CGFloat lastHeight;
32 | @property (nonatomic,strong)UIView *activeView;
33 | @end
34 |
35 | @implementation BCKeyBoard
36 | - (instancetype)initWithFrame:(CGRect)frame
37 | {
38 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) {
39 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight;
40 | }
41 | self = [super initWithFrame:frame];
42 | if (self) {
43 | [self createUI];
44 | }
45 | return self;
46 | }
47 |
48 | - (void)setFrame:(CGRect)frame
49 | {
50 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) {
51 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight;
52 | }
53 | [super setFrame:frame];
54 | }
55 | - (void)createUI
56 | {
57 | _lastHeight = 30;
58 | //注册键盘改变是调用
59 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
60 |
61 | self.backgroundImageView = [[UIImageView alloc] initWithFrame:self.bounds];
62 | self.backgroundImageView.userInteractionEnabled = YES;
63 | self.backgroundImageView.image = [[UIImage imageNamed:@"messageToolbarBg"] stretchableImageWithLeftCapWidth:0.5 topCapHeight:10];
64 |
65 |
66 | //表情按钮
67 | self.faceBtn = [UIButton buttonWithType:UIButtonTypeCustom];
68 | self.faceBtn.frame = CGRectMake(kHorizontalPadding,kHorizontalPadding, 30, 30);
69 | [self.faceBtn addTarget:self action:@selector(willShowFaceView:) forControlEvents:UIControlEventTouchUpInside];
70 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_face"] forState:UIControlStateNormal];
71 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected];
72 | [self addSubview:self.faceBtn];
73 |
74 | //文本
75 | self.textView = [[BCTextView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.faceBtn.frame)+kHorizontalPadding, kHorizontalPadding, self.bounds.size.width - 4*kHorizontalPadding - 30*2, 30)];
76 | self.textView.placeholderColor = self.placeholderColor;
77 | self.textView.returnKeyType = UIReturnKeySend;
78 | self.textView.scrollEnabled = NO;
79 | self.textView.backgroundColor = [UIColor clearColor];
80 | self.textView.layer.borderColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor;
81 | self.textView.layer.borderWidth = 0.65f;
82 | self.textView.layer.cornerRadius = 6.0f;
83 | self.textView.delegate = self;
84 |
85 | //更多按钮
86 | self.moreBtn = [UIButton buttonWithType:UIButtonTypeCustom];
87 | self.moreBtn.frame = CGRectMake(CGRectGetMaxX(self.textView.frame)+kHorizontalPadding,kHorizontalPadding,30,30);
88 | [self.moreBtn addTarget:self action:@selector(willShowactiveView:) forControlEvents:UIControlEventTouchUpInside];
89 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_more"] forState:UIControlStateNormal];
90 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected];
91 |
92 | [self addSubview:self.backgroundImageView];
93 | [self.backgroundImageView addSubview:self.textView];
94 | [self.backgroundImageView addSubview:self.faceBtn];
95 | [self.backgroundImageView addSubview:self.moreBtn];
96 |
97 | if (!self.faceView) {
98 | self.faceView = [[DXFaceView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)];
99 | [(DXFaceView *)self.faceView setDelegate:self];
100 | self.faceView.backgroundColor = [UIColor whiteColor];
101 | self.faceView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
102 | }
103 |
104 | if (!self.moreView) {
105 | self.moreView = [[BCMoreView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)];
106 | self.moreView.backgroundColor = [UIColor whiteColor];
107 | [(BCMoreView *)self.moreView setDelegate:self];
108 | self.moreView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
109 | }
110 | }
111 | - (void)changeFrame:(CGFloat)height{
112 |
113 | if (height == _lastHeight)
114 | {
115 | return;
116 | }
117 | else{
118 | CGFloat changeHeight = height - _lastHeight;
119 |
120 | CGRect rect = self.frame;
121 | rect.size.height += changeHeight;
122 | rect.origin.y -= changeHeight;
123 | self.frame = rect;
124 |
125 | rect = self.backgroundImageView.frame;
126 | rect.size.height += changeHeight;
127 | self.backgroundImageView.frame = rect;
128 |
129 |
130 | [self.textView setContentOffset:CGPointMake(0.0f, (self.textView.contentSize.height - self.textView.frame.size.height) / 2) animated:YES];
131 |
132 | CGRect frame = self.textView.frame;
133 | frame.size.height = height;
134 | self.textView.frame = frame;
135 |
136 | _lastHeight = height;
137 |
138 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) {
139 | [self.delegate returnHeight:height];
140 | }
141 | }
142 |
143 | }
144 | - (void)setPlaceholder:(NSString *)placeholder
145 | {
146 | self.textView.placeholder = placeholder;
147 | }
148 | - (void)setPlaceholderColor:(UIColor *)placeholderColor
149 | {
150 | self.textView.placeholderColor = placeholderColor;
151 | }
152 | - (void)keyboardWillChangeFrame:(NSNotification *)notification{
153 | NSDictionary *userInfo = notification.userInfo;
154 | CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
155 | CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
156 | UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue];
157 | void(^animations)() = ^{
158 | CGRect frame = self.frame;
159 | frame.origin.y = endFrame.origin.y - self.bounds.size.height;
160 | self.frame = frame;
161 | };
162 | void(^completion)(BOOL) = ^(BOOL finished){
163 | };
164 | [UIView animateWithDuration:duration delay:0.0f options:(curve << 16 | UIViewAnimationOptionBeginFromCurrentState) animations:animations completion:completion];
165 | }
166 | #pragma mark 表情View
167 | - (void)willShowFaceView:(UIButton *)btn
168 | {
169 | btn.selected = !btn.selected;
170 | if(btn.selected == YES){
171 | [self willShowBottomView:self.faceView];
172 | [self.textView resignFirstResponder];
173 | }else{
174 | [self willShowBottomView:nil];
175 | [self.textView becomeFirstResponder];
176 | }
177 | }
178 |
179 | #pragma mark 表更多View
180 | - (void)willShowactiveView:(UIButton *)btn
181 | {
182 | btn.selected = !btn.selected;
183 | if(btn.selected == YES){
184 | [self willShowBottomView:self.moreView];
185 | [self.textView resignFirstResponder];
186 | [(BCMoreView *)self.moreView setImageArray:self.imageArray];
187 | }else{
188 | [self willShowBottomView:nil];
189 | [self.textView becomeFirstResponder];
190 | }
191 | }
192 |
193 | - (void)willShowBottomHeight:(CGFloat)bottomHeight
194 | {
195 | CGRect fromFrame = self.frame;
196 | CGFloat toHeight = self.backgroundImageView.frame.size.height + bottomHeight;
197 | CGRect toFrame = CGRectMake(fromFrame.origin.x, fromFrame.origin.y + (fromFrame.size.height - toHeight), fromFrame.size.width, toHeight);
198 | self.frame = toFrame;
199 |
200 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) {
201 | [self.delegate returnHeight:toHeight];
202 | }
203 | }
204 | - (CGFloat)getTextViewContentH:(UITextView *)textView
205 | {
206 | return ceilf([textView sizeThatFits:textView.frame.size].height);
207 | }
208 | - (void)textViewDidBeginEditing:(UITextView *)textView
209 | {
210 | [self willShowBottomView:nil];
211 | self.faceBtn.selected = NO;
212 | self.moreBtn.selected = NO;
213 | }
214 |
215 | - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
216 | {
217 |
218 | if ([text isEqualToString:@"\n"]) {
219 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) {
220 | [self.delegate didSendText:textView.text];
221 | self.textView.text = @"";
222 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)];
223 | }
224 | return NO;
225 | }
226 | return YES;
227 | }
228 | - (void)willShowBottomView:(UIView *)bottomView
229 | {
230 | if (![self.activeView isEqual:bottomView]) {
231 | CGFloat bottomHeight = bottomView ? bottomView.frame.size.height : 0;
232 | [self willShowBottomHeight:bottomHeight];
233 |
234 | if (bottomView) {
235 | CGRect rect = bottomView.frame;
236 | rect.origin.y = CGRectGetMaxY(self.backgroundImageView.frame);
237 | bottomView.frame = rect;
238 | [self addSubview:bottomView];
239 | }
240 | if (self.activeView) {
241 | [self.activeView removeFromSuperview];
242 | }
243 | self.activeView = bottomView;
244 | }
245 | }
246 | - (void)textViewDidChange:(UITextView *)textView
247 | {
248 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)];
249 | }
250 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete
251 | {
252 | NSString *chatText = self.textView.text;
253 |
254 | if (!isDelete && str.length > 0) {
255 | self.textView.text = [NSString stringWithFormat:@"%@%@",chatText,str];
256 | }
257 | else {
258 | if (chatText.length >= 2)
259 | {
260 | NSString *subStr = [chatText substringFromIndex:chatText.length-2];
261 | if ([(DXFaceView *)self.faceView stringIsFace:subStr]) {
262 | self.textView.text = [chatText substringToIndex:chatText.length-2];
263 | [self textViewDidChange:self.textView];
264 | return;
265 | }
266 | }
267 | if (chatText.length > 0) {
268 | self.textView.text = [chatText substringToIndex:chatText.length-1];
269 | }
270 | }
271 | [self textViewDidChange:self.textView];
272 | }
273 | - (void)sendFace
274 | {
275 | NSString *chatText = self.textView.text;
276 | if (chatText.length > 0) {
277 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) {
278 | [self.delegate didSendText:chatText];
279 | self.textView.text = @"";
280 | [self changeFrame:ceilf([self.textView sizeThatFits:self.textView.frame.size].height)];
281 | }
282 | }
283 | }
284 | - (void)didselectImageView:(NSInteger)index
285 | {
286 | switch (index) {
287 | case 0:
288 | [self createActionSheet];
289 | break;
290 | default:
291 | break;
292 | }
293 | }
294 | - (void)createActionSheet
295 | {
296 | UIActionSheet *action=[[UIActionSheet alloc] initWithTitle:@"选取照片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"从摄像头选取", @"从图片库选择",nil];
297 | [action showInView:self];
298 | }
299 | - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
300 | {
301 | switch (buttonIndex) {
302 | case 0:
303 | [self openCamera];
304 | break;
305 | case 1:
306 | [self openLibary];
307 | break;
308 | default:
309 | break;
310 | }
311 | }
312 | - (void)openCamera{
313 | //打开系统相机
314 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
315 | UIImagePickerController *picker = [[UIImagePickerController alloc] init];
316 | picker.delegate = self;
317 | picker.allowsEditing = YES;
318 | picker.sourceType = UIImagePickerControllerSourceTypeCamera;
319 | [self.currentCtr presentViewController:picker animated:YES completion:nil];
320 | }
321 | }
322 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
323 | {
324 | UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
325 | if([self.delegate respondsToSelector:@selector(returnImage:)]){
326 | [self.delegate returnImage:image];
327 | }
328 | UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
329 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil];
330 |
331 | }
332 | - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
333 | {
334 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil];
335 | }
336 | - (void)openLibary{
337 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){
338 | UIImagePickerController *picker = [[UIImagePickerController alloc] init];
339 | picker.delegate = self;
340 | picker.allowsEditing = YES;
341 | picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
342 | [self.currentCtr presentViewController:picker animated:YES completion:nil];
343 | }
344 | }
345 | - (void)dealloc
346 | {
347 | [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
348 | }
349 | @end
350 |
--------------------------------------------------------------------------------
/BCKeyBoard/BCKeyBoard.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCKeyBoard.m
3 | // BCDemo
4 | //
5 | // Created by baochao on 15/7/27.
6 | // Copyright (c) 2015年 baochao. All rights reserved.
7 | //
8 |
9 | #import "BCKeyBoard.h"
10 | #import "BCTextView.h"
11 | #import "Const.h"
12 | #import "DXFaceView.h"
13 | #import "BCMoreView.h"
14 |
15 | @interface BCKeyBoard ()
16 | @property (nonatomic,strong)UIImageView *backgroundImageView;
17 | @property (nonatomic,strong)UIButton *faceBtn;
18 | @property (nonatomic,strong)UIButton *moreBtn;
19 | @property (nonatomic,strong)BCTextView *textView;
20 | @property (nonatomic,strong)UIView *faceView;
21 | @property (nonatomic,assign)BOOL isTop;
22 | @property (nonatomic,strong)UIView *moreView;
23 | @property (nonatomic,assign)CGFloat lastHeight;
24 | //拓展的view
25 | @property (nonatomic,strong)UIView *activeView;
26 | @end
27 |
28 | @implementation BCKeyBoard
29 | - (instancetype)initWithFrame:(CGRect)frame
30 | {
31 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) {
32 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight;
33 | }
34 | self = [super initWithFrame:frame];
35 | if (self) {
36 | [self createUI];
37 | }
38 | return self;
39 | }
40 |
41 | - (void)setFrame:(CGRect)frame
42 | {
43 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) {
44 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight;
45 | }
46 | [super setFrame:frame];
47 | }
48 | - (void)createUI
49 | {
50 | _lastHeight = 30;
51 | //注册键盘改变是调用
52 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
53 |
54 | self.backgroundImageView = [[UIImageView alloc] initWithFrame:self.bounds];
55 | self.backgroundImageView.userInteractionEnabled = YES;
56 | self.backgroundImageView.image = [[UIImage imageNamed:@"messageToolbarBg"] stretchableImageWithLeftCapWidth:0.5 topCapHeight:10];
57 |
58 |
59 | //表情按钮
60 | self.faceBtn = [UIButton buttonWithType:UIButtonTypeCustom];
61 | self.faceBtn.frame = CGRectMake(kHorizontalPadding,kHorizontalPadding, 30, 30);
62 | [self.faceBtn addTarget:self action:@selector(willShowFaceView:) forControlEvents:UIControlEventTouchUpInside];
63 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_face"] forState:UIControlStateNormal];
64 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected];
65 | [self addSubview:self.faceBtn];
66 |
67 | //文本
68 | self.textView = [[BCTextView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.faceBtn.frame)+kHorizontalPadding, kHorizontalPadding, self.bounds.size.width - 4*kHorizontalPadding - 30*2, 30)];
69 | self.textView.placeholderColor = self.placeholderColor;
70 | self.textView.returnKeyType = UIReturnKeySend;
71 | self.textView.scrollEnabled = NO;
72 | self.textView.backgroundColor = [UIColor clearColor];
73 | self.textView.layer.borderColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor;
74 | self.textView.layer.borderWidth = 0.65f;
75 | self.textView.layer.cornerRadius = 6.0f;
76 | self.textView.delegate = self;
77 |
78 | //更多按钮
79 | self.moreBtn = [UIButton buttonWithType:UIButtonTypeCustom];
80 | self.moreBtn.frame = CGRectMake(CGRectGetMaxX(self.textView.frame)+kHorizontalPadding,kHorizontalPadding,30,30);
81 | [self.moreBtn addTarget:self action:@selector(willShowactiveView:) forControlEvents:UIControlEventTouchUpInside];
82 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_more"] forState:UIControlStateNormal];
83 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected];
84 |
85 | [self addSubview:self.backgroundImageView];
86 | [self.backgroundImageView addSubview:self.textView];
87 | [self.backgroundImageView addSubview:self.faceBtn];
88 | [self.backgroundImageView addSubview:self.moreBtn];
89 |
90 | if (!self.faceView) {
91 | self.faceView = [[DXFaceView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)];
92 | [(DXFaceView *)self.faceView setDelegate:self];
93 | self.faceView.backgroundColor = [UIColor whiteColor];
94 | self.faceView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
95 | }
96 |
97 | if (!self.moreView) {
98 | self.moreView = [[BCMoreView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)];
99 | self.moreView.backgroundColor = [UIColor whiteColor];
100 | [(BCMoreView *)self.moreView setDelegate:self];
101 | self.moreView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
102 | }
103 | }
104 | - (void)changeFrame:(CGFloat)height{
105 |
106 | if (height == _lastHeight)
107 | {
108 | return;
109 | }
110 | else{
111 | CGFloat changeHeight = height - _lastHeight;
112 |
113 | CGRect rect = self.frame;
114 | rect.size.height += changeHeight;
115 | rect.origin.y -= changeHeight;
116 | self.frame = rect;
117 |
118 | rect = self.backgroundImageView.frame;
119 | rect.size.height += changeHeight;
120 | self.backgroundImageView.frame = rect;
121 |
122 |
123 | [self.textView setContentOffset:CGPointMake(0.0f, (self.textView.contentSize.height - self.textView.frame.size.height) / 2) animated:YES];
124 |
125 | CGRect frame = self.textView.frame;
126 | frame.size.height = height;
127 | self.textView.frame = frame;
128 |
129 | _lastHeight = height;
130 |
131 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) {
132 | [self.delegate returnHeight:height];
133 | }
134 | }
135 |
136 | }
137 | - (void)setPlaceholder:(NSString *)placeholder
138 | {
139 | self.textView.placeholder = placeholder;
140 | }
141 | - (void)setPlaceholderColor:(UIColor *)placeholderColor
142 | {
143 | self.textView.placeholderColor = placeholderColor;
144 | }
145 | - (void)keyboardWillChangeFrame:(NSNotification *)notification{
146 | NSDictionary *userInfo = notification.userInfo;
147 | CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
148 | CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
149 | UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue];
150 | void(^animations)() = ^{
151 | CGRect frame = self.frame;
152 | frame.origin.y = endFrame.origin.y - self.bounds.size.height;
153 | self.frame = frame;
154 | };
155 | void(^completion)(BOOL) = ^(BOOL finished){
156 | };
157 | [UIView animateWithDuration:duration delay:0.0f options:(curve << 16 | UIViewAnimationOptionBeginFromCurrentState) animations:animations completion:completion];
158 | }
159 | #pragma mark 表情View
160 | - (void)willShowFaceView:(UIButton *)btn
161 | {
162 | btn.selected = !btn.selected;
163 | if(btn.selected == YES){
164 | [self willShowBottomView:self.faceView];
165 | [self.textView resignFirstResponder];
166 | }else{
167 | [self willShowBottomView:nil];
168 | [self.textView becomeFirstResponder];
169 | }
170 | }
171 |
172 | #pragma mark 表更多View
173 | - (void)willShowactiveView:(UIButton *)btn
174 | {
175 | btn.selected = !btn.selected;
176 | if(btn.selected == YES){
177 | [self willShowBottomView:self.moreView];
178 | [self.textView resignFirstResponder];
179 | [(BCMoreView *)self.moreView setImageArray:self.imageArray];
180 | }else{
181 | [self willShowBottomView:nil];
182 | [self.textView becomeFirstResponder];
183 | }
184 | }
185 |
186 | - (void)willShowBottomHeight:(CGFloat)bottomHeight
187 | {
188 | CGRect fromFrame = self.frame;
189 | CGFloat toHeight = self.backgroundImageView.frame.size.height + bottomHeight;
190 | CGRect toFrame = CGRectMake(fromFrame.origin.x, fromFrame.origin.y + (fromFrame.size.height - toHeight), fromFrame.size.width, toHeight);
191 | self.frame = toFrame;
192 |
193 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) {
194 | [self.delegate returnHeight:toHeight];
195 | }
196 | }
197 | - (CGFloat)getTextViewContentH:(UITextView *)textView
198 | {
199 | return ceilf([textView sizeThatFits:textView.frame.size].height);
200 | }
201 | - (void)textViewDidBeginEditing:(UITextView *)textView
202 | {
203 | [self willShowBottomView:nil];
204 | self.faceBtn.selected = NO;
205 | self.moreBtn.selected = NO;
206 | }
207 | - (void)willShowKeyboardFromFrame:(CGRect)beginFrame toFrame:(CGRect)toFrame
208 | {
209 | if (beginFrame.origin.y == [[UIScreen mainScreen] bounds].size.height)
210 | {
211 | [self willShowBottomHeight:toFrame.size.height];
212 | if (self.activeView) {
213 | [self.activeView removeFromSuperview];
214 | }
215 | self.activeView = nil;
216 | }
217 | else if(toFrame.origin.y == [[UIScreen mainScreen] bounds].size.height)
218 | {
219 | [self willShowBottomHeight:0];
220 | }
221 | else{
222 | [self willShowBottomHeight:toFrame.size.height];
223 | }
224 | }
225 | - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
226 | {
227 | if ([text isEqualToString:@"\n"]) {
228 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) {
229 | [self.delegate didSendText:textView.text];
230 | self.textView.text = @"";
231 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)];
232 | }
233 | return NO;
234 | }
235 | return YES;
236 | }
237 | - (void)willShowBottomView:(UIView *)bottomView
238 | {
239 | if (![self.activeView isEqual:bottomView]) {
240 | CGFloat bottomHeight = bottomView ? bottomView.frame.size.height : 0;
241 | [self willShowBottomHeight:bottomHeight];
242 |
243 | if (bottomView) {
244 | CGRect rect = bottomView.frame;
245 | rect.origin.y = CGRectGetMaxY(self.backgroundImageView.frame);
246 | bottomView.frame = rect;
247 | [self addSubview:bottomView];
248 | }
249 | if (self.activeView) {
250 | [self.activeView removeFromSuperview];
251 | }
252 | self.activeView = bottomView;
253 | }
254 | }
255 | - (void)textViewDidChange:(UITextView *)textView
256 | {
257 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)];
258 | }
259 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete
260 | {
261 | NSString *chatText = self.textView.text;
262 |
263 | if (!isDelete && str.length > 0) {
264 | self.textView.text = [NSString stringWithFormat:@"%@%@",chatText,str];
265 | }
266 | else {
267 | if (chatText.length >= 2)
268 | {
269 | NSString *subStr = [chatText substringFromIndex:chatText.length-2];
270 | if ([(DXFaceView *)self.faceView stringIsFace:subStr]) {
271 | self.textView.text = [chatText substringToIndex:chatText.length-2];
272 | [self textViewDidChange:self.textView];
273 | return;
274 | }
275 | }
276 | if (chatText.length > 0) {
277 | self.textView.text = [chatText substringToIndex:chatText.length-1];
278 | }
279 | }
280 | [self textViewDidChange:self.textView];
281 | }
282 | - (void)sendFace
283 | {
284 | NSString *chatText = self.textView.text;
285 | if (chatText.length > 0) {
286 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) {
287 | [self.delegate didSendText:chatText];
288 | self.textView.text = @"";
289 | [self changeFrame:ceilf([self.textView sizeThatFits:self.textView.frame.size].height)];
290 | }
291 | }
292 | }
293 | - (void)didselectImageView:(NSInteger)index
294 | {
295 | switch (index) {
296 | case 0:
297 | [self createActionSheet];
298 | break;
299 | default:
300 | break;
301 | }
302 | }
303 | - (void)createActionSheet
304 | {
305 | UIActionSheet *action=[[UIActionSheet alloc] initWithTitle:@"选取照片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"从摄像头选取", @"从图片库选择",nil];
306 | [action showInView:self];
307 | }
308 | - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
309 | {
310 | switch (buttonIndex) {
311 | case 0:
312 | [self openCamera];
313 | break;
314 | case 1:
315 | [self openLibary];
316 | break;
317 | default:
318 | break;
319 | }
320 | }
321 | - (void)openCamera{
322 | //打开系统相机
323 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
324 | UIImagePickerController *picker = [[UIImagePickerController alloc] init];
325 | picker.delegate = self;
326 | picker.allowsEditing = YES;
327 | picker.sourceType = UIImagePickerControllerSourceTypeCamera;
328 | [self.currentCtr presentViewController:picker animated:YES completion:nil];
329 | }
330 | }
331 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
332 | {
333 | UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
334 | if([self.delegate respondsToSelector:@selector(returnImage:)]){
335 | [self.delegate returnImage:image];
336 | }
337 | UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
338 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil];
339 |
340 | }
341 | - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
342 | {
343 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil];
344 | }
345 | - (void)openLibary{
346 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){
347 | UIImagePickerController *picker = [[UIImagePickerController alloc] init];
348 | picker.delegate = self;
349 | picker.allowsEditing = YES;
350 | picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
351 | [self.currentCtr presentViewController:picker animated:YES completion:nil];
352 | }
353 | }
354 | - (void)dealloc
355 | {
356 | [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
357 | }
358 | @end
359 |
--------------------------------------------------------------------------------
/BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | CBE2CEEC1C30E3FA0078DC13 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CEEB1C30E3FA0078DC13 /* main.m */; };
11 | CBE2CEF51C30E3FA0078DC13 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CEF31C30E3FA0078DC13 /* Main.storyboard */; };
12 | CBE2CEF71C30E3FA0078DC13 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CEF61C30E3FA0078DC13 /* Assets.xcassets */; };
13 | CBE2CEFA1C30E3FA0078DC13 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CEF81C30E3FA0078DC13 /* LaunchScreen.storyboard */; };
14 | CBE2CF051C30E3FA0078DC13 /* BCKeyBoardDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF041C30E3FA0078DC13 /* BCKeyBoardDemoTests.m */; };
15 | CBE2CF101C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF0F1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m */; };
16 | CBE2CF1F1C30E40C0078DC13 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF1E1C30E40C0078DC13 /* AppDelegate.m */; };
17 | CBE2CF631C30E4130078DC13 /* BCKeyBoard.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF221C30E4130078DC13 /* BCKeyBoard.m */; };
18 | CBE2CF641C30E4130078DC13 /* BCMoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF241C30E4130078DC13 /* BCMoreView.m */; };
19 | CBE2CF651C30E4130078DC13 /* BCTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF261C30E4130078DC13 /* BCTextView.m */; };
20 | CBE2CF661C30E4130078DC13 /* DXFaceView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF2A1C30E4130078DC13 /* DXFaceView.m */; };
21 | CBE2CF671C30E4130078DC13 /* Emoji.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF2C1C30E4130078DC13 /* Emoji.m */; };
22 | CBE2CF681C30E4130078DC13 /* EmojiEmoticons.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF2E1C30E4130078DC13 /* EmojiEmoticons.m */; };
23 | CBE2CF691C30E4130078DC13 /* FacialView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF301C30E4130078DC13 /* FacialView.m */; };
24 | CBE2CF6A1C30E4130078DC13 /* faceDelete.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF331C30E4130078DC13 /* faceDelete.png */; };
25 | CBE2CF6B1C30E4130078DC13 /* faceDelete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF341C30E4130078DC13 /* faceDelete@2x.png */; };
26 | CBE2CF6C1C30E4130078DC13 /* chatBar_face.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF361C30E4130078DC13 /* chatBar_face.png */; };
27 | CBE2CF6D1C30E4130078DC13 /* chatBar_face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF371C30E4130078DC13 /* chatBar_face@2x.png */; };
28 | CBE2CF6E1C30E4130078DC13 /* chatBar_faceSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF381C30E4130078DC13 /* chatBar_faceSelected.png */; };
29 | CBE2CF6F1C30E4130078DC13 /* chatBar_faceSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF391C30E4130078DC13 /* chatBar_faceSelected@2x.png */; };
30 | CBE2CF701C30E4130078DC13 /* chatBar_keyboard.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3A1C30E4130078DC13 /* chatBar_keyboard.png */; };
31 | CBE2CF711C30E4130078DC13 /* chatBar_keyboard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3B1C30E4130078DC13 /* chatBar_keyboard@2x.png */; };
32 | CBE2CF721C30E4130078DC13 /* chatBar_keyboardSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3C1C30E4130078DC13 /* chatBar_keyboardSelected.png */; };
33 | CBE2CF731C30E4130078DC13 /* chatBar_keyboardSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3D1C30E4130078DC13 /* chatBar_keyboardSelected@2x.png */; };
34 | CBE2CF741C30E4130078DC13 /* chatBar_more.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3E1C30E4130078DC13 /* chatBar_more.png */; };
35 | CBE2CF751C30E4130078DC13 /* chatBar_more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3F1C30E4130078DC13 /* chatBar_more@2x.png */; };
36 | CBE2CF761C30E4130078DC13 /* chatBar_moreSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF401C30E4130078DC13 /* chatBar_moreSelected.png */; };
37 | CBE2CF771C30E4130078DC13 /* chatBar_moreSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF411C30E4130078DC13 /* chatBar_moreSelected@2x.png */; };
38 | CBE2CF781C30E4130078DC13 /* chatBar_record.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF421C30E4130078DC13 /* chatBar_record.png */; };
39 | CBE2CF791C30E4130078DC13 /* chatBar_record@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF431C30E4130078DC13 /* chatBar_record@2x.png */; };
40 | CBE2CF7A1C30E4130078DC13 /* chatBar_recordBg.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF441C30E4130078DC13 /* chatBar_recordBg.png */; };
41 | CBE2CF7B1C30E4130078DC13 /* chatBar_recordBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF451C30E4130078DC13 /* chatBar_recordBg@2x.png */; };
42 | CBE2CF7C1C30E4130078DC13 /* chatBar_recordSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF461C30E4130078DC13 /* chatBar_recordSelected.png */; };
43 | CBE2CF7D1C30E4130078DC13 /* chatBar_recordSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF471C30E4130078DC13 /* chatBar_recordSelected@2x.png */; };
44 | CBE2CF7E1C30E4130078DC13 /* chatBar_recordSelectedBg.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF481C30E4130078DC13 /* chatBar_recordSelectedBg.png */; };
45 | CBE2CF7F1C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF491C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png */; };
46 | CBE2CF801C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4B1C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png */; };
47 | CBE2CF811C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4C1C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png */; };
48 | CBE2CF821C30E4130078DC13 /* chatBar_colorMore_camera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4D1C30E4130078DC13 /* chatBar_colorMore_camera@2x.png */; };
49 | CBE2CF831C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4E1C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png */; };
50 | CBE2CF841C30E4130078DC13 /* chatBar_colorMore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4F1C30E4130078DC13 /* chatBar_colorMore_location@2x.png */; };
51 | CBE2CF851C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF501C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png */; };
52 | CBE2CF861C30E4130078DC13 /* chatBar_colorMore_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF511C30E4130078DC13 /* chatBar_colorMore_photo@2x.png */; };
53 | CBE2CF871C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF521C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png */; };
54 | CBE2CF881C30E4130078DC13 /* chatBar_colorMore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF531C30E4130078DC13 /* chatBar_colorMore_video@2x.png */; };
55 | CBE2CF891C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF541C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png */; };
56 | CBE2CF8A1C30E4130078DC13 /* chatBar_more_camera.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF561C30E4130078DC13 /* chatBar_more_camera.png */; };
57 | CBE2CF8B1C30E4130078DC13 /* chatBar_more_camera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF571C30E4130078DC13 /* chatBar_more_camera@2x.png */; };
58 | CBE2CF8C1C30E4130078DC13 /* chatBar_more_cameraSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF581C30E4130078DC13 /* chatBar_more_cameraSelected.png */; };
59 | CBE2CF8D1C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF591C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png */; };
60 | CBE2CF8E1C30E4130078DC13 /* chatBar_more_location.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5A1C30E4130078DC13 /* chatBar_more_location.png */; };
61 | CBE2CF8F1C30E4130078DC13 /* chatBar_more_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5B1C30E4130078DC13 /* chatBar_more_location@2x.png */; };
62 | CBE2CF901C30E4130078DC13 /* chatBar_more_locationSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5C1C30E4130078DC13 /* chatBar_more_locationSelected.png */; };
63 | CBE2CF911C30E4130078DC13 /* chatBar_more_locationSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5D1C30E4130078DC13 /* chatBar_more_locationSelected@2x.png */; };
64 | CBE2CF921C30E4130078DC13 /* chatBar_more_photo.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5E1C30E4130078DC13 /* chatBar_more_photo.png */; };
65 | CBE2CF931C30E4130078DC13 /* chatBar_more_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5F1C30E4130078DC13 /* chatBar_more_photo@2x.png */; };
66 | CBE2CF941C30E4130078DC13 /* chatBar_more_photoSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF601C30E4130078DC13 /* chatBar_more_photoSelected.png */; };
67 | CBE2CF951C30E4130078DC13 /* chatBar_more_photoSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF611C30E4130078DC13 /* chatBar_more_photoSelected@2x.png */; };
68 | CBE2CF961C30E4130078DC13 /* messageToolbarBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF621C30E4130078DC13 /* messageToolbarBg@2x.png */; };
69 | CBE2CF991C30E4200078DC13 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF981C30E4200078DC13 /* ViewController.m */; };
70 | /* End PBXBuildFile section */
71 |
72 | /* Begin PBXContainerItemProxy section */
73 | CBE2CF011C30E3FA0078DC13 /* PBXContainerItemProxy */ = {
74 | isa = PBXContainerItemProxy;
75 | containerPortal = CBE2CEDF1C30E3FA0078DC13 /* Project object */;
76 | proxyType = 1;
77 | remoteGlobalIDString = CBE2CEE61C30E3FA0078DC13;
78 | remoteInfo = BCKeyBoardDemo;
79 | };
80 | CBE2CF0C1C30E3FA0078DC13 /* PBXContainerItemProxy */ = {
81 | isa = PBXContainerItemProxy;
82 | containerPortal = CBE2CEDF1C30E3FA0078DC13 /* Project object */;
83 | proxyType = 1;
84 | remoteGlobalIDString = CBE2CEE61C30E3FA0078DC13;
85 | remoteInfo = BCKeyBoardDemo;
86 | };
87 | /* End PBXContainerItemProxy section */
88 |
89 | /* Begin PBXFileReference section */
90 | CBE2CEE71C30E3FA0078DC13 /* BCKeyBoardDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BCKeyBoardDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
91 | CBE2CEEB1C30E3FA0078DC13 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
92 | CBE2CEF41C30E3FA0078DC13 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
93 | CBE2CEF61C30E3FA0078DC13 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
94 | CBE2CEF91C30E3FA0078DC13 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
95 | CBE2CEFB1C30E3FA0078DC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
96 | CBE2CF001C30E3FA0078DC13 /* BCKeyBoardDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BCKeyBoardDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
97 | CBE2CF041C30E3FA0078DC13 /* BCKeyBoardDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BCKeyBoardDemoTests.m; sourceTree = ""; };
98 | CBE2CF061C30E3FA0078DC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
99 | CBE2CF0B1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BCKeyBoardDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
100 | CBE2CF0F1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BCKeyBoardDemoUITests.m; sourceTree = ""; };
101 | CBE2CF111C30E3FA0078DC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
102 | CBE2CF1D1C30E40C0078DC13 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
103 | CBE2CF1E1C30E40C0078DC13 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
104 | CBE2CF211C30E4130078DC13 /* BCKeyBoard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCKeyBoard.h; sourceTree = ""; };
105 | CBE2CF221C30E4130078DC13 /* BCKeyBoard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCKeyBoard.m; sourceTree = ""; };
106 | CBE2CF231C30E4130078DC13 /* BCMoreView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCMoreView.h; sourceTree = ""; };
107 | CBE2CF241C30E4130078DC13 /* BCMoreView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCMoreView.m; sourceTree = ""; };
108 | CBE2CF251C30E4130078DC13 /* BCTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCTextView.h; sourceTree = ""; };
109 | CBE2CF261C30E4130078DC13 /* BCTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCTextView.m; sourceTree = ""; };
110 | CBE2CF271C30E4130078DC13 /* Const.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Const.h; sourceTree = ""; };
111 | CBE2CF291C30E4130078DC13 /* DXFaceView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DXFaceView.h; sourceTree = ""; };
112 | CBE2CF2A1C30E4130078DC13 /* DXFaceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DXFaceView.m; sourceTree = ""; };
113 | CBE2CF2B1C30E4130078DC13 /* Emoji.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Emoji.h; sourceTree = ""; };
114 | CBE2CF2C1C30E4130078DC13 /* Emoji.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Emoji.m; sourceTree = ""; };
115 | CBE2CF2D1C30E4130078DC13 /* EmojiEmoticons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmojiEmoticons.h; sourceTree = ""; };
116 | CBE2CF2E1C30E4130078DC13 /* EmojiEmoticons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmojiEmoticons.m; sourceTree = ""; };
117 | CBE2CF2F1C30E4130078DC13 /* FacialView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacialView.h; sourceTree = ""; };
118 | CBE2CF301C30E4130078DC13 /* FacialView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacialView.m; sourceTree = ""; };
119 | CBE2CF331C30E4130078DC13 /* faceDelete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = faceDelete.png; sourceTree = ""; };
120 | CBE2CF341C30E4130078DC13 /* faceDelete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "faceDelete@2x.png"; sourceTree = ""; };
121 | CBE2CF361C30E4130078DC13 /* chatBar_face.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_face.png; sourceTree = ""; };
122 | CBE2CF371C30E4130078DC13 /* chatBar_face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_face@2x.png"; sourceTree = ""; };
123 | CBE2CF381C30E4130078DC13 /* chatBar_faceSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_faceSelected.png; sourceTree = ""; };
124 | CBE2CF391C30E4130078DC13 /* chatBar_faceSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_faceSelected@2x.png"; sourceTree = ""; };
125 | CBE2CF3A1C30E4130078DC13 /* chatBar_keyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_keyboard.png; sourceTree = ""; };
126 | CBE2CF3B1C30E4130078DC13 /* chatBar_keyboard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_keyboard@2x.png"; sourceTree = ""; };
127 | CBE2CF3C1C30E4130078DC13 /* chatBar_keyboardSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_keyboardSelected.png; sourceTree = ""; };
128 | CBE2CF3D1C30E4130078DC13 /* chatBar_keyboardSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_keyboardSelected@2x.png"; sourceTree = ""; };
129 | CBE2CF3E1C30E4130078DC13 /* chatBar_more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more.png; sourceTree = ""; };
130 | CBE2CF3F1C30E4130078DC13 /* chatBar_more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more@2x.png"; sourceTree = ""; };
131 | CBE2CF401C30E4130078DC13 /* chatBar_moreSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_moreSelected.png; sourceTree = ""; };
132 | CBE2CF411C30E4130078DC13 /* chatBar_moreSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_moreSelected@2x.png"; sourceTree = ""; };
133 | CBE2CF421C30E4130078DC13 /* chatBar_record.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_record.png; sourceTree = ""; };
134 | CBE2CF431C30E4130078DC13 /* chatBar_record@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_record@2x.png"; sourceTree = ""; };
135 | CBE2CF441C30E4130078DC13 /* chatBar_recordBg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_recordBg.png; sourceTree = ""; };
136 | CBE2CF451C30E4130078DC13 /* chatBar_recordBg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_recordBg@2x.png"; sourceTree = ""; };
137 | CBE2CF461C30E4130078DC13 /* chatBar_recordSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_recordSelected.png; sourceTree = ""; };
138 | CBE2CF471C30E4130078DC13 /* chatBar_recordSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_recordSelected@2x.png"; sourceTree = ""; };
139 | CBE2CF481C30E4130078DC13 /* chatBar_recordSelectedBg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_recordSelectedBg.png; sourceTree = ""; };
140 | CBE2CF491C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_recordSelectedBg@2x.png"; sourceTree = ""; };
141 | CBE2CF4B1C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_audioCall@2x.png"; sourceTree = ""; };
142 | CBE2CF4C1C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_audioCallSelected@2x.png"; sourceTree = ""; };
143 | CBE2CF4D1C30E4130078DC13 /* chatBar_colorMore_camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_camera@2x.png"; sourceTree = ""; };
144 | CBE2CF4E1C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_cameraSelected@2x.png"; sourceTree = ""; };
145 | CBE2CF4F1C30E4130078DC13 /* chatBar_colorMore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_location@2x.png"; sourceTree = ""; };
146 | CBE2CF501C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_locationSelected@2x.png"; sourceTree = ""; };
147 | CBE2CF511C30E4130078DC13 /* chatBar_colorMore_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_photo@2x.png"; sourceTree = ""; };
148 | CBE2CF521C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_photoSelected@2x.png"; sourceTree = ""; };
149 | CBE2CF531C30E4130078DC13 /* chatBar_colorMore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_video@2x.png"; sourceTree = ""; };
150 | CBE2CF541C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_videoSelected@2x.png"; sourceTree = ""; };
151 | CBE2CF561C30E4130078DC13 /* chatBar_more_camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_camera.png; sourceTree = ""; };
152 | CBE2CF571C30E4130078DC13 /* chatBar_more_camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_camera@2x.png"; sourceTree = ""; };
153 | CBE2CF581C30E4130078DC13 /* chatBar_more_cameraSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_cameraSelected.png; sourceTree = ""; };
154 | CBE2CF591C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_cameraSelected@2x.png"; sourceTree = ""; };
155 | CBE2CF5A1C30E4130078DC13 /* chatBar_more_location.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_location.png; sourceTree = ""; };
156 | CBE2CF5B1C30E4130078DC13 /* chatBar_more_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_location@2x.png"; sourceTree = ""; };
157 | CBE2CF5C1C30E4130078DC13 /* chatBar_more_locationSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_locationSelected.png; sourceTree = ""; };
158 | CBE2CF5D1C30E4130078DC13 /* chatBar_more_locationSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_locationSelected@2x.png"; sourceTree = ""; };
159 | CBE2CF5E1C30E4130078DC13 /* chatBar_more_photo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_photo.png; sourceTree = ""; };
160 | CBE2CF5F1C30E4130078DC13 /* chatBar_more_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_photo@2x.png"; sourceTree = ""; };
161 | CBE2CF601C30E4130078DC13 /* chatBar_more_photoSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_photoSelected.png; sourceTree = ""; };
162 | CBE2CF611C30E4130078DC13 /* chatBar_more_photoSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_photoSelected@2x.png"; sourceTree = ""; };
163 | CBE2CF621C30E4130078DC13 /* messageToolbarBg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "messageToolbarBg@2x.png"; sourceTree = ""; };
164 | CBE2CF971C30E4200078DC13 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
165 | CBE2CF981C30E4200078DC13 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
166 | /* End PBXFileReference section */
167 |
168 | /* Begin PBXFrameworksBuildPhase section */
169 | CBE2CEE41C30E3FA0078DC13 /* Frameworks */ = {
170 | isa = PBXFrameworksBuildPhase;
171 | buildActionMask = 2147483647;
172 | files = (
173 | );
174 | runOnlyForDeploymentPostprocessing = 0;
175 | };
176 | CBE2CEFD1C30E3FA0078DC13 /* Frameworks */ = {
177 | isa = PBXFrameworksBuildPhase;
178 | buildActionMask = 2147483647;
179 | files = (
180 | );
181 | runOnlyForDeploymentPostprocessing = 0;
182 | };
183 | CBE2CF081C30E3FA0078DC13 /* Frameworks */ = {
184 | isa = PBXFrameworksBuildPhase;
185 | buildActionMask = 2147483647;
186 | files = (
187 | );
188 | runOnlyForDeploymentPostprocessing = 0;
189 | };
190 | /* End PBXFrameworksBuildPhase section */
191 |
192 | /* Begin PBXGroup section */
193 | CBE2CEDE1C30E3FA0078DC13 = {
194 | isa = PBXGroup;
195 | children = (
196 | CBE2CEE91C30E3FA0078DC13 /* BCKeyBoardDemo */,
197 | CBE2CF031C30E3FA0078DC13 /* BCKeyBoardDemoTests */,
198 | CBE2CF0E1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */,
199 | CBE2CEE81C30E3FA0078DC13 /* Products */,
200 | );
201 | sourceTree = "";
202 | };
203 | CBE2CEE81C30E3FA0078DC13 /* Products */ = {
204 | isa = PBXGroup;
205 | children = (
206 | CBE2CEE71C30E3FA0078DC13 /* BCKeyBoardDemo.app */,
207 | CBE2CF001C30E3FA0078DC13 /* BCKeyBoardDemoTests.xctest */,
208 | CBE2CF0B1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.xctest */,
209 | );
210 | name = Products;
211 | sourceTree = "";
212 | };
213 | CBE2CEE91C30E3FA0078DC13 /* BCKeyBoardDemo */ = {
214 | isa = PBXGroup;
215 | children = (
216 | CBE2CF201C30E4130078DC13 /* BCKeyBoard */,
217 | CBE2CF1D1C30E40C0078DC13 /* AppDelegate.h */,
218 | CBE2CF1E1C30E40C0078DC13 /* AppDelegate.m */,
219 | CBE2CF971C30E4200078DC13 /* ViewController.h */,
220 | CBE2CF981C30E4200078DC13 /* ViewController.m */,
221 | CBE2CEF31C30E3FA0078DC13 /* Main.storyboard */,
222 | CBE2CEF61C30E3FA0078DC13 /* Assets.xcassets */,
223 | CBE2CEF81C30E3FA0078DC13 /* LaunchScreen.storyboard */,
224 | CBE2CEFB1C30E3FA0078DC13 /* Info.plist */,
225 | CBE2CEEA1C30E3FA0078DC13 /* Supporting Files */,
226 | );
227 | path = BCKeyBoardDemo;
228 | sourceTree = "";
229 | };
230 | CBE2CEEA1C30E3FA0078DC13 /* Supporting Files */ = {
231 | isa = PBXGroup;
232 | children = (
233 | CBE2CEEB1C30E3FA0078DC13 /* main.m */,
234 | );
235 | name = "Supporting Files";
236 | sourceTree = "";
237 | };
238 | CBE2CF031C30E3FA0078DC13 /* BCKeyBoardDemoTests */ = {
239 | isa = PBXGroup;
240 | children = (
241 | CBE2CF041C30E3FA0078DC13 /* BCKeyBoardDemoTests.m */,
242 | CBE2CF061C30E3FA0078DC13 /* Info.plist */,
243 | );
244 | path = BCKeyBoardDemoTests;
245 | sourceTree = "";
246 | };
247 | CBE2CF0E1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */ = {
248 | isa = PBXGroup;
249 | children = (
250 | CBE2CF0F1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m */,
251 | CBE2CF111C30E3FA0078DC13 /* Info.plist */,
252 | );
253 | path = BCKeyBoardDemoUITests;
254 | sourceTree = "";
255 | };
256 | CBE2CF201C30E4130078DC13 /* BCKeyBoard */ = {
257 | isa = PBXGroup;
258 | children = (
259 | CBE2CF211C30E4130078DC13 /* BCKeyBoard.h */,
260 | CBE2CF221C30E4130078DC13 /* BCKeyBoard.m */,
261 | CBE2CF231C30E4130078DC13 /* BCMoreView.h */,
262 | CBE2CF241C30E4130078DC13 /* BCMoreView.m */,
263 | CBE2CF251C30E4130078DC13 /* BCTextView.h */,
264 | CBE2CF261C30E4130078DC13 /* BCTextView.m */,
265 | CBE2CF271C30E4130078DC13 /* Const.h */,
266 | CBE2CF281C30E4130078DC13 /* FaceVIew */,
267 | CBE2CF311C30E4130078DC13 /* image */,
268 | );
269 | path = BCKeyBoard;
270 | sourceTree = "";
271 | };
272 | CBE2CF281C30E4130078DC13 /* FaceVIew */ = {
273 | isa = PBXGroup;
274 | children = (
275 | CBE2CF291C30E4130078DC13 /* DXFaceView.h */,
276 | CBE2CF2A1C30E4130078DC13 /* DXFaceView.m */,
277 | CBE2CF2B1C30E4130078DC13 /* Emoji.h */,
278 | CBE2CF2C1C30E4130078DC13 /* Emoji.m */,
279 | CBE2CF2D1C30E4130078DC13 /* EmojiEmoticons.h */,
280 | CBE2CF2E1C30E4130078DC13 /* EmojiEmoticons.m */,
281 | CBE2CF2F1C30E4130078DC13 /* FacialView.h */,
282 | CBE2CF301C30E4130078DC13 /* FacialView.m */,
283 | );
284 | path = FaceVIew;
285 | sourceTree = "";
286 | };
287 | CBE2CF311C30E4130078DC13 /* image */ = {
288 | isa = PBXGroup;
289 | children = (
290 | CBE2CF321C30E4130078DC13 /* emoji */,
291 | CBE2CF351C30E4130078DC13 /* MessageToolbarImages */,
292 | );
293 | path = image;
294 | sourceTree = "";
295 | };
296 | CBE2CF321C30E4130078DC13 /* emoji */ = {
297 | isa = PBXGroup;
298 | children = (
299 | CBE2CF331C30E4130078DC13 /* faceDelete.png */,
300 | CBE2CF341C30E4130078DC13 /* faceDelete@2x.png */,
301 | );
302 | path = emoji;
303 | sourceTree = "";
304 | };
305 | CBE2CF351C30E4130078DC13 /* MessageToolbarImages */ = {
306 | isa = PBXGroup;
307 | children = (
308 | CBE2CF361C30E4130078DC13 /* chatBar_face.png */,
309 | CBE2CF371C30E4130078DC13 /* chatBar_face@2x.png */,
310 | CBE2CF381C30E4130078DC13 /* chatBar_faceSelected.png */,
311 | CBE2CF391C30E4130078DC13 /* chatBar_faceSelected@2x.png */,
312 | CBE2CF3A1C30E4130078DC13 /* chatBar_keyboard.png */,
313 | CBE2CF3B1C30E4130078DC13 /* chatBar_keyboard@2x.png */,
314 | CBE2CF3C1C30E4130078DC13 /* chatBar_keyboardSelected.png */,
315 | CBE2CF3D1C30E4130078DC13 /* chatBar_keyboardSelected@2x.png */,
316 | CBE2CF3E1C30E4130078DC13 /* chatBar_more.png */,
317 | CBE2CF3F1C30E4130078DC13 /* chatBar_more@2x.png */,
318 | CBE2CF401C30E4130078DC13 /* chatBar_moreSelected.png */,
319 | CBE2CF411C30E4130078DC13 /* chatBar_moreSelected@2x.png */,
320 | CBE2CF421C30E4130078DC13 /* chatBar_record.png */,
321 | CBE2CF431C30E4130078DC13 /* chatBar_record@2x.png */,
322 | CBE2CF441C30E4130078DC13 /* chatBar_recordBg.png */,
323 | CBE2CF451C30E4130078DC13 /* chatBar_recordBg@2x.png */,
324 | CBE2CF461C30E4130078DC13 /* chatBar_recordSelected.png */,
325 | CBE2CF471C30E4130078DC13 /* chatBar_recordSelected@2x.png */,
326 | CBE2CF481C30E4130078DC13 /* chatBar_recordSelectedBg.png */,
327 | CBE2CF491C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png */,
328 | CBE2CF4A1C30E4130078DC13 /* Color */,
329 | CBE2CF551C30E4130078DC13 /* Gray */,
330 | CBE2CF621C30E4130078DC13 /* messageToolbarBg@2x.png */,
331 | );
332 | path = MessageToolbarImages;
333 | sourceTree = "";
334 | };
335 | CBE2CF4A1C30E4130078DC13 /* Color */ = {
336 | isa = PBXGroup;
337 | children = (
338 | CBE2CF4B1C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png */,
339 | CBE2CF4C1C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png */,
340 | CBE2CF4D1C30E4130078DC13 /* chatBar_colorMore_camera@2x.png */,
341 | CBE2CF4E1C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png */,
342 | CBE2CF4F1C30E4130078DC13 /* chatBar_colorMore_location@2x.png */,
343 | CBE2CF501C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png */,
344 | CBE2CF511C30E4130078DC13 /* chatBar_colorMore_photo@2x.png */,
345 | CBE2CF521C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png */,
346 | CBE2CF531C30E4130078DC13 /* chatBar_colorMore_video@2x.png */,
347 | CBE2CF541C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png */,
348 | );
349 | path = Color;
350 | sourceTree = "";
351 | };
352 | CBE2CF551C30E4130078DC13 /* Gray */ = {
353 | isa = PBXGroup;
354 | children = (
355 | CBE2CF561C30E4130078DC13 /* chatBar_more_camera.png */,
356 | CBE2CF571C30E4130078DC13 /* chatBar_more_camera@2x.png */,
357 | CBE2CF581C30E4130078DC13 /* chatBar_more_cameraSelected.png */,
358 | CBE2CF591C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png */,
359 | CBE2CF5A1C30E4130078DC13 /* chatBar_more_location.png */,
360 | CBE2CF5B1C30E4130078DC13 /* chatBar_more_location@2x.png */,
361 | CBE2CF5C1C30E4130078DC13 /* chatBar_more_locationSelected.png */,
362 | CBE2CF5D1C30E4130078DC13 /* chatBar_more_locationSelected@2x.png */,
363 | CBE2CF5E1C30E4130078DC13 /* chatBar_more_photo.png */,
364 | CBE2CF5F1C30E4130078DC13 /* chatBar_more_photo@2x.png */,
365 | CBE2CF601C30E4130078DC13 /* chatBar_more_photoSelected.png */,
366 | CBE2CF611C30E4130078DC13 /* chatBar_more_photoSelected@2x.png */,
367 | );
368 | path = Gray;
369 | sourceTree = "";
370 | };
371 | /* End PBXGroup section */
372 |
373 | /* Begin PBXNativeTarget section */
374 | CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */ = {
375 | isa = PBXNativeTarget;
376 | buildConfigurationList = CBE2CF141C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemo" */;
377 | buildPhases = (
378 | CBE2CEE31C30E3FA0078DC13 /* Sources */,
379 | CBE2CEE41C30E3FA0078DC13 /* Frameworks */,
380 | CBE2CEE51C30E3FA0078DC13 /* Resources */,
381 | );
382 | buildRules = (
383 | );
384 | dependencies = (
385 | );
386 | name = BCKeyBoardDemo;
387 | productName = BCKeyBoardDemo;
388 | productReference = CBE2CEE71C30E3FA0078DC13 /* BCKeyBoardDemo.app */;
389 | productType = "com.apple.product-type.application";
390 | };
391 | CBE2CEFF1C30E3FA0078DC13 /* BCKeyBoardDemoTests */ = {
392 | isa = PBXNativeTarget;
393 | buildConfigurationList = CBE2CF171C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoTests" */;
394 | buildPhases = (
395 | CBE2CEFC1C30E3FA0078DC13 /* Sources */,
396 | CBE2CEFD1C30E3FA0078DC13 /* Frameworks */,
397 | CBE2CEFE1C30E3FA0078DC13 /* Resources */,
398 | );
399 | buildRules = (
400 | );
401 | dependencies = (
402 | CBE2CF021C30E3FA0078DC13 /* PBXTargetDependency */,
403 | );
404 | name = BCKeyBoardDemoTests;
405 | productName = BCKeyBoardDemoTests;
406 | productReference = CBE2CF001C30E3FA0078DC13 /* BCKeyBoardDemoTests.xctest */;
407 | productType = "com.apple.product-type.bundle.unit-test";
408 | };
409 | CBE2CF0A1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */ = {
410 | isa = PBXNativeTarget;
411 | buildConfigurationList = CBE2CF1A1C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoUITests" */;
412 | buildPhases = (
413 | CBE2CF071C30E3FA0078DC13 /* Sources */,
414 | CBE2CF081C30E3FA0078DC13 /* Frameworks */,
415 | CBE2CF091C30E3FA0078DC13 /* Resources */,
416 | );
417 | buildRules = (
418 | );
419 | dependencies = (
420 | CBE2CF0D1C30E3FA0078DC13 /* PBXTargetDependency */,
421 | );
422 | name = BCKeyBoardDemoUITests;
423 | productName = BCKeyBoardDemoUITests;
424 | productReference = CBE2CF0B1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.xctest */;
425 | productType = "com.apple.product-type.bundle.ui-testing";
426 | };
427 | /* End PBXNativeTarget section */
428 |
429 | /* Begin PBXProject section */
430 | CBE2CEDF1C30E3FA0078DC13 /* Project object */ = {
431 | isa = PBXProject;
432 | attributes = {
433 | LastUpgradeCheck = 0720;
434 | ORGANIZATIONNAME = io.hzlzh.yunshouyi;
435 | TargetAttributes = {
436 | CBE2CEE61C30E3FA0078DC13 = {
437 | CreatedOnToolsVersion = 7.2;
438 | };
439 | CBE2CEFF1C30E3FA0078DC13 = {
440 | CreatedOnToolsVersion = 7.2;
441 | TestTargetID = CBE2CEE61C30E3FA0078DC13;
442 | };
443 | CBE2CF0A1C30E3FA0078DC13 = {
444 | CreatedOnToolsVersion = 7.2;
445 | TestTargetID = CBE2CEE61C30E3FA0078DC13;
446 | };
447 | };
448 | };
449 | buildConfigurationList = CBE2CEE21C30E3FA0078DC13 /* Build configuration list for PBXProject "BCKeyBoardDemo" */;
450 | compatibilityVersion = "Xcode 3.2";
451 | developmentRegion = English;
452 | hasScannedForEncodings = 0;
453 | knownRegions = (
454 | en,
455 | Base,
456 | );
457 | mainGroup = CBE2CEDE1C30E3FA0078DC13;
458 | productRefGroup = CBE2CEE81C30E3FA0078DC13 /* Products */;
459 | projectDirPath = "";
460 | projectRoot = "";
461 | targets = (
462 | CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */,
463 | CBE2CEFF1C30E3FA0078DC13 /* BCKeyBoardDemoTests */,
464 | CBE2CF0A1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */,
465 | );
466 | };
467 | /* End PBXProject section */
468 |
469 | /* Begin PBXResourcesBuildPhase section */
470 | CBE2CEE51C30E3FA0078DC13 /* Resources */ = {
471 | isa = PBXResourcesBuildPhase;
472 | buildActionMask = 2147483647;
473 | files = (
474 | CBE2CF741C30E4130078DC13 /* chatBar_more.png in Resources */,
475 | CBE2CF951C30E4130078DC13 /* chatBar_more_photoSelected@2x.png in Resources */,
476 | CBE2CF701C30E4130078DC13 /* chatBar_keyboard.png in Resources */,
477 | CBE2CF6C1C30E4130078DC13 /* chatBar_face.png in Resources */,
478 | CBE2CF8D1C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png in Resources */,
479 | CBE2CEFA1C30E3FA0078DC13 /* LaunchScreen.storyboard in Resources */,
480 | CBE2CF921C30E4130078DC13 /* chatBar_more_photo.png in Resources */,
481 | CBE2CF931C30E4130078DC13 /* chatBar_more_photo@2x.png in Resources */,
482 | CBE2CF711C30E4130078DC13 /* chatBar_keyboard@2x.png in Resources */,
483 | CBE2CF901C30E4130078DC13 /* chatBar_more_locationSelected.png in Resources */,
484 | CBE2CF731C30E4130078DC13 /* chatBar_keyboardSelected@2x.png in Resources */,
485 | CBE2CF791C30E4130078DC13 /* chatBar_record@2x.png in Resources */,
486 | CBE2CF7B1C30E4130078DC13 /* chatBar_recordBg@2x.png in Resources */,
487 | CBE2CF851C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png in Resources */,
488 | CBE2CEF71C30E3FA0078DC13 /* Assets.xcassets in Resources */,
489 | CBE2CF861C30E4130078DC13 /* chatBar_colorMore_photo@2x.png in Resources */,
490 | CBE2CF8B1C30E4130078DC13 /* chatBar_more_camera@2x.png in Resources */,
491 | CBE2CEF51C30E3FA0078DC13 /* Main.storyboard in Resources */,
492 | CBE2CF751C30E4130078DC13 /* chatBar_more@2x.png in Resources */,
493 | CBE2CF911C30E4130078DC13 /* chatBar_more_locationSelected@2x.png in Resources */,
494 | CBE2CF811C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png in Resources */,
495 | CBE2CF961C30E4130078DC13 /* messageToolbarBg@2x.png in Resources */,
496 | CBE2CF6D1C30E4130078DC13 /* chatBar_face@2x.png in Resources */,
497 | CBE2CF7E1C30E4130078DC13 /* chatBar_recordSelectedBg.png in Resources */,
498 | CBE2CF841C30E4130078DC13 /* chatBar_colorMore_location@2x.png in Resources */,
499 | CBE2CF8E1C30E4130078DC13 /* chatBar_more_location.png in Resources */,
500 | CBE2CF891C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png in Resources */,
501 | CBE2CF821C30E4130078DC13 /* chatBar_colorMore_camera@2x.png in Resources */,
502 | CBE2CF7A1C30E4130078DC13 /* chatBar_recordBg.png in Resources */,
503 | CBE2CF7F1C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png in Resources */,
504 | CBE2CF6B1C30E4130078DC13 /* faceDelete@2x.png in Resources */,
505 | CBE2CF7D1C30E4130078DC13 /* chatBar_recordSelected@2x.png in Resources */,
506 | CBE2CF761C30E4130078DC13 /* chatBar_moreSelected.png in Resources */,
507 | CBE2CF8F1C30E4130078DC13 /* chatBar_more_location@2x.png in Resources */,
508 | CBE2CF941C30E4130078DC13 /* chatBar_more_photoSelected.png in Resources */,
509 | CBE2CF881C30E4130078DC13 /* chatBar_colorMore_video@2x.png in Resources */,
510 | CBE2CF6A1C30E4130078DC13 /* faceDelete.png in Resources */,
511 | CBE2CF721C30E4130078DC13 /* chatBar_keyboardSelected.png in Resources */,
512 | CBE2CF781C30E4130078DC13 /* chatBar_record.png in Resources */,
513 | CBE2CF871C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png in Resources */,
514 | CBE2CF8C1C30E4130078DC13 /* chatBar_more_cameraSelected.png in Resources */,
515 | CBE2CF8A1C30E4130078DC13 /* chatBar_more_camera.png in Resources */,
516 | CBE2CF6E1C30E4130078DC13 /* chatBar_faceSelected.png in Resources */,
517 | CBE2CF6F1C30E4130078DC13 /* chatBar_faceSelected@2x.png in Resources */,
518 | CBE2CF771C30E4130078DC13 /* chatBar_moreSelected@2x.png in Resources */,
519 | CBE2CF801C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png in Resources */,
520 | CBE2CF831C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png in Resources */,
521 | CBE2CF7C1C30E4130078DC13 /* chatBar_recordSelected.png in Resources */,
522 | );
523 | runOnlyForDeploymentPostprocessing = 0;
524 | };
525 | CBE2CEFE1C30E3FA0078DC13 /* Resources */ = {
526 | isa = PBXResourcesBuildPhase;
527 | buildActionMask = 2147483647;
528 | files = (
529 | );
530 | runOnlyForDeploymentPostprocessing = 0;
531 | };
532 | CBE2CF091C30E3FA0078DC13 /* Resources */ = {
533 | isa = PBXResourcesBuildPhase;
534 | buildActionMask = 2147483647;
535 | files = (
536 | );
537 | runOnlyForDeploymentPostprocessing = 0;
538 | };
539 | /* End PBXResourcesBuildPhase section */
540 |
541 | /* Begin PBXSourcesBuildPhase section */
542 | CBE2CEE31C30E3FA0078DC13 /* Sources */ = {
543 | isa = PBXSourcesBuildPhase;
544 | buildActionMask = 2147483647;
545 | files = (
546 | CBE2CF681C30E4130078DC13 /* EmojiEmoticons.m in Sources */,
547 | CBE2CF641C30E4130078DC13 /* BCMoreView.m in Sources */,
548 | CBE2CF661C30E4130078DC13 /* DXFaceView.m in Sources */,
549 | CBE2CF691C30E4130078DC13 /* FacialView.m in Sources */,
550 | CBE2CF991C30E4200078DC13 /* ViewController.m in Sources */,
551 | CBE2CF631C30E4130078DC13 /* BCKeyBoard.m in Sources */,
552 | CBE2CEEC1C30E3FA0078DC13 /* main.m in Sources */,
553 | CBE2CF651C30E4130078DC13 /* BCTextView.m in Sources */,
554 | CBE2CF671C30E4130078DC13 /* Emoji.m in Sources */,
555 | CBE2CF1F1C30E40C0078DC13 /* AppDelegate.m in Sources */,
556 | );
557 | runOnlyForDeploymentPostprocessing = 0;
558 | };
559 | CBE2CEFC1C30E3FA0078DC13 /* Sources */ = {
560 | isa = PBXSourcesBuildPhase;
561 | buildActionMask = 2147483647;
562 | files = (
563 | CBE2CF051C30E3FA0078DC13 /* BCKeyBoardDemoTests.m in Sources */,
564 | );
565 | runOnlyForDeploymentPostprocessing = 0;
566 | };
567 | CBE2CF071C30E3FA0078DC13 /* Sources */ = {
568 | isa = PBXSourcesBuildPhase;
569 | buildActionMask = 2147483647;
570 | files = (
571 | CBE2CF101C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m in Sources */,
572 | );
573 | runOnlyForDeploymentPostprocessing = 0;
574 | };
575 | /* End PBXSourcesBuildPhase section */
576 |
577 | /* Begin PBXTargetDependency section */
578 | CBE2CF021C30E3FA0078DC13 /* PBXTargetDependency */ = {
579 | isa = PBXTargetDependency;
580 | target = CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */;
581 | targetProxy = CBE2CF011C30E3FA0078DC13 /* PBXContainerItemProxy */;
582 | };
583 | CBE2CF0D1C30E3FA0078DC13 /* PBXTargetDependency */ = {
584 | isa = PBXTargetDependency;
585 | target = CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */;
586 | targetProxy = CBE2CF0C1C30E3FA0078DC13 /* PBXContainerItemProxy */;
587 | };
588 | /* End PBXTargetDependency section */
589 |
590 | /* Begin PBXVariantGroup section */
591 | CBE2CEF31C30E3FA0078DC13 /* Main.storyboard */ = {
592 | isa = PBXVariantGroup;
593 | children = (
594 | CBE2CEF41C30E3FA0078DC13 /* Base */,
595 | );
596 | name = Main.storyboard;
597 | sourceTree = "";
598 | };
599 | CBE2CEF81C30E3FA0078DC13 /* LaunchScreen.storyboard */ = {
600 | isa = PBXVariantGroup;
601 | children = (
602 | CBE2CEF91C30E3FA0078DC13 /* Base */,
603 | );
604 | name = LaunchScreen.storyboard;
605 | sourceTree = "";
606 | };
607 | /* End PBXVariantGroup section */
608 |
609 | /* Begin XCBuildConfiguration section */
610 | CBE2CF121C30E3FA0078DC13 /* Debug */ = {
611 | isa = XCBuildConfiguration;
612 | buildSettings = {
613 | ALWAYS_SEARCH_USER_PATHS = NO;
614 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
615 | CLANG_CXX_LIBRARY = "libc++";
616 | CLANG_ENABLE_MODULES = YES;
617 | CLANG_ENABLE_OBJC_ARC = YES;
618 | CLANG_WARN_BOOL_CONVERSION = YES;
619 | CLANG_WARN_CONSTANT_CONVERSION = YES;
620 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
621 | CLANG_WARN_EMPTY_BODY = YES;
622 | CLANG_WARN_ENUM_CONVERSION = YES;
623 | CLANG_WARN_INT_CONVERSION = YES;
624 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
625 | CLANG_WARN_UNREACHABLE_CODE = YES;
626 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
627 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
628 | COPY_PHASE_STRIP = NO;
629 | DEBUG_INFORMATION_FORMAT = dwarf;
630 | ENABLE_STRICT_OBJC_MSGSEND = YES;
631 | ENABLE_TESTABILITY = YES;
632 | GCC_C_LANGUAGE_STANDARD = gnu99;
633 | GCC_DYNAMIC_NO_PIC = NO;
634 | GCC_NO_COMMON_BLOCKS = YES;
635 | GCC_OPTIMIZATION_LEVEL = 0;
636 | GCC_PREPROCESSOR_DEFINITIONS = (
637 | "DEBUG=1",
638 | "$(inherited)",
639 | );
640 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
641 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
642 | GCC_WARN_UNDECLARED_SELECTOR = YES;
643 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
644 | GCC_WARN_UNUSED_FUNCTION = YES;
645 | GCC_WARN_UNUSED_VARIABLE = YES;
646 | IPHONEOS_DEPLOYMENT_TARGET = 9.2;
647 | MTL_ENABLE_DEBUG_INFO = YES;
648 | ONLY_ACTIVE_ARCH = YES;
649 | SDKROOT = iphoneos;
650 | TARGETED_DEVICE_FAMILY = "1,2";
651 | };
652 | name = Debug;
653 | };
654 | CBE2CF131C30E3FA0078DC13 /* Release */ = {
655 | isa = XCBuildConfiguration;
656 | buildSettings = {
657 | ALWAYS_SEARCH_USER_PATHS = NO;
658 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
659 | CLANG_CXX_LIBRARY = "libc++";
660 | CLANG_ENABLE_MODULES = YES;
661 | CLANG_ENABLE_OBJC_ARC = YES;
662 | CLANG_WARN_BOOL_CONVERSION = YES;
663 | CLANG_WARN_CONSTANT_CONVERSION = YES;
664 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
665 | CLANG_WARN_EMPTY_BODY = YES;
666 | CLANG_WARN_ENUM_CONVERSION = YES;
667 | CLANG_WARN_INT_CONVERSION = YES;
668 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
669 | CLANG_WARN_UNREACHABLE_CODE = YES;
670 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
671 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
672 | COPY_PHASE_STRIP = NO;
673 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
674 | ENABLE_NS_ASSERTIONS = NO;
675 | ENABLE_STRICT_OBJC_MSGSEND = YES;
676 | GCC_C_LANGUAGE_STANDARD = gnu99;
677 | GCC_NO_COMMON_BLOCKS = YES;
678 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
679 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
680 | GCC_WARN_UNDECLARED_SELECTOR = YES;
681 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
682 | GCC_WARN_UNUSED_FUNCTION = YES;
683 | GCC_WARN_UNUSED_VARIABLE = YES;
684 | IPHONEOS_DEPLOYMENT_TARGET = 9.2;
685 | MTL_ENABLE_DEBUG_INFO = NO;
686 | SDKROOT = iphoneos;
687 | TARGETED_DEVICE_FAMILY = "1,2";
688 | VALIDATE_PRODUCT = YES;
689 | };
690 | name = Release;
691 | };
692 | CBE2CF151C30E3FA0078DC13 /* Debug */ = {
693 | isa = XCBuildConfiguration;
694 | buildSettings = {
695 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
696 | INFOPLIST_FILE = BCKeyBoardDemo/Info.plist;
697 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
698 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemo;
699 | PRODUCT_NAME = "$(TARGET_NAME)";
700 | };
701 | name = Debug;
702 | };
703 | CBE2CF161C30E3FA0078DC13 /* Release */ = {
704 | isa = XCBuildConfiguration;
705 | buildSettings = {
706 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
707 | INFOPLIST_FILE = BCKeyBoardDemo/Info.plist;
708 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
709 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemo;
710 | PRODUCT_NAME = "$(TARGET_NAME)";
711 | };
712 | name = Release;
713 | };
714 | CBE2CF181C30E3FA0078DC13 /* Debug */ = {
715 | isa = XCBuildConfiguration;
716 | buildSettings = {
717 | BUNDLE_LOADER = "$(TEST_HOST)";
718 | INFOPLIST_FILE = BCKeyBoardDemoTests/Info.plist;
719 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
720 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoTests;
721 | PRODUCT_NAME = "$(TARGET_NAME)";
722 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BCKeyBoardDemo.app/BCKeyBoardDemo";
723 | };
724 | name = Debug;
725 | };
726 | CBE2CF191C30E3FA0078DC13 /* Release */ = {
727 | isa = XCBuildConfiguration;
728 | buildSettings = {
729 | BUNDLE_LOADER = "$(TEST_HOST)";
730 | INFOPLIST_FILE = BCKeyBoardDemoTests/Info.plist;
731 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
732 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoTests;
733 | PRODUCT_NAME = "$(TARGET_NAME)";
734 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BCKeyBoardDemo.app/BCKeyBoardDemo";
735 | };
736 | name = Release;
737 | };
738 | CBE2CF1B1C30E3FA0078DC13 /* Debug */ = {
739 | isa = XCBuildConfiguration;
740 | buildSettings = {
741 | INFOPLIST_FILE = BCKeyBoardDemoUITests/Info.plist;
742 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
743 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoUITests;
744 | PRODUCT_NAME = "$(TARGET_NAME)";
745 | TEST_TARGET_NAME = BCKeyBoardDemo;
746 | USES_XCTRUNNER = YES;
747 | };
748 | name = Debug;
749 | };
750 | CBE2CF1C1C30E3FA0078DC13 /* Release */ = {
751 | isa = XCBuildConfiguration;
752 | buildSettings = {
753 | INFOPLIST_FILE = BCKeyBoardDemoUITests/Info.plist;
754 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
755 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoUITests;
756 | PRODUCT_NAME = "$(TARGET_NAME)";
757 | TEST_TARGET_NAME = BCKeyBoardDemo;
758 | USES_XCTRUNNER = YES;
759 | };
760 | name = Release;
761 | };
762 | /* End XCBuildConfiguration section */
763 |
764 | /* Begin XCConfigurationList section */
765 | CBE2CEE21C30E3FA0078DC13 /* Build configuration list for PBXProject "BCKeyBoardDemo" */ = {
766 | isa = XCConfigurationList;
767 | buildConfigurations = (
768 | CBE2CF121C30E3FA0078DC13 /* Debug */,
769 | CBE2CF131C30E3FA0078DC13 /* Release */,
770 | );
771 | defaultConfigurationIsVisible = 0;
772 | defaultConfigurationName = Release;
773 | };
774 | CBE2CF141C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemo" */ = {
775 | isa = XCConfigurationList;
776 | buildConfigurations = (
777 | CBE2CF151C30E3FA0078DC13 /* Debug */,
778 | CBE2CF161C30E3FA0078DC13 /* Release */,
779 | );
780 | defaultConfigurationIsVisible = 0;
781 | };
782 | CBE2CF171C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoTests" */ = {
783 | isa = XCConfigurationList;
784 | buildConfigurations = (
785 | CBE2CF181C30E3FA0078DC13 /* Debug */,
786 | CBE2CF191C30E3FA0078DC13 /* Release */,
787 | );
788 | defaultConfigurationIsVisible = 0;
789 | };
790 | CBE2CF1A1C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoUITests" */ = {
791 | isa = XCConfigurationList;
792 | buildConfigurations = (
793 | CBE2CF1B1C30E3FA0078DC13 /* Debug */,
794 | CBE2CF1C1C30E3FA0078DC13 /* Release */,
795 | );
796 | defaultConfigurationIsVisible = 0;
797 | };
798 | /* End XCConfigurationList section */
799 | };
800 | rootObject = CBE2CEDF1C30E3FA0078DC13 /* Project object */;
801 | }
802 |
--------------------------------------------------------------------------------