私聊完成

This commit is contained in:
fengshuo
2024-03-01 15:39:53 +08:00
parent 41ad01515d
commit 6b87cffe44
28 changed files with 4674 additions and 4126 deletions

10
Podfile
View File

@@ -23,8 +23,18 @@ pod 'SVGAPlayer'
pod 'NIMSDK_LITE', '9.6.1' pod 'NIMSDK_LITE', '9.6.1'
pod 'TZImagePickerController'
pod 'LookinServer', :configurations => ['Debug'] pod 'LookinServer', :configurations => ['Debug']
# Pods for yinmeng-ios # Pods for yinmeng-ios
end end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
end
end
end

View File

@@ -39,6 +39,11 @@ PODS:
- SVGAPlayer/ProtoFiles - SVGAPlayer/ProtoFiles
- SVGAPlayer/ProtoFiles (2.5.7): - SVGAPlayer/ProtoFiles (2.5.7):
- Protobuf (~> 3.4) - Protobuf (~> 3.4)
- TZImagePickerController (3.8.4):
- TZImagePickerController/Basic (= 3.8.4)
- TZImagePickerController/Location (= 3.8.4)
- TZImagePickerController/Basic (3.8.4)
- TZImagePickerController/Location (3.8.4)
DEPENDENCIES: DEPENDENCIES:
- DeviceKit (~> 4.0) - DeviceKit (~> 4.0)
@@ -55,6 +60,7 @@ DEPENDENCIES:
- RxSwift - RxSwift
- SnapKit (~> 5.6.0) - SnapKit (~> 5.6.0)
- SVGAPlayer - SVGAPlayer
- TZImagePickerController
SPEC REPOS: SPEC REPOS:
https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git:
@@ -76,6 +82,7 @@ SPEC REPOS:
- SnapKit - SnapKit
- SSZipArchive - SSZipArchive
- SVGAPlayer - SVGAPlayer
- TZImagePickerController
SPEC CHECKSUMS: SPEC CHECKSUMS:
Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7 Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7
@@ -96,7 +103,8 @@ SPEC CHECKSUMS:
SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25 SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
SVGAPlayer: 318b85a78b61292d6ae9dfcd651f3f0d1cdadd86 SVGAPlayer: 318b85a78b61292d6ae9dfcd651f3f0d1cdadd86
TZImagePickerController: f1c9f1cae6ac0e30b31aaa9698f9bf4a7cf5b84f
PODFILE CHECKSUM: 27f0d4aae2435f02d30619007e2b2ba1e9205d05 PODFILE CHECKSUM: 5f55788a4e0d9fc7115e0ba01f38062806d64f6d
COCOAPODS: 1.14.3 COCOAPODS: 1.14.3

10
Pods/Manifest.lock generated
View File

@@ -39,6 +39,11 @@ PODS:
- SVGAPlayer/ProtoFiles - SVGAPlayer/ProtoFiles
- SVGAPlayer/ProtoFiles (2.5.7): - SVGAPlayer/ProtoFiles (2.5.7):
- Protobuf (~> 3.4) - Protobuf (~> 3.4)
- TZImagePickerController (3.8.4):
- TZImagePickerController/Basic (= 3.8.4)
- TZImagePickerController/Location (= 3.8.4)
- TZImagePickerController/Basic (3.8.4)
- TZImagePickerController/Location (3.8.4)
DEPENDENCIES: DEPENDENCIES:
- DeviceKit (~> 4.0) - DeviceKit (~> 4.0)
@@ -55,6 +60,7 @@ DEPENDENCIES:
- RxSwift - RxSwift
- SnapKit (~> 5.6.0) - SnapKit (~> 5.6.0)
- SVGAPlayer - SVGAPlayer
- TZImagePickerController
SPEC REPOS: SPEC REPOS:
https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git:
@@ -76,6 +82,7 @@ SPEC REPOS:
- SnapKit - SnapKit
- SSZipArchive - SSZipArchive
- SVGAPlayer - SVGAPlayer
- TZImagePickerController
SPEC CHECKSUMS: SPEC CHECKSUMS:
Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7 Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7
@@ -96,7 +103,8 @@ SPEC CHECKSUMS:
SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25 SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
SVGAPlayer: 318b85a78b61292d6ae9dfcd651f3f0d1cdadd86 SVGAPlayer: 318b85a78b61292d6ae9dfcd651f3f0d1cdadd86
TZImagePickerController: f1c9f1cae6ac0e30b31aaa9698f9bf4a7cf5b84f
PODFILE CHECKSUM: 27f0d4aae2435f02d30619007e2b2ba1e9205d05 PODFILE CHECKSUM: 5f55788a4e0d9fc7115e0ba01f38062806d64f6d
COCOAPODS: 1.14.3 COCOAPODS: 1.14.3

File diff suppressed because it is too large Load Diff

View File

@@ -151,6 +151,13 @@
<key>orderHint</key> <key>orderHint</key>
<integer>18</integer> <integer>18</integer>
</dict> </dict>
<key>TZImagePickerController.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>21</integer>
</dict>
</dict> </dict>
<key>SuppressBuildableAutocreation</key> <key>SuppressBuildableAutocreation</key>
<dict/> <dict/>

View File

@@ -600,4 +600,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
## TZImagePickerController
The MIT License (MIT)
Copyright (c) 2016 Zhen Tan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Generated by CocoaPods - https://cocoapods.org Generated by CocoaPods - https://cocoapods.org

View File

@@ -720,6 +720,38 @@ THE SOFTWARE.
<key>Type</key> <key>Type</key>
<string>PSGroupSpecifier</string> <string>PSGroupSpecifier</string>
</dict> </dict>
<dict>
<key>FooterText</key>
<string>The MIT License (MIT)
Copyright (c) 2016 Zhen Tan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
</string>
<key>License</key>
<string>MIT</string>
<key>Title</key>
<string>TZImagePickerController</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Generated by CocoaPods - https://cocoapods.org</string> <string>Generated by CocoaPods - https://cocoapods.org</string>

View File

@@ -18,3 +18,4 @@ ${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework ${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework
${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework ${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework

View File

@@ -17,3 +17,4 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVGAPlayer.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVGAPlayer.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TZImagePickerController.framework

View File

@@ -17,3 +17,4 @@ ${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework ${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework
${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework ${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework

View File

@@ -16,3 +16,4 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVGAPlayer.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVGAPlayer.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TZImagePickerController.framework

View File

@@ -195,6 +195,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework" install_framework "${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
install_framework "${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework"
fi fi
if [[ "$CONFIGURATION" == "Release" ]]; then if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
@@ -215,6 +216,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework" install_framework "${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVGAPlayer/SVGAPlayer.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
install_framework "${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework"
fi fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait wait

View File

@@ -1,11 +1,11 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_ROOT}/NIMSDK_LITE/NIMSDK" FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_ROOT}/NIMSDK_LITE/NIMSDK"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer/LookinServer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx/NSObject_Rx.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf/Protobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable/Reusable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive/SSZipArchive.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer/SVGAPlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer/LookinServer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx/NSObject_Rx.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf/Protobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable/Reusable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive/SSZipArchive.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer/SVGAPlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
OTHER_LDFLAGS = $(inherited) -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "Alamofire" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "DeviceKit" -framework "Foundation" -framework "HandyJSON" -framework "Kingfisher" -framework "LookinServer" -framework "MBProgressHUD" -framework "Moya" -framework "NIMNOS" -framework "NIMSDK" -framework "NSObject_Rx" -framework "Nuke" -framework "Protobuf" -framework "QuartzCore" -framework "Reusable" -framework "RxCocoa" -framework "RxRelay" -framework "RxSwift" -framework "SSZipArchive" -framework "SVGAPlayer" -framework "Security" -framework "SnapKit" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -weak_framework "Combine" -weak_framework "SwiftUI" OTHER_LDFLAGS = $(inherited) -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "Alamofire" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "DeviceKit" -framework "Foundation" -framework "HandyJSON" -framework "Kingfisher" -framework "LookinServer" -framework "MBProgressHUD" -framework "Moya" -framework "NIMNOS" -framework "NIMSDK" -framework "NSObject_Rx" -framework "Nuke" -framework "Photos" -framework "PhotosUI" -framework "Protobuf" -framework "QuartzCore" -framework "Reusable" -framework "RxCocoa" -framework "RxRelay" -framework "RxSwift" -framework "SSZipArchive" -framework "SVGAPlayer" -framework "Security" -framework "SnapKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "VideoToolbox" -weak_framework "Combine" -weak_framework "SwiftUI"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR} PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

View File

@@ -1,11 +1,11 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_ROOT}/NIMSDK_LITE/NIMSDK" FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_ROOT}/NIMSDK_LITE/NIMSDK"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx/NSObject_Rx.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf/Protobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable/Reusable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive/SSZipArchive.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer/SVGAPlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSObject+Rx/NSObject_Rx.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Nuke/Nuke.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf/Protobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Reusable/Reusable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive/SSZipArchive.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVGAPlayer/SVGAPlayer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
OTHER_LDFLAGS = $(inherited) -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "Alamofire" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "DeviceKit" -framework "Foundation" -framework "HandyJSON" -framework "Kingfisher" -framework "MBProgressHUD" -framework "Moya" -framework "NIMNOS" -framework "NIMSDK" -framework "NSObject_Rx" -framework "Nuke" -framework "Protobuf" -framework "QuartzCore" -framework "Reusable" -framework "RxCocoa" -framework "RxRelay" -framework "RxSwift" -framework "SSZipArchive" -framework "SVGAPlayer" -framework "Security" -framework "SnapKit" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -weak_framework "Combine" -weak_framework "SwiftUI" OTHER_LDFLAGS = $(inherited) -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "Alamofire" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "DeviceKit" -framework "Foundation" -framework "HandyJSON" -framework "Kingfisher" -framework "MBProgressHUD" -framework "Moya" -framework "NIMNOS" -framework "NIMSDK" -framework "NSObject_Rx" -framework "Nuke" -framework "Photos" -framework "PhotosUI" -framework "Protobuf" -framework "QuartzCore" -framework "Reusable" -framework "RxCocoa" -framework "RxRelay" -framework "RxSwift" -framework "SSZipArchive" -framework "SVGAPlayer" -framework "Security" -framework "SnapKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "VideoToolbox" -weak_framework "Combine" -weak_framework "SwiftUI"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR} PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

View File

@@ -7,7 +7,7 @@
<key>yinmeng-ios.xcscheme_^#shared#^_</key> <key>yinmeng-ios.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>21</integer> <integer>22</integer>
</dict> </dict>
</dict> </dict>
</dict> </dict>

View File

@@ -19,16 +19,16 @@
<BreakpointProxy <BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent <BreakpointContent
uuid = "0F9AD5F9-E68D-4D59-AA9C-49EDA3BAE3A3" uuid = "A13339C1-73DD-4996-91B1-602150B243F2"
shouldBeEnabled = "Yes" shouldBeEnabled = "Yes"
ignoreCount = "0" ignoreCount = "0"
continueAfterRunningActions = "No" continueAfterRunningActions = "No"
filePath = "yinmeng-ios/Modules/Chat/Keyboard/ChatKeyboardView.swift" filePath = "yinmeng-ios/Modules/Chat/VM/ChatViewModel.swift"
startingColumnNumber = "9223372036854775807" startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807"
startingLineNumber = "453" startingLineNumber = "329"
endingLineNumber = "453" endingLineNumber = "329"
landmarkName = "changeKeyboardHeight(_:height:)" landmarkName = "onRecvMessages(_:)"
landmarkType = "7"> landmarkType = "7">
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -7,7 +7,8 @@
import UIKit import UIKit
import NIMSDK import NIMSDK
class ChatVC: BaseViewController, HiddenNavigationBarProtocol { import TZImagePickerController
class ChatVC: BaseViewController, HiddenNavigationBarProtocol, TZImagePickerControllerDelegate{
// / // /
private var isBecome: Bool = false private var isBecome: Bool = false
@@ -57,6 +58,8 @@ class ChatVC: BaseViewController, HiddenNavigationBarProtocol {
private func registerChatCell() { private func registerChatCell() {
chatTableView.register(cellType: ChatTextCell.self) chatTableView.register(cellType: ChatTextCell.self)
chatTableView.register(cellType: ChatTimeCell.self) chatTableView.register(cellType: ChatTimeCell.self)
chatTableView.register(cellType: ChatVoiceCell.self)
chatTableView.register(cellType: ChatImageCell.self)
} }
private lazy var chatTableView: UITableView = { private lazy var chatTableView: UITableView = {
@@ -111,8 +114,20 @@ extension ChatVC: ChatKeyboardViewDelegate {
} }
func keyboard(_ keyboard: ChatKeyboardView, DidMoreMenu type: ChatMoreMenuType) { func keyboard(_ keyboard: ChatKeyboardView, DidMoreMenu type: ChatMoreMenuType) {
if type == .album {
//TODO: let imagePicker = TZImagePickerController(maxImagesCount: 1, columnNumber: 5, delegate: self)
imagePicker?.allowPickingVideo = false
imagePicker?.modalPresentationStyle = .fullScreen
imagePicker?.didFinishPickingPhotosHandle = {(images: [UIImage]?, assets:[Any]?, isSelectOriginalPhoto: Bool) in
if (type == .album) {
if let image = images?[safe:0] {
self.vm.sendImageMessage(image: image) { _ in}
}
}
}
self.navigationController?.present(imagePicker!, animated: true)
keyboard.hiddenMoreView()
}
} }
func keyboard(_ keyboard: ChatKeyboardView, DidObserver offsetY: CGFloat) { func keyboard(_ keyboard: ChatKeyboardView, DidObserver offsetY: CGFloat) {
@@ -123,6 +138,7 @@ extension ChatVC: ChatKeyboardViewDelegate {
extension ChatVC { extension ChatVC {
func requestInfo() { func requestInfo() {
self.navView.uid = vm.session.sessionId
let params = ["uid": vm.session.sessionId] let params = ["uid": vm.session.sessionId]
RequestGet(path: "user/get", parma: params) { data in RequestGet(path: "user/get", parma: params) { data in
if let info = Deserialized<UserObject>.toModel(with: data) { if let info = Deserialized<UserObject>.toModel(with: data) {
@@ -133,7 +149,7 @@ extension ChatVC {
} }
let par:[String : Any] = ["uid": AuthManager.userUid, "isLikeUid": vm.session.sessionId] let par:[String : Any] = ["uid": AuthManager.userUid, "isLikeUid": vm.session.sessionId]
RequestGet(path: "fans/isLike", parma: par) { data in RequestGet(path: "fans/islike", parma: par) { data in
if let isLike = data as? Bool { if let isLike = data as? Bool {
self.navView.isLike = isLike self.navView.isLike = isLike
} }
@@ -194,6 +210,7 @@ extension ChatVC {
animated: false animated: false
) )
} }
chatTableView.reloadData()
} }
public func tableViewDeleteIndexs(_ indexs: [IndexPath]) { public func tableViewDeleteIndexs(_ indexs: [IndexPath]) {
@@ -211,7 +228,7 @@ extension ChatVC {
} }
extension ChatVC: ChatViewModelDelegate{ extension ChatVC: ChatViewModelDelegate{
public func onRecvMessages(_ messages: [NIMMessage]) { public func onRecvMessages1(_ messages: [NIMMessage]) {
insertRows() insertRows()
vm.markRead(messages: messages) { error in vm.markRead(messages: messages) { error in
@@ -229,7 +246,9 @@ extension ChatVC: ChatViewModelDelegate{
public func send(_ message: NIMMessage, progress: Float) {} public func send(_ message: NIMMessage, progress: Float) {}
public func send(_ message: NIMMessage, didCompleteWithError error: Error?) { public func send(_ message: NIMMessage, didCompleteWithError error: Error?) {
if error == nil {
insertRows()
}
} }
private func indexPathsWithMessags(_ messages: [NIMMessage]) -> [IndexPath] { private func indexPathsWithMessags(_ messages: [NIMMessage]) -> [IndexPath] {
@@ -263,10 +282,21 @@ extension ChatVC: UITableViewDelegate, UITableViewDataSource, UIScrollViewDelega
if model?.type == .text { if model?.type == .text {
let cell = tableView.dequeueReusableCell(for: indexPath, cellType: ChatTextCell.self) let cell = tableView.dequeueReusableCell(for: indexPath, cellType: ChatTextCell.self)
cell.model = model cell.model = model
return cell
} else if model?.type == .time { } else if model?.type == .time {
let cell = tableView.dequeueReusableCell(for: indexPath, cellType: ChatTimeCell.self) let cell = tableView.dequeueReusableCell(for: indexPath, cellType: ChatTimeCell.self)
cell.model = model cell.model = model
return cell
} else if model?.type == .voice {
let cell = tableView.dequeueReusableCell(for: indexPath, cellType: ChatVoiceCell.self)
cell.model = model
return cell
} else if model?.type == .image {
let cell = tableView.dequeueReusableCell(for: indexPath, cellType: ChatImageCell.self)
cell.model = model
return cell
} }
return UITableViewCell() return UITableViewCell()
} }

View File

@@ -33,7 +33,8 @@ class ChatKeyboardView: UIView {
private let kLeft: CGFloat = 12.0 private let kLeft: CGFloat = 12.0
private let kSpace: CGFloat = 12.0 private let kSpace: CGFloat = 12.0
private let kViewWH: CGFloat = 26.0 private let kViewWH: CGFloat = 26.0
private let kLineHeight: CGFloat = 0.75 private let kTextHeight: CGFloat = 36
// MARK: - var lazy // MARK: - var lazy
@@ -69,7 +70,7 @@ class ChatKeyboardView: UIView {
fileprivate lazy var changeButton : UIButton = { fileprivate lazy var changeButton : UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
let x: CGFloat = self.kLeft let x: CGFloat = self.kLeft
button.frame = CGRect(x: x, y: self.kSpace + 5, width: self.kViewWH, height: self.kViewWH) button.frame = CGRect(x: x, y: self.kSpace + (kTextHeight - kViewWH) / 2.0, width: self.kViewWH, height: self.kViewWH)
button.setImage(UIImage(named: "chat_input_text"), for: .normal) button.setImage(UIImage(named: "chat_input_text"), for: .normal)
button.setImage(UIImage(named: "chat_voice"), for: .highlighted) button.setImage(UIImage(named: "chat_voice"), for: .highlighted)
button.addTarget(self, action: #selector(changeDidAction(_:)), for: .touchUpInside) button.addTarget(self, action: #selector(changeDidAction(_:)), for: .touchUpInside)
@@ -80,7 +81,7 @@ class ChatKeyboardView: UIView {
fileprivate lazy var moreButton : UIButton = { fileprivate lazy var moreButton : UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
let x: CGFloat = ScreenWidth - self.kViewWH - self.kSpace let x: CGFloat = ScreenWidth - self.kViewWH - self.kSpace
button.frame = CGRect(x: x, y: self.kSpace + 5, width: self.kViewWH, height: self.kViewWH) button.frame = CGRect(x: x, y: self.kSpace + (kTextHeight - kViewWH) / 2.0, width: self.kViewWH, height: self.kViewWH)
button.setImage(UIImage(named: "chat_more"), for: .normal) button.setImage(UIImage(named: "chat_more"), for: .normal)
button.setImage(UIImage(named: "chat_more"), for: .highlighted) button.setImage(UIImage(named: "chat_more"), for: .highlighted)
button.addTarget(self, action: #selector(moreDidAction(_:)), for: .touchUpInside) button.addTarget(self, action: #selector(moreDidAction(_:)), for: .touchUpInside)
@@ -90,7 +91,7 @@ class ChatKeyboardView: UIView {
/// ///
fileprivate lazy var chatTextView: ChatGrowingTextView = { fileprivate lazy var chatTextView: ChatGrowingTextView = {
let w: CGFloat = ScreenWidth - self.kViewWH * 2 - self.kSpace * 3 - self.kSpace let w: CGFloat = ScreenWidth - self.kViewWH * 2 - self.kSpace * 3 - self.kSpace
let textView = ChatGrowingTextView(frame: CGRect(x: self.kSpace + self.kLeft + self.kViewWH, y: self.kSpace, width: w, height: 36)) let textView = ChatGrowingTextView(frame: CGRect(x: self.kSpace + self.kLeft + self.kViewWH, y: self.kSpace, width: w, height: kTextHeight))
textView.placeholder = "请输入..." textView.placeholder = "请输入..."
textView.textColor = ThemeColor(hexStr: "#000000") textView.textColor = ThemeColor(hexStr: "#000000")
textView.maxNumberOfLines = 5 textView.maxNumberOfLines = 5
@@ -310,6 +311,7 @@ extension ChatKeyboardView {
keyboardHeight = endFrame.height keyboardHeight = endFrame.height
// //
isShowKeyboard = false isShowKeyboard = false
contentHeight = 0
let option = userInfo["UIKeyboardAnimationCurveUserInfoKey"] as! Int let option = userInfo["UIKeyboardAnimationCurveUserInfoKey"] as! Int
let changedY = ScreenHeight - self.toolBarHeight - self.contentHeight let changedY = ScreenHeight - self.toolBarHeight - self.contentHeight
@@ -413,6 +415,14 @@ extension ChatKeyboardView {
delegate?.keyboard(self, DidBecome: true) delegate?.keyboard(self, DidBecome: true)
} }
func hiddenMoreView() {
contentView.isHidden = true
moreMenuView.isHidden = true
isShowMore = false
contentHeight = 0.0
restToolbarContentHeight()
}
/// ///
func restToolbarContentHeight(_ isRest: Bool = false) { func restToolbarContentHeight(_ isRest: Bool = false) {
var changedY = ScreenHeight - self.toolBarHeight - contentHeight var changedY = ScreenHeight - self.toolBarHeight - contentHeight
@@ -433,6 +443,8 @@ extension ChatKeyboardView {
self.layoutIfNeeded() self.layoutIfNeeded()
} }
} }
// MARK: - // MARK: -
@@ -446,7 +458,7 @@ extension ChatKeyboardView {
toolBarView.frame = CGRect(x: toolBarView.x, y: 0, width: toolBarView.width, height: toolBarHeight) toolBarView.frame = CGRect(x: toolBarView.x, y: 0, width: toolBarView.width, height: toolBarHeight)
let spaceY = toolBarView.height - kSpace - kViewWH let spaceY = toolBarView.height - kSpace - kViewWH
chatTextView.frame = CGRect(x: chatTextView.x, y: chatTextView.x, width: chatTextView.width, height: textHeight) chatTextView.frame = CGRect(x: chatTextView.x, y: chatTextView.y, width: chatTextView.width, height: textHeight)
moreButton.frame = CGRect(x: moreButton.x, y: spaceY, width: moreButton.width, height: moreButton.height) moreButton.frame = CGRect(x: moreButton.x, y: spaceY, width: moreButton.width, height: moreButton.height)
contentView.frame = CGRect(x: contentView.x, y: toolBarView.maxY, width: contentView.width, height: contentHeight) contentView.frame = CGRect(x: contentView.x, y: toolBarView.maxY, width: contentView.width, height: contentHeight)

View File

@@ -112,10 +112,10 @@ class ChatVoiceObject: ChatBaseObject {
required init(msg: NIMMessage?) { required init(msg: NIMMessage?) {
super.init(msg: msg) super.init(msg: msg)
type = .voice type = .voice
let voiceHeight = 30.0 let voiceHeight = 40.0
if let content = msg?.messageObject as? NIMAudioObject { if let content = msg?.messageObject as? NIMAudioObject {
let scale = 2*atan((Double(content.duration)/1000.0-1)/10.0)/M_PI; let scale = 2*atan((Double(content.duration)/1000.0-1)/9.0)/M_PI;
let low = (ChatUIConfig.layout.contentMaxWidth - 180) let low = (ChatUIConfig.layout.contentMaxWidth - 160)
let max = (ChatUIConfig.layout.contentMaxWidth - 100) let max = (ChatUIConfig.layout.contentMaxWidth - 100)
let width = (max - low) * scale + low let width = (max - low) * scale + low
if let path = content.path { if let path = content.path {
@@ -125,7 +125,7 @@ class ChatVoiceObject: ChatBaseObject {
contentSize = CGSize(width: width, height: voiceHeight) contentSize = CGSize(width: width, height: voiceHeight)
height = Float(voiceHeight + ChatUIConfig.layout.cellContentInsets.bottom + ChatUIConfig.layout.cellContentInsets.top) height = Float(voiceHeight + ChatUIConfig.layout.cellContentInsets.bottom + ChatUIConfig.layout.cellContentInsets.top)
} else { } else {
let low = (ChatUIConfig.layout.contentMaxWidth - 180) let low = (ChatUIConfig.layout.contentMaxWidth - 160)
contentSize = CGSize(width: low , height: voiceHeight) contentSize = CGSize(width: low , height: voiceHeight)
height = Float(voiceHeight + ChatUIConfig.layout.cellContentInsets.bottom + ChatUIConfig.layout.cellContentInsets.top) height = Float(voiceHeight + ChatUIConfig.layout.cellContentInsets.bottom + ChatUIConfig.layout.cellContentInsets.top)
} }

View File

@@ -25,13 +25,12 @@ public protocol ChatViewModelDelegate: NSObjectProtocol {
func send(_ message: NIMMessage, didCompleteWithError error: Error?) func send(_ message: NIMMessage, didCompleteWithError error: Error?)
func send(_ message: NIMMessage, progress: Float) func send(_ message: NIMMessage, progress: Float)
func onRecvMessages(_ messages: [NIMMessage]) func onRecvMessages1(_ messages: [NIMMessage])
func willSend(_ message: NIMMessage) func willSend(_ message: NIMMessage)
} }
public class ChatViewModel: NSObject, public class ChatViewModel: NSObject, NIMChatManagerDelegate {
NIMConversationManagerDelegate, NIMSystemNotificationManagerDelegate {
private var userInfo = [String: NIMUser]() private var userInfo = [String: NIMUser]()
public let messagPageNum: UInt = 100 public let messagPageNum: UInt = 100
@@ -52,8 +51,6 @@ public class ChatViewModel: NSObject,
private func addMessageListener() { private func addMessageListener() {
NIMSDK.shared().chatManager.add(self) NIMSDK.shared().chatManager.add(self)
NIMSDK.shared().conversationManager.add(self)
NIMSDK.shared().systemNotificationManager.add(self)
} }
init(session: NIMSession) { init(session: NIMSession) {
@@ -316,6 +313,67 @@ public class ChatViewModel: NSObject,
} }
} }
public func send(_ message: NIMMessage, didCompleteWithError error: Error?) {
for (i, msg) in messageObjects.enumerated() {
if message.messageId == msg.msg?.messageId {
messageObjects[i].msg = message
break
}
}
delegate?.send(message, didCompleteWithError: error)
}
//
public func onRecvMessages(_ messages: [NIMMessage]) {
for msg in messages {
if msg.session?.sessionId == session.sessionId {
if let model = modelTransformMessage(message: msg) {
newMsg = msg
addTimeMessage(msg)
self.messageObjects.append(model)
}
}
}
delegate?.onRecvMessages1(messages)
}
public func willSend(_ message: NIMMessage) {
if message.session?.sessionId != session.sessionId {
return
}
guard let model = modelTransformMessage(message: message) else { return }
if newMsg == nil {
newMsg = message
}
var isResend = false
for (i, msg) in messageObjects.enumerated() {
if message.messageId == msg.msg?.messageId {
messageObjects[i].msg = message
isResend = true
break
}
}
if !isResend {
addTimeMessage(message)
messageObjects.append(model)
}
delegate?.didAppend(message)
}
public func onReceive(_ notification: NIMCustomSystemNotification) {
}
public func send(_ message: NIMMessage, progress: Float) {
delegate?.send(message, progress: progress)
}
@discardableResult @discardableResult
public func resendMessage(message: NIMMessage) -> Error? { public func resendMessage(message: NIMMessage) -> Error? {
@@ -600,66 +658,3 @@ public class ChatViewModel: NSObject,
} }
} }
extension ChatViewModel: NIMChatManagerDelegate {
// MARK: NIMChatManagerDelegate
public func send(_ message: NIMMessage, didCompleteWithError error: Error?) {
for (i, msg) in messageObjects.enumerated() {
if message.messageId == msg.msg?.messageId {
messageObjects[i].msg = message
break
}
}
delegate?.send(message, didCompleteWithError: error)
}
//
public func onRecvMessages(_ messages: [NIMMessage]) {
for msg in messages {
if msg.session?.sessionId == session.sessionId {
if let model = modelTransformMessage(message: msg) {
newMsg = msg
addTimeMessage(msg)
self.messageObjects.append(model)
}
}
}
delegate?.onRecvMessages(messages)
}
public func willSend(_ message: NIMMessage) {
if message.session?.sessionId != session.sessionId {
return
}
guard let model = modelTransformMessage(message: message) else { return }
if newMsg == nil {
newMsg = message
}
var isResend = false
for (i, msg) in messageObjects.enumerated() {
if message.messageId == msg.msg?.messageId {
messageObjects[i].msg = message
isResend = true
break
}
}
if !isResend {
addTimeMessage(message)
messageObjects.append(model)
}
delegate?.didAppend(message)
}
public func onReceive(_ notification: NIMCustomSystemNotification) {
}
public func send(_ message: NIMMessage, progress: Float) {
delegate?.send(message, progress: progress)
}
}

View File

@@ -55,7 +55,7 @@ class ChatBaseCell: UITableViewCell, Reusable{
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier) super.init(style: style, reuseIdentifier: reuseIdentifier)
selectionStyle = .none selectionStyle = .none
backgroundColor = ThemeColor(hexStr: "#F8F8FB") backgroundColor = .clear
contentView.addSubview(avatarImgView) contentView.addSubview(avatarImgView)
contentView.addSubview(bubbleView) contentView.addSubview(bubbleView)
contentView.addSubview(activityIndicatorView) contentView.addSubview(activityIndicatorView)

View File

@@ -37,6 +37,11 @@ class ChatImageCell: ChatBaseCell {
return imageView return imageView
}() }()
override func layoutMessageCell() {
super.layoutMessageCell()
setupCellLayout()
}
} }
extension ChatImageCell { extension ChatImageCell {

View File

@@ -8,6 +8,7 @@
import UIKit import UIKit
class ChatNavView: BaseView { class ChatNavView: BaseView {
var uid:String = ""
var isLike:Bool? { var isLike:Bool? {
didSet { didSet {
@@ -54,6 +55,7 @@ class ChatNavView: BaseView {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.setImage(UIImage(named: "chat_back"), for: .normal) button.setImage(UIImage(named: "chat_back"), for: .normal)
button.setImage(UIImage(named: "chat_back"), for: .selected) button.setImage(UIImage(named: "chat_back"), for: .selected)
button.addTarget(self, action: #selector(backClick), for: .touchUpInside)
return button return button
}() }()
@@ -82,10 +84,35 @@ class ChatNavView: BaseView {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.setImage(UIImage(named: "chat_opt"), for: .normal) button.setImage(UIImage(named: "chat_opt"), for: .normal)
button.setImage(UIImage(named: "chat_opt"), for: .selected) button.setImage(UIImage(named: "chat_opt"), for: .selected)
button.addTarget(self, action: #selector(optClick), for: .touchUpInside)
return button return button
}() }()
@objc func optClick() {
let alertController = UIAlertController(title: nil,
message: nil,
preferredStyle: .actionSheet)
alertController.addAction(UIAlertAction(title: "举报", style: .default, handler: { action in
HUDTool.show(with: "举报成功, 我们将尽快处理")
}))
alertController.addAction(UIAlertAction(title: "取消", style: .cancel, handler: { action in
}))
YMRequestX.topViewController()?.present(alertController, animated: true, completion: nil)
}
@objc func likeClick() { @objc func likeClick() {
//TODO: let params:[String: Any] = ["uid": AuthManager.userUid, "ticket": AuthManager.ticket, "type":"1", "likedUid": uid]
RequestPost(path: "fans/like", parma: params) { _ in
self.likeBtn.isHidden = true
} fail: { code, msg in
HUDTool.show(with: msg)
}
}
@objc func backClick() {
YMRequestX.topViewController()?.navigationController?.popViewController(animated: true)
} }
} }

View File

@@ -21,7 +21,7 @@ class ChatTimeCell: UITableViewCell, Reusable {
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier) super.init(style: style, reuseIdentifier: reuseIdentifier)
selectionStyle = .none selectionStyle = .none
backgroundColor = ThemeColor(hexStr: "#F8F8FB") backgroundColor = .clear
contentView.addSubview(timeLb) contentView.addSubview(timeLb)
timeLb.snp.makeConstraints { make in timeLb.snp.makeConstraints { make in
make.edges.equalTo(contentView) make.edges.equalTo(contentView)

View File

@@ -12,7 +12,7 @@ class ChatVoiceCell: ChatBaseCell, NIMMediaManagerDelegate {
override var model: ChatSessionProtocol? { override var model: ChatSessionProtocol? {
didSet { didSet {
if let model = model as? ChatVoiceObject { if let model = model as? ChatVoiceObject {
timeLabel.text = "\(model.duartion / 1000)" timeLabel.text = "\(model.duartion / 1000)s"
} }
} }
} }
@@ -28,8 +28,8 @@ class ChatVoiceCell: ChatBaseCell, NIMMediaManagerDelegate {
let imageView = UIImageView() let imageView = UIImageView()
imageView.isUserInteractionEnabled = true imageView.isUserInteractionEnabled = true
let firstImage = UIImage(named:"chat_audio_playing_first")! let firstImage = UIImage(named:"chat_audio_playing_first")!
let second = UIImage(named:"chat_audio_playing_first")! let second = UIImage(named:"chat_audio_playing_second")!
let third = UIImage(named:"chat_audio_playing_first")! let third = UIImage(named:"chat_audio_playing_third")!
imageView.animationImages = [firstImage, second, third]; imageView.animationImages = [firstImage, second, third];
imageView.animationDuration = 1 imageView.animationDuration = 1
imageView.animationRepeatCount = 100 imageView.animationRepeatCount = 100
@@ -42,6 +42,8 @@ class ChatVoiceCell: ChatBaseCell, NIMMediaManagerDelegate {
NIMSDK.shared().mediaManager.setNeedProximityMonitor(false) NIMSDK.shared().mediaManager.setNeedProximityMonitor(false)
NIMSDK.shared().mediaManager.add(self) NIMSDK.shared().mediaManager.add(self)
loadSubViews() loadSubViews()
let tap = UITapGestureRecognizer(target: self, action: #selector(didTapBackRecognizer))
addGestureRecognizer(tap)
} }
@@ -89,6 +91,10 @@ class ChatVoiceCell: ChatBaseCell, NIMMediaManagerDelegate {
} }
} }
override func layoutMessageCell() {
super.layoutMessageCell()
setupCellLayout()
}
} }