个人资料页 编辑个人资料页
This commit is contained in:
2
Podfile
2
Podfile
@@ -20,6 +20,8 @@ target 'xplan-ios' do
|
|||||||
pod 'SDWebImage'
|
pod 'SDWebImage'
|
||||||
#输入
|
#输入
|
||||||
pod 'SZTextView'
|
pod 'SZTextView'
|
||||||
|
#轮播图
|
||||||
|
pod 'SDCycleScrollView'
|
||||||
#登录的
|
#登录的
|
||||||
pod 'mob_sharesdk'
|
pod 'mob_sharesdk'
|
||||||
pod 'mob_sharesdk/ShareSDKPlatforms/QQ'
|
pod 'mob_sharesdk/ShareSDKPlatforms/QQ'
|
||||||
|
@@ -35,6 +35,8 @@ PODS:
|
|||||||
- MOBFoundation (3.2.27)
|
- MOBFoundation (3.2.27)
|
||||||
- NTESQuickPass (2.1.9)
|
- NTESQuickPass (2.1.9)
|
||||||
- ReactiveObjC (3.1.1)
|
- ReactiveObjC (3.1.1)
|
||||||
|
- SDCycleScrollView (1.82):
|
||||||
|
- SDWebImage (>= 5.0.0)
|
||||||
- SDWebImage (5.11.1):
|
- SDWebImage (5.11.1):
|
||||||
- SDWebImage/Core (= 5.11.1)
|
- SDWebImage/Core (= 5.11.1)
|
||||||
- SDWebImage/Core (5.11.1)
|
- SDWebImage/Core (5.11.1)
|
||||||
@@ -53,6 +55,7 @@ DEPENDENCIES:
|
|||||||
- mob_sharesdk/ShareSDKPlatforms/WeChat
|
- mob_sharesdk/ShareSDKPlatforms/WeChat
|
||||||
- NTESQuickPass (~> 2.1.6)
|
- NTESQuickPass (~> 2.1.6)
|
||||||
- ReactiveObjC
|
- ReactiveObjC
|
||||||
|
- SDCycleScrollView
|
||||||
- SDWebImage
|
- SDWebImage
|
||||||
- SZTextView
|
- SZTextView
|
||||||
- YYText
|
- YYText
|
||||||
@@ -68,6 +71,7 @@ SPEC REPOS:
|
|||||||
- MOBFoundation
|
- MOBFoundation
|
||||||
- NTESQuickPass
|
- NTESQuickPass
|
||||||
- ReactiveObjC
|
- ReactiveObjC
|
||||||
|
- SDCycleScrollView
|
||||||
- SDWebImage
|
- SDWebImage
|
||||||
- SZTextView
|
- SZTextView
|
||||||
- YYText
|
- YYText
|
||||||
@@ -82,10 +86,11 @@ SPEC CHECKSUMS:
|
|||||||
MOBFoundation: efdc3ce6b843fbc10ae8c1c6122a02b0d845b39b
|
MOBFoundation: efdc3ce6b843fbc10ae8c1c6122a02b0d845b39b
|
||||||
NTESQuickPass: 8431dc52737c95883cd382c2ee75664d58f39377
|
NTESQuickPass: 8431dc52737c95883cd382c2ee75664d58f39377
|
||||||
ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
|
ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
|
||||||
|
SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
|
||||||
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
|
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
|
||||||
SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1
|
SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1
|
||||||
YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
|
YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
|
||||||
|
|
||||||
PODFILE CHECKSUM: d5910ffe3f02430dd36728a17554f28258564c74
|
PODFILE CHECKSUM: a4cc983fad6d0cd9a7283a7dc7e989a39c24fc18
|
||||||
|
|
||||||
COCOAPODS: 1.10.1
|
COCOAPODS: 1.10.1
|
||||||
|
@@ -133,6 +133,8 @@
|
|||||||
E88B5CB826FB325200DA9178 /* XPMineTeenagerPwdPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CB726FB325200DA9178 /* XPMineTeenagerPwdPresenter.m */; };
|
E88B5CB826FB325200DA9178 /* XPMineTeenagerPwdPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CB726FB325200DA9178 /* XPMineTeenagerPwdPresenter.m */; };
|
||||||
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */; };
|
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */; };
|
||||||
E88B5CBD26FB3BDF00DA9178 /* XPTeenagerAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CBC26FB3BDF00DA9178 /* XPTeenagerAlertView.m */; };
|
E88B5CBD26FB3BDF00DA9178 /* XPTeenagerAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CBC26FB3BDF00DA9178 /* XPTeenagerAlertView.m */; };
|
||||||
|
E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CC026FB407B00DA9178 /* XPMineUserInfoViewController.m */; };
|
||||||
|
E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */; };
|
||||||
E8AC720D26F435F5007D6E91 /* UIImageView+LoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */; };
|
E8AC720D26F435F5007D6E91 /* UIImageView+LoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */; };
|
||||||
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720F26F43955007D6E91 /* UIImageConstant.m */; };
|
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720F26F43955007D6E91 /* UIImageConstant.m */; };
|
||||||
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC721226F46ADD007D6E91 /* XPMineSettingViewController.m */; };
|
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC721226F46ADD007D6E91 /* XPMineSettingViewController.m */; };
|
||||||
@@ -168,6 +170,21 @@
|
|||||||
E8E70D8C26F2F5A500F03460 /* XPMineMatchCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D8B26F2F5A500F03460 /* XPMineMatchCollectionViewCell.m */; };
|
E8E70D8C26F2F5A500F03460 /* XPMineMatchCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D8B26F2F5A500F03460 /* XPMineMatchCollectionViewCell.m */; };
|
||||||
E8E70D8F26F2F5DB00F03460 /* XPMineMenuTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D8E26F2F5DB00F03460 /* XPMineMenuTableViewCell.m */; };
|
E8E70D8F26F2F5DB00F03460 /* XPMineMenuTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D8E26F2F5DB00F03460 /* XPMineMenuTableViewCell.m */; };
|
||||||
E8E70D9226F2F60C00F03460 /* XPMineItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D9126F2F60C00F03460 /* XPMineItemModel.m */; };
|
E8E70D9226F2F60C00F03460 /* XPMineItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D9126F2F60C00F03460 /* XPMineItemModel.m */; };
|
||||||
|
E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8EC26FC2050007C6EBA /* SDPhotoBrowser.m */; };
|
||||||
|
E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8ED26FC2050007C6EBA /* SDWaitingView.m */; };
|
||||||
|
E8EEB8F426FC2050007C6EBA /* SDBrowserImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8EE26FC2050007C6EBA /* SDBrowserImageView.m */; };
|
||||||
|
E8EEB8F726FC2673007C6EBA /* UserPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8F626FC2673007C6EBA /* UserPhoto.m */; };
|
||||||
|
E8EEB8FB26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8FA26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m */; };
|
||||||
|
E8EEB8FE26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8FD26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m */; };
|
||||||
|
E8EEB90126FC31B6007C6EBA /* XPMineUserInfoPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB90026FC31B6007C6EBA /* XPMineUserInfoPresenter.m */; };
|
||||||
|
E8EEB90326FC31DC007C6EBA /* XPMineUserInfoProtocol.h in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB90226FC31CE007C6EBA /* XPMineUserInfoProtocol.h */; };
|
||||||
|
E8EEB90626FC5772007C6EBA /* XPMineUserInfoEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB90526FC5772007C6EBA /* XPMineUserInfoEditViewController.m */; };
|
||||||
|
E8EEB90926FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB90826FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m */; };
|
||||||
|
E8EEB90C26FC5EBC007C6EBA /* XPMineUserInfoEditModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB90B26FC5EBC007C6EBA /* XPMineUserInfoEditModel.m */; };
|
||||||
|
E8EEB90F26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB90E26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m */; };
|
||||||
|
E8EEB91126FC6AE2007C6EBA /* XPMineUserInfoEditProtocol.h in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB91026FC6AD3007C6EBA /* XPMineUserInfoEditProtocol.h */; };
|
||||||
|
E8EEB91426FC7786007C6EBA /* XPMineUserInfoNickViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB91326FC7786007C6EBA /* XPMineUserInfoNickViewController.m */; };
|
||||||
|
E8EEB91726FC7B35007C6EBA /* XPMineUserInfoDesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB91626FC7B35007C6EBA /* XPMineUserInfoDesViewController.m */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
@@ -409,6 +426,10 @@
|
|||||||
E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineTeenagerPwdProtocol.h; sourceTree = "<group>"; };
|
E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineTeenagerPwdProtocol.h; sourceTree = "<group>"; };
|
||||||
E88B5CBB26FB3BDF00DA9178 /* XPTeenagerAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPTeenagerAlertView.h; sourceTree = "<group>"; };
|
E88B5CBB26FB3BDF00DA9178 /* XPTeenagerAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPTeenagerAlertView.h; sourceTree = "<group>"; };
|
||||||
E88B5CBC26FB3BDF00DA9178 /* XPTeenagerAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPTeenagerAlertView.m; sourceTree = "<group>"; };
|
E88B5CBC26FB3BDF00DA9178 /* XPTeenagerAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPTeenagerAlertView.m; sourceTree = "<group>"; };
|
||||||
|
E88B5CBF26FB407B00DA9178 /* XPMineUserInfoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoViewController.h; sourceTree = "<group>"; };
|
||||||
|
E88B5CC026FB407B00DA9178 /* XPMineUserInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoViewController.m; sourceTree = "<group>"; };
|
||||||
|
E88B5CC326FB42B000DA9178 /* XPMineUserInfoHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoHeaderView.h; sourceTree = "<group>"; };
|
||||||
|
E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoHeaderView.m; sourceTree = "<group>"; };
|
||||||
E8AC720B26F435F5007D6E91 /* UIImageView+LoadImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LoadImage.h"; sourceTree = "<group>"; };
|
E8AC720B26F435F5007D6E91 /* UIImageView+LoadImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LoadImage.h"; sourceTree = "<group>"; };
|
||||||
E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LoadImage.m"; sourceTree = "<group>"; };
|
E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LoadImage.m"; sourceTree = "<group>"; };
|
||||||
E8AC720E26F43955007D6E91 /* UIImageConstant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIImageConstant.h; sourceTree = "<group>"; };
|
E8AC720E26F43955007D6E91 /* UIImageConstant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIImageConstant.h; sourceTree = "<group>"; };
|
||||||
@@ -477,6 +498,35 @@
|
|||||||
E8E70D8E26F2F5DB00F03460 /* XPMineMenuTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineMenuTableViewCell.m; sourceTree = "<group>"; };
|
E8E70D8E26F2F5DB00F03460 /* XPMineMenuTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineMenuTableViewCell.m; sourceTree = "<group>"; };
|
||||||
E8E70D9026F2F60C00F03460 /* XPMineItemModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineItemModel.h; sourceTree = "<group>"; };
|
E8E70D9026F2F60C00F03460 /* XPMineItemModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineItemModel.h; sourceTree = "<group>"; };
|
||||||
E8E70D9126F2F60C00F03460 /* XPMineItemModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineItemModel.m; sourceTree = "<group>"; };
|
E8E70D9126F2F60C00F03460 /* XPMineItemModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineItemModel.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB8EB26FC2050007C6EBA /* SDPhotoBrowserConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowserConfig.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB8EC26FC2050007C6EBA /* SDPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDPhotoBrowser.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB8ED26FC2050007C6EBA /* SDWaitingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWaitingView.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB8EE26FC2050007C6EBA /* SDBrowserImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBrowserImageView.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB8EF26FC2050007C6EBA /* SDWaitingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWaitingView.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB8F026FC2050007C6EBA /* SDPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowser.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB8F126FC2050007C6EBA /* SDBrowserImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBrowserImageView.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB8F526FC2673007C6EBA /* UserPhoto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserPhoto.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB8F626FC2673007C6EBA /* UserPhoto.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserPhoto.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB8F926FC2874007C6EBA /* XPMineUserInfoTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTableViewCell.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB8FA26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTableViewCell.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB8FC26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoCustomNavView.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB8FD26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoCustomNavView.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB8FF26FC31B6007C6EBA /* XPMineUserInfoPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoPresenter.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB90026FC31B6007C6EBA /* XPMineUserInfoPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoPresenter.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB90226FC31CE007C6EBA /* XPMineUserInfoProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoProtocol.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB90426FC5772007C6EBA /* XPMineUserInfoEditViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditViewController.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB90526FC5772007C6EBA /* XPMineUserInfoEditViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEditViewController.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB90726FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditTableViewCell.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB90826FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEditTableViewCell.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB90A26FC5EBC007C6EBA /* XPMineUserInfoEditModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditModel.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB90B26FC5EBC007C6EBA /* XPMineUserInfoEditModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEditModel.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB90D26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditPresenter.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB90E26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEditPresenter.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB91026FC6AD3007C6EBA /* XPMineUserInfoEditProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditProtocol.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB91226FC7786007C6EBA /* XPMineUserInfoNickViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoNickViewController.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB91326FC7786007C6EBA /* XPMineUserInfoNickViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoNickViewController.m; sourceTree = "<group>"; };
|
||||||
|
E8EEB91526FC7B35007C6EBA /* XPMineUserInfoDesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoDesViewController.h; sourceTree = "<group>"; };
|
||||||
|
E8EEB91626FC7B35007C6EBA /* XPMineUserInfoDesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoDesViewController.m; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -729,6 +779,8 @@
|
|||||||
18E7B31D26F0984C0064BC9B /* UserLevelVo.m */,
|
18E7B31D26F0984C0064BC9B /* UserLevelVo.m */,
|
||||||
18E7B31F26F098650064BC9B /* UserInfoSkillVo.h */,
|
18E7B31F26F098650064BC9B /* UserInfoSkillVo.h */,
|
||||||
18E7B32026F098650064BC9B /* UserInfoSkillVo.m */,
|
18E7B32026F098650064BC9B /* UserInfoSkillVo.m */,
|
||||||
|
E8EEB8F526FC2673007C6EBA /* UserPhoto.h */,
|
||||||
|
E8EEB8F626FC2673007C6EBA /* UserPhoto.m */,
|
||||||
);
|
);
|
||||||
path = Model;
|
path = Model;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -855,6 +907,7 @@
|
|||||||
189DD5A726DFA09700AB55B1 /* Tool */ = {
|
189DD5A726DFA09700AB55B1 /* Tool */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
E8EEB8EA26FC2050007C6EBA /* SDPhotoBrowser */,
|
||||||
E81366E426F0A4820076364C /* NSString */,
|
E81366E426F0A4820076364C /* NSString */,
|
||||||
E82109AA26F1C86E00FC3319 /* CountDown */,
|
E82109AA26F1C86E00FC3319 /* CountDown */,
|
||||||
E81C278726EAFABF0031E639 /* Security */,
|
E81C278726EAFABF0031E639 /* Security */,
|
||||||
@@ -1098,6 +1151,30 @@
|
|||||||
path = Teenager;
|
path = Teenager;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
E88B5CBE26FB404800DA9178 /* MineInfo */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
E88B5CBF26FB407B00DA9178 /* XPMineUserInfoViewController.h */,
|
||||||
|
E88B5CC026FB407B00DA9178 /* XPMineUserInfoViewController.m */,
|
||||||
|
E8EEB90426FC5772007C6EBA /* XPMineUserInfoEditViewController.h */,
|
||||||
|
E8EEB90526FC5772007C6EBA /* XPMineUserInfoEditViewController.m */,
|
||||||
|
E8EEB91226FC7786007C6EBA /* XPMineUserInfoNickViewController.h */,
|
||||||
|
E8EEB91326FC7786007C6EBA /* XPMineUserInfoNickViewController.m */,
|
||||||
|
E8EEB91526FC7B35007C6EBA /* XPMineUserInfoDesViewController.h */,
|
||||||
|
E8EEB91626FC7B35007C6EBA /* XPMineUserInfoDesViewController.m */,
|
||||||
|
);
|
||||||
|
path = MineInfo;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
E88B5CC226FB429C00DA9178 /* MineInfo */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
E88B5CC326FB42B000DA9178 /* XPMineUserInfoHeaderView.h */,
|
||||||
|
E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */,
|
||||||
|
);
|
||||||
|
path = MineInfo;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
E8AC720A26F435AF007D6E91 /* UIImageView */ = {
|
E8AC720A26F435AF007D6E91 /* UIImageView */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -1150,6 +1227,8 @@
|
|||||||
E8AC722E26F49610007D6E91 /* XPMineNotificationItemModel.m */,
|
E8AC722E26F49610007D6E91 /* XPMineNotificationItemModel.m */,
|
||||||
E8AC723826F49AAE007D6E91 /* XPMineNotifyStatus.h */,
|
E8AC723826F49AAE007D6E91 /* XPMineNotifyStatus.h */,
|
||||||
E8AC723926F49AAE007D6E91 /* XPMineNotifyStatus.m */,
|
E8AC723926F49AAE007D6E91 /* XPMineNotifyStatus.m */,
|
||||||
|
E8EEB90A26FC5EBC007C6EBA /* XPMineUserInfoEditModel.h */,
|
||||||
|
E8EEB90B26FC5EBC007C6EBA /* XPMineUserInfoEditModel.m */,
|
||||||
);
|
);
|
||||||
path = Model;
|
path = Model;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1177,6 +1256,7 @@
|
|||||||
E824545526F5E51900BE8163 /* XPMineVerifIdentityViewController.m */,
|
E824545526F5E51900BE8163 /* XPMineVerifIdentityViewController.m */,
|
||||||
E824545F26F5F4E400BE8163 /* XPMineResetPayPwdViewController.h */,
|
E824545F26F5F4E400BE8163 /* XPMineResetPayPwdViewController.h */,
|
||||||
E824546026F5F4E400BE8163 /* XPMineResetPayPwdViewController.m */,
|
E824546026F5F4E400BE8163 /* XPMineResetPayPwdViewController.m */,
|
||||||
|
E88B5CBE26FB404800DA9178 /* MineInfo */,
|
||||||
E88B5CA926FB15B900DA9178 /* Teenager */,
|
E88B5CA926FB15B900DA9178 /* Teenager */,
|
||||||
);
|
);
|
||||||
path = View;
|
path = View;
|
||||||
@@ -1205,6 +1285,10 @@
|
|||||||
E88B5CAF26FB1C6500DA9178 /* XPMineTeenagerPresenter.m */,
|
E88B5CAF26FB1C6500DA9178 /* XPMineTeenagerPresenter.m */,
|
||||||
E88B5CB626FB325200DA9178 /* XPMineTeenagerPwdPresenter.h */,
|
E88B5CB626FB325200DA9178 /* XPMineTeenagerPwdPresenter.h */,
|
||||||
E88B5CB726FB325200DA9178 /* XPMineTeenagerPwdPresenter.m */,
|
E88B5CB726FB325200DA9178 /* XPMineTeenagerPwdPresenter.m */,
|
||||||
|
E8EEB8FF26FC31B6007C6EBA /* XPMineUserInfoPresenter.h */,
|
||||||
|
E8EEB90026FC31B6007C6EBA /* XPMineUserInfoPresenter.m */,
|
||||||
|
E8EEB90D26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.h */,
|
||||||
|
E8EEB90E26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m */,
|
||||||
);
|
);
|
||||||
path = Presenter;
|
path = Presenter;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1222,6 +1306,8 @@
|
|||||||
E824546526F5FF5100BE8163 /* XPMineResetPayPasswordProtocol.h */,
|
E824546526F5FF5100BE8163 /* XPMineResetPayPasswordProtocol.h */,
|
||||||
E88B5CB126FB1CC100DA9178 /* XPMineTeenagerProtocol.h */,
|
E88B5CB126FB1CC100DA9178 /* XPMineTeenagerProtocol.h */,
|
||||||
E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */,
|
E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */,
|
||||||
|
E8EEB90226FC31CE007C6EBA /* XPMineUserInfoProtocol.h */,
|
||||||
|
E8EEB91026FC6AD3007C6EBA /* XPMineUserInfoEditProtocol.h */,
|
||||||
);
|
);
|
||||||
path = Protocol;
|
path = Protocol;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1229,6 +1315,7 @@
|
|||||||
E8E70D7F26F2F39000F03460 /* SubViews */ = {
|
E8E70D7F26F2F39000F03460 /* SubViews */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
E88B5CC226FB429C00DA9178 /* MineInfo */,
|
||||||
E88B5CAA26FB168200DA9178 /* Teenager */,
|
E88B5CAA26FB168200DA9178 /* Teenager */,
|
||||||
E8E70D8126F2F51A00F03460 /* XPMineHeadView.h */,
|
E8E70D8126F2F51A00F03460 /* XPMineHeadView.h */,
|
||||||
E8E70D8226F2F51A00F03460 /* XPMineHeadView.m */,
|
E8E70D8226F2F51A00F03460 /* XPMineHeadView.m */,
|
||||||
@@ -1247,6 +1334,7 @@
|
|||||||
E8E70D8026F2F3C500F03460 /* Cell */ = {
|
E8E70D8026F2F3C500F03460 /* Cell */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
E8EEB8F826FC285B007C6EBA /* MineInfo */,
|
||||||
E8E70D8726F2F58F00F03460 /* XPMineMatchTableViewCell.h */,
|
E8E70D8726F2F58F00F03460 /* XPMineMatchTableViewCell.h */,
|
||||||
E8E70D8826F2F58F00F03460 /* XPMineMatchTableViewCell.m */,
|
E8E70D8826F2F58F00F03460 /* XPMineMatchTableViewCell.m */,
|
||||||
E8E70D8A26F2F5A500F03460 /* XPMineMatchCollectionViewCell.h */,
|
E8E70D8A26F2F5A500F03460 /* XPMineMatchCollectionViewCell.h */,
|
||||||
@@ -1261,6 +1349,33 @@
|
|||||||
path = Cell;
|
path = Cell;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
E8EEB8EA26FC2050007C6EBA /* SDPhotoBrowser */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
E8EEB8EB26FC2050007C6EBA /* SDPhotoBrowserConfig.h */,
|
||||||
|
E8EEB8EC26FC2050007C6EBA /* SDPhotoBrowser.m */,
|
||||||
|
E8EEB8ED26FC2050007C6EBA /* SDWaitingView.m */,
|
||||||
|
E8EEB8EE26FC2050007C6EBA /* SDBrowserImageView.m */,
|
||||||
|
E8EEB8EF26FC2050007C6EBA /* SDWaitingView.h */,
|
||||||
|
E8EEB8F026FC2050007C6EBA /* SDPhotoBrowser.h */,
|
||||||
|
E8EEB8F126FC2050007C6EBA /* SDBrowserImageView.h */,
|
||||||
|
);
|
||||||
|
path = SDPhotoBrowser;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
E8EEB8F826FC285B007C6EBA /* MineInfo */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
E8EEB8F926FC2874007C6EBA /* XPMineUserInfoTableViewCell.h */,
|
||||||
|
E8EEB8FA26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m */,
|
||||||
|
E8EEB8FC26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.h */,
|
||||||
|
E8EEB8FD26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m */,
|
||||||
|
E8EEB90726FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.h */,
|
||||||
|
E8EEB90826FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m */,
|
||||||
|
);
|
||||||
|
path = MineInfo;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@@ -1394,6 +1509,8 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
E8EEB91126FC6AE2007C6EBA /* XPMineUserInfoEditProtocol.h in Sources */,
|
||||||
|
E8EEB90326FC31DC007C6EBA /* XPMineUserInfoProtocol.h in Sources */,
|
||||||
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */,
|
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */,
|
||||||
E88B5CB226FB1CFF00DA9178 /* XPMineTeenagerProtocol.h in Sources */,
|
E88B5CB226FB1CFF00DA9178 /* XPMineTeenagerProtocol.h in Sources */,
|
||||||
E824546626F5FF6000BE8163 /* XPMineResetPayPasswordProtocol.h in Sources */,
|
E824546626F5FF6000BE8163 /* XPMineResetPayPasswordProtocol.h in Sources */,
|
||||||
@@ -1410,6 +1527,7 @@
|
|||||||
E81366F826F0C12A0076364C /* LoginFullInfoProtocol.h in Sources */,
|
E81366F826F0C12A0076364C /* LoginFullInfoProtocol.h in Sources */,
|
||||||
E8E70D7E26F2F19D00F03460 /* Api+Mine.m in Sources */,
|
E8E70D7E26F2F19D00F03460 /* Api+Mine.m in Sources */,
|
||||||
E824543D26F58C3A00BE8163 /* XPLoginBindSuccessView.m in Sources */,
|
E824543D26F58C3A00BE8163 /* XPLoginBindSuccessView.m in Sources */,
|
||||||
|
E8EEB8F726FC2673007C6EBA /* UserPhoto.m in Sources */,
|
||||||
E81C27A226EF23490031E639 /* XPEnum.h in Sources */,
|
E81C27A226EF23490031E639 /* XPEnum.h in Sources */,
|
||||||
E88B5CB526FB20B800DA9178 /* XPMineTeenagerPwdView.m in Sources */,
|
E88B5CB526FB20B800DA9178 /* XPMineTeenagerPwdView.m in Sources */,
|
||||||
E81C279826EB3AC40031E639 /* LoginForgetPasswordProtocol.h in Sources */,
|
E81C279826EB3AC40031E639 /* LoginForgetPasswordProtocol.h in Sources */,
|
||||||
@@ -1419,6 +1537,7 @@
|
|||||||
E8B825CA26EA1231009E8E9F /* LoginVerifCodeViewController.m in Sources */,
|
E8B825CA26EA1231009E8E9F /* LoginVerifCodeViewController.m in Sources */,
|
||||||
189DD76226E60DDC00AB55B1 /* Api+Login.m in Sources */,
|
189DD76226E60DDC00AB55B1 /* Api+Login.m in Sources */,
|
||||||
18E7B22626E8CDCF0064BC9B /* XplanFlutterBoostDelegate.m in Sources */,
|
18E7B22626E8CDCF0064BC9B /* XplanFlutterBoostDelegate.m in Sources */,
|
||||||
|
E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */,
|
||||||
E824544026F58F9400BE8163 /* XPMinePayPwdViewController.m in Sources */,
|
E824544026F58F9400BE8163 /* XPMinePayPwdViewController.m in Sources */,
|
||||||
E8AC723D26F4B6AA007D6E91 /* XPLoginBindPhoneResultViewController.m in Sources */,
|
E8AC723D26F4B6AA007D6E91 /* XPLoginBindPhoneResultViewController.m in Sources */,
|
||||||
189DD73E26E21C3F00AB55B1 /* YYUtility.m in Sources */,
|
189DD73E26E21C3F00AB55B1 /* YYUtility.m in Sources */,
|
||||||
@@ -1430,6 +1549,7 @@
|
|||||||
189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */,
|
189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */,
|
||||||
E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */,
|
E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */,
|
||||||
E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */,
|
E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */,
|
||||||
|
E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */,
|
||||||
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */,
|
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */,
|
||||||
E81C279D26EEEC620031E639 /* XPConstant.m in Sources */,
|
E81C279D26EEEC620031E639 /* XPConstant.m in Sources */,
|
||||||
187EEEFE26E8A82C002833B2 /* NSObject+AutoCoding.m in Sources */,
|
187EEEFE26E8A82C002833B2 /* NSObject+AutoCoding.m in Sources */,
|
||||||
@@ -1442,6 +1562,7 @@
|
|||||||
E81C27AE26EF39AB0031E639 /* AppDelegate+ThirdConfig.m in Sources */,
|
E81C27AE26EF39AB0031E639 /* AppDelegate+ThirdConfig.m in Sources */,
|
||||||
E8E70D8326F2F51A00F03460 /* XPMineHeadView.m in Sources */,
|
E8E70D8326F2F51A00F03460 /* XPMineHeadView.m in Sources */,
|
||||||
E8B825D026EA3825009E8E9F /* LoginPasswordViewController.m in Sources */,
|
E8B825D026EA3825009E8E9F /* LoginPasswordViewController.m in Sources */,
|
||||||
|
E8EEB90C26FC5EBC007C6EBA /* XPMineUserInfoEditModel.m in Sources */,
|
||||||
18E7B31826F097E00064BC9B /* UserInfoModel.m in Sources */,
|
18E7B31826F097E00064BC9B /* UserInfoModel.m in Sources */,
|
||||||
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */,
|
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */,
|
||||||
18E7B32126F098650064BC9B /* UserInfoSkillVo.m in Sources */,
|
18E7B32126F098650064BC9B /* UserInfoSkillVo.m in Sources */,
|
||||||
@@ -1454,9 +1575,11 @@
|
|||||||
18E7B26926E8D5D60064BC9B /* XCCurrentVCStackManager.m in Sources */,
|
18E7B26926E8D5D60064BC9B /* XCCurrentVCStackManager.m in Sources */,
|
||||||
E824544326F58FCE00BE8163 /* XPMinePayPwdInputView.m in Sources */,
|
E824544326F58FCE00BE8163 /* XPMinePayPwdInputView.m in Sources */,
|
||||||
9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */,
|
9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */,
|
||||||
|
E8EEB8F426FC2050007C6EBA /* SDBrowserImageView.m in Sources */,
|
||||||
E824544626F5934700BE8163 /* XPMinePayPwdPresenter.m in Sources */,
|
E824544626F5934700BE8163 /* XPMinePayPwdPresenter.m in Sources */,
|
||||||
186A536A26FC6F2E00D67B2C /* XCShareItem.m in Sources */,
|
186A536A26FC6F2E00D67B2C /* XCShareItem.m in Sources */,
|
||||||
189DD54B26DE338800AB55B1 /* BaseViewController.m in Sources */,
|
189DD54B26DE338800AB55B1 /* BaseViewController.m in Sources */,
|
||||||
|
E8EEB91726FC7B35007C6EBA /* XPMineUserInfoDesViewController.m in Sources */,
|
||||||
E8E70D8626F2F55C00F03460 /* XPMineAccountView.m in Sources */,
|
E8E70D8626F2F55C00F03460 /* XPMineAccountView.m in Sources */,
|
||||||
E81C279026EB314D0031E639 /* LoginForgetEditView.m in Sources */,
|
E81C279026EB314D0031E639 /* LoginForgetEditView.m in Sources */,
|
||||||
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */,
|
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */,
|
||||||
@@ -1472,6 +1595,8 @@
|
|||||||
E824545626F5E51900BE8163 /* XPMineVerifIdentityViewController.m in Sources */,
|
E824545626F5E51900BE8163 /* XPMineVerifIdentityViewController.m in Sources */,
|
||||||
186A534726FC6ED900D67B2C /* TTAlertConfig.m in Sources */,
|
186A534726FC6ED900D67B2C /* TTAlertConfig.m in Sources */,
|
||||||
18E7B31E26F0984C0064BC9B /* UserLevelVo.m in Sources */,
|
18E7B31E26F0984C0064BC9B /* UserLevelVo.m in Sources */,
|
||||||
|
E8EEB90626FC5772007C6EBA /* XPMineUserInfoEditViewController.m in Sources */,
|
||||||
|
E8EEB91426FC7786007C6EBA /* XPMineUserInfoNickViewController.m in Sources */,
|
||||||
18E7B31B26F0982E0064BC9B /* UserExpand.m in Sources */,
|
18E7B31B26F0982E0064BC9B /* UserExpand.m in Sources */,
|
||||||
E824543526F57D6E00BE8163 /* XPLoginVerifBindPhoneViewController.m in Sources */,
|
E824543526F57D6E00BE8163 /* XPLoginVerifBindPhoneViewController.m in Sources */,
|
||||||
E8B825CD26EA18C8009E8E9F /* ThemeColor.m in Sources */,
|
E8B825CD26EA18C8009E8E9F /* ThemeColor.m in Sources */,
|
||||||
@@ -1486,14 +1611,18 @@
|
|||||||
E81C279326EB394D0031E639 /* LoginForgetPasswordViewController.m in Sources */,
|
E81C279326EB394D0031E639 /* LoginForgetPasswordViewController.m in Sources */,
|
||||||
E81C278D26EAFAF60031E639 /* DESEncrypt.m in Sources */,
|
E81C278D26EAFAF60031E639 /* DESEncrypt.m in Sources */,
|
||||||
E81366E726F0A49E0076364C /* NSString+Regex.m in Sources */,
|
E81366E726F0A49E0076364C /* NSString+Regex.m in Sources */,
|
||||||
|
E8EEB90126FC31B6007C6EBA /* XPMineUserInfoPresenter.m in Sources */,
|
||||||
189DD56526DE465A00AB55B1 /* LoginViewController.m in Sources */,
|
189DD56526DE465A00AB55B1 /* LoginViewController.m in Sources */,
|
||||||
E824544B26F5BBB800BE8163 /* XPMineModifPayPwdViewController.m in Sources */,
|
E824544B26F5BBB800BE8163 /* XPMineModifPayPwdViewController.m in Sources */,
|
||||||
|
E8EEB8FE26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m in Sources */,
|
||||||
E88B5CAD26FB16A800DA9178 /* XPMineTeenagerDesView.m in Sources */,
|
E88B5CAD26FB16A800DA9178 /* XPMineTeenagerDesView.m in Sources */,
|
||||||
E824545126F5CE6E00BE8163 /* XPMineModifPayPwdPresenter.m in Sources */,
|
E824545126F5CE6E00BE8163 /* XPMineModifPayPwdPresenter.m in Sources */,
|
||||||
|
E8EEB90F26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m in Sources */,
|
||||||
E8AC723A26F49AAE007D6E91 /* XPMineNotifyStatus.m in Sources */,
|
E8AC723A26F49AAE007D6E91 /* XPMineNotifyStatus.m in Sources */,
|
||||||
18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */,
|
18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */,
|
||||||
E8AC721C26F4720B007D6E91 /* XPMineSettingPresent.m in Sources */,
|
E8AC721C26F4720B007D6E91 /* XPMineSettingPresent.m in Sources */,
|
||||||
E88B5CA526FB088600DA9178 /* XPMineTeenagerViewController.m in Sources */,
|
E88B5CA526FB088600DA9178 /* XPMineTeenagerViewController.m in Sources */,
|
||||||
|
E8EEB90926FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m in Sources */,
|
||||||
18C17A5D26F338F300C48E11 /* XplanFBFlutterViewContainer.m in Sources */,
|
18C17A5D26F338F300C48E11 /* XplanFBFlutterViewContainer.m in Sources */,
|
||||||
186A536926FC6F2E00D67B2C /* XCShareView.m in Sources */,
|
186A536926FC6F2E00D67B2C /* XCShareView.m in Sources */,
|
||||||
186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */,
|
186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */,
|
||||||
@@ -1508,6 +1637,7 @@
|
|||||||
E81366FC26F0D2980076364C /* UIButton+EnlargeTouchArea.m in Sources */,
|
E81366FC26F0D2980076364C /* UIButton+EnlargeTouchArea.m in Sources */,
|
||||||
E824546426F5FF1C00BE8163 /* XPMineResetPayPasswordPresenter.m in Sources */,
|
E824546426F5FF1C00BE8163 /* XPMineResetPayPasswordPresenter.m in Sources */,
|
||||||
186A534D26FC6ED900D67B2C /* TTActionSheetView.m in Sources */,
|
186A534D26FC6ED900D67B2C /* TTActionSheetView.m in Sources */,
|
||||||
|
E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */,
|
||||||
E824545926F5E65900BE8163 /* XPMineVerifIdentityView.m in Sources */,
|
E824545926F5E65900BE8163 /* XPMineVerifIdentityView.m in Sources */,
|
||||||
189DD74026E21C3F00AB55B1 /* YYUtility+App.m in Sources */,
|
189DD74026E21C3F00AB55B1 /* YYUtility+App.m in Sources */,
|
||||||
189DD74526E21CCC00AB55B1 /* YYReachability.m in Sources */,
|
189DD74526E21CCC00AB55B1 /* YYReachability.m in Sources */,
|
||||||
@@ -1515,6 +1645,8 @@
|
|||||||
E8E70D8F26F2F5DB00F03460 /* XPMineMenuTableViewCell.m in Sources */,
|
E8E70D8F26F2F5DB00F03460 /* XPMineMenuTableViewCell.m in Sources */,
|
||||||
187EEEE126E89BFB002833B2 /* AccountModel.m in Sources */,
|
187EEEE126E89BFB002833B2 /* AccountModel.m in Sources */,
|
||||||
E8AC722126F47E23007D6E91 /* XPMineAboutUsViewController.m in Sources */,
|
E8AC722126F47E23007D6E91 /* XPMineAboutUsViewController.m in Sources */,
|
||||||
|
E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */,
|
||||||
|
E8EEB8FB26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m in Sources */,
|
||||||
E8AC721626F46B06007D6E91 /* XPMineSettingTableViewCell.m in Sources */,
|
E8AC721626F46B06007D6E91 /* XPMineSettingTableViewCell.m in Sources */,
|
||||||
189DD75026E21D9000AB55B1 /* GCDHelper.m in Sources */,
|
189DD75026E21D9000AB55B1 /* GCDHelper.m in Sources */,
|
||||||
186A534826FC6ED900D67B2C /* TTAlertButtonConfig.m in Sources */,
|
186A534826FC6ED900D67B2C /* TTAlertButtonConfig.m in Sources */,
|
||||||
|
22
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit.imageset/Contents.json
vendored
Normal file
22
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "mine_user_info_edit@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "mine_user_info_edit@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit.imageset/mine_user_info_edit@2x.png
vendored
Normal file
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit.imageset/mine_user_info_edit@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 258 B |
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit.imageset/mine_user_info_edit@3x.png
vendored
Normal file
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit.imageset/mine_user_info_edit@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 455 B |
22
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit_clear.imageset/Contents.json
vendored
Normal file
22
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit_clear.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "mine_user_info_edit_clear@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "mine_user_info_edit_clear@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit_clear.imageset/mine_user_info_edit_clear@2x.png
vendored
Normal file
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit_clear.imageset/mine_user_info_edit_clear@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 319 B |
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit_clear.imageset/mine_user_info_edit_clear@3x.png
vendored
Normal file
BIN
xplan-ios/Assets.xcassets/Mine/mine_user_info_edit_clear.imageset/mine_user_info_edit_clear@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 527 B |
@@ -9,6 +9,7 @@
|
|||||||
#import "UserExpand.h"
|
#import "UserExpand.h"
|
||||||
#import "UserLevelVo.h"
|
#import "UserLevelVo.h"
|
||||||
#import "UserInfoSkillVo.h"
|
#import "UserInfoSkillVo.h"
|
||||||
|
#import "UserPhoto.h"
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
typedef NS_ENUM(NSInteger, GenderType) {
|
typedef NS_ENUM(NSInteger, GenderType) {
|
||||||
@@ -47,6 +48,12 @@ typedef NS_ENUM(NSInteger, GenderType) {
|
|||||||
@property (nonatomic , assign) BOOL isBindPaymentPwd;
|
@property (nonatomic , assign) BOOL isBindPaymentPwd;
|
||||||
@property (nonatomic , assign) BOOL isBindXCZAccount;
|
@property (nonatomic , assign) BOOL isBindXCZAccount;
|
||||||
@property (nonatomic , assign) BOOL isBindAlipay;
|
@property (nonatomic , assign) BOOL isBindAlipay;
|
||||||
|
///相册
|
||||||
|
@property (nonatomic, strong) NSArray<UserPhoto *> *privatePhoto;//相册
|
||||||
|
///签名
|
||||||
|
@property (nonatomic,copy) NSString *userDesc;
|
||||||
|
///出生日期
|
||||||
|
@property (nonatomic,assign) long birth;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -9,4 +9,10 @@
|
|||||||
|
|
||||||
@implementation UserInfoModel
|
@implementation UserInfoModel
|
||||||
|
|
||||||
|
+ (NSDictionary *)objectClassInArray {
|
||||||
|
return @{
|
||||||
|
@"privatePhoto":UserPhoto.class
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
17
xplan-ios/Base/MVP/Model/UserPhoto.h
Normal file
17
xplan-ios/Base/MVP/Model/UserPhoto.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// UserPhoto.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BaseObject.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface UserPhoto : BaseObject
|
||||||
|
@property (copy, nonatomic) NSString *photoUrl;
|
||||||
|
@property (copy, nonatomic) NSString *pid;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
13
xplan-ios/Base/MVP/Model/UserPhoto.m
Normal file
13
xplan-ios/Base/MVP/Model/UserPhoto.m
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//
|
||||||
|
// UserPhoto.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "UserPhoto.h"
|
||||||
|
|
||||||
|
@implementation UserPhoto
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
27
xplan-ios/Base/Tool/SDPhotoBrowser/SDBrowserImageView.h
Executable file
27
xplan-ios/Base/Tool/SDPhotoBrowser/SDBrowserImageView.h
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// SDBrowserImageView.h
|
||||||
|
// SDPhotoBrowser
|
||||||
|
//
|
||||||
|
// Created by aier on 15-2-6.
|
||||||
|
// Copyright (c) 2015年 GSD. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "SDWaitingView.h"
|
||||||
|
|
||||||
|
|
||||||
|
@interface SDBrowserImageView : UIImageView <UIGestureRecognizerDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, assign) CGFloat progress;
|
||||||
|
@property (nonatomic, assign, readonly) BOOL isScaled;
|
||||||
|
@property (nonatomic, assign) BOOL hasLoadedImage;
|
||||||
|
|
||||||
|
- (void)eliminateScale; // 清除缩放
|
||||||
|
|
||||||
|
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
|
||||||
|
|
||||||
|
- (void)doubleTapToZommWithScale:(CGFloat)scale;
|
||||||
|
|
||||||
|
- (void)clear;
|
||||||
|
|
||||||
|
@end
|
237
xplan-ios/Base/Tool/SDPhotoBrowser/SDBrowserImageView.m
Executable file
237
xplan-ios/Base/Tool/SDPhotoBrowser/SDBrowserImageView.m
Executable file
@@ -0,0 +1,237 @@
|
|||||||
|
//
|
||||||
|
// SDBrowserImageView.m
|
||||||
|
// SDPhotoBrowser
|
||||||
|
//
|
||||||
|
// Created by aier on 15-2-6.
|
||||||
|
// Copyright (c) 2015年 GSD. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "SDBrowserImageView.h"
|
||||||
|
#import "UIImageView+WebCache.h"
|
||||||
|
#import "SDPhotoBrowserConfig.h"
|
||||||
|
|
||||||
|
@implementation SDBrowserImageView
|
||||||
|
{
|
||||||
|
__weak SDWaitingView *_waitingView;
|
||||||
|
BOOL _didCheckSize;
|
||||||
|
UIScrollView *_scroll;
|
||||||
|
UIImageView *_scrollImageView;
|
||||||
|
UIScrollView *_zoomingScroolView;
|
||||||
|
UIImageView *_zoomingImageView;
|
||||||
|
CGFloat _totalScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (id)initWithFrame:(CGRect)frame
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
self.userInteractionEnabled = YES;
|
||||||
|
self.contentMode = UIViewContentModeScaleAspectFit;
|
||||||
|
_totalScale = 1.0;
|
||||||
|
|
||||||
|
// 捏合手势缩放图片
|
||||||
|
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(zoomImage:)];
|
||||||
|
pinch.delegate = self;
|
||||||
|
[self addGestureRecognizer:pinch];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isScaled
|
||||||
|
{
|
||||||
|
return 1.0 != _totalScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)layoutSubviews
|
||||||
|
{
|
||||||
|
[super layoutSubviews];
|
||||||
|
_waitingView.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
|
||||||
|
|
||||||
|
CGSize imageSize = self.image.size;
|
||||||
|
|
||||||
|
if (self.bounds.size.width * (imageSize.height / imageSize.width) > self.bounds.size.height) {
|
||||||
|
if (!_scroll) {
|
||||||
|
UIScrollView *scroll = [[UIScrollView alloc] init];
|
||||||
|
scroll.backgroundColor = [UIColor whiteColor];
|
||||||
|
UIImageView *imageView = [[UIImageView alloc] init];
|
||||||
|
imageView.image = self.image;
|
||||||
|
_scrollImageView = imageView;
|
||||||
|
[scroll addSubview:imageView];
|
||||||
|
scroll.backgroundColor = SDPhotoBrowserBackgrounColor;
|
||||||
|
_scroll = scroll;
|
||||||
|
[self addSubview:scroll];
|
||||||
|
if (_waitingView) {
|
||||||
|
[self bringSubviewToFront:_waitingView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_scroll.frame = self.bounds;
|
||||||
|
|
||||||
|
CGFloat imageViewH = self.bounds.size.width * (imageSize.height / imageSize.width);
|
||||||
|
|
||||||
|
_scrollImageView.bounds = CGRectMake(0, 0, _scroll.frame.size.width, imageViewH);
|
||||||
|
_scrollImageView.center = CGPointMake(_scroll.frame.size.width * 0.5, _scrollImageView.frame.size.height * 0.5);
|
||||||
|
_scroll.contentSize = CGSizeMake(0, _scrollImageView.bounds.size.height);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (_scroll) [_scroll removeFromSuperview]; // 防止旋转时适配的scrollView的影响
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- (void)setProgress:(CGFloat)progress
|
||||||
|
{
|
||||||
|
_progress = progress;
|
||||||
|
_waitingView.progress = progress;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
|
||||||
|
{
|
||||||
|
SDWaitingView *waiting = [[SDWaitingView alloc] init];
|
||||||
|
waiting.bounds = CGRectMake(0, 0, 100, 100);
|
||||||
|
waiting.mode = SDWaitingViewProgressMode;
|
||||||
|
_waitingView = waiting;
|
||||||
|
[self addSubview:waiting];
|
||||||
|
|
||||||
|
|
||||||
|
__weak SDBrowserImageView *imageViewWeak = self;
|
||||||
|
|
||||||
|
|
||||||
|
[self sd_setImageWithURL:url placeholderImage:placeholder options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
|
||||||
|
imageViewWeak.progress = (CGFloat)receivedSize / expectedSize;
|
||||||
|
} completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
|
||||||
|
[imageViewWeak removeWaitingView];
|
||||||
|
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
UILabel *label = [[UILabel alloc] init];
|
||||||
|
label.bounds = CGRectMake(0, 0, 160, 30);
|
||||||
|
label.center = CGPointMake(imageViewWeak.bounds.size.width * 0.5, imageViewWeak.bounds.size.height * 0.5);
|
||||||
|
label.text = @"图片加载失败";
|
||||||
|
label.font = [UIFont systemFontOfSize:16];
|
||||||
|
label.textColor = [UIColor whiteColor];
|
||||||
|
label.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.8];
|
||||||
|
label.layer.cornerRadius = 5;
|
||||||
|
label.clipsToBounds = YES;
|
||||||
|
label.textAlignment = NSTextAlignmentCenter;
|
||||||
|
[imageViewWeak addSubview:label];
|
||||||
|
} else {
|
||||||
|
_scrollImageView.image = image;
|
||||||
|
[_scrollImageView setNeedsDisplay];
|
||||||
|
}
|
||||||
|
|
||||||
|
}];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)zoomImage:(UIPinchGestureRecognizer *)recognizer
|
||||||
|
{
|
||||||
|
[self prepareForImageViewScaling];
|
||||||
|
CGFloat scale = recognizer.scale;
|
||||||
|
CGFloat temp = _totalScale + (scale - 1);
|
||||||
|
[self setTotalScale:temp];
|
||||||
|
recognizer.scale = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setTotalScale:(CGFloat)totalScale
|
||||||
|
{
|
||||||
|
if ((_totalScale < 0.5 && totalScale < _totalScale) || (_totalScale > 2.0 && totalScale > _totalScale)) return; // 最大缩放 2倍,最小0.5倍
|
||||||
|
|
||||||
|
[self zoomWithScale:totalScale];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)zoomWithScale:(CGFloat)scale
|
||||||
|
{
|
||||||
|
_totalScale = scale;
|
||||||
|
|
||||||
|
_zoomingImageView.transform = CGAffineTransformMakeScale(scale, scale);
|
||||||
|
|
||||||
|
if (scale > 1) {
|
||||||
|
CGFloat contentW = _zoomingImageView.frame.size.width;
|
||||||
|
CGFloat contentH = MAX(_zoomingImageView.frame.size.height, self.frame.size.height);
|
||||||
|
|
||||||
|
_zoomingImageView.center = CGPointMake(contentW * 0.5, contentH * 0.5);
|
||||||
|
_zoomingScroolView.contentSize = CGSizeMake(contentW, contentH);
|
||||||
|
|
||||||
|
|
||||||
|
CGPoint offset = _zoomingScroolView.contentOffset;
|
||||||
|
offset.x = (contentW - _zoomingScroolView.frame.size.width) * 0.5;
|
||||||
|
// offset.y = (contentH - _zoomingImageView.frame.size.height) * 0.5;
|
||||||
|
_zoomingScroolView.contentOffset = offset;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
_zoomingScroolView.contentSize = _zoomingScroolView.frame.size;
|
||||||
|
_zoomingScroolView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
|
||||||
|
_zoomingImageView.center = _zoomingScroolView.center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)doubleTapToZommWithScale:(CGFloat)scale
|
||||||
|
{
|
||||||
|
[self prepareForImageViewScaling];
|
||||||
|
[UIView animateWithDuration:0.5 animations:^{
|
||||||
|
[self zoomWithScale:scale];
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
if (scale == 1) {
|
||||||
|
[self clear];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)prepareForImageViewScaling
|
||||||
|
{
|
||||||
|
if (!_zoomingScroolView) {
|
||||||
|
_zoomingScroolView = [[UIScrollView alloc] initWithFrame:self.bounds];
|
||||||
|
_zoomingScroolView.backgroundColor = SDPhotoBrowserBackgrounColor;
|
||||||
|
_zoomingScroolView.contentSize = self.bounds.size;
|
||||||
|
UIImageView *zoomingImageView = [[UIImageView alloc] initWithImage:self.image];
|
||||||
|
CGSize imageSize = zoomingImageView.image.size;
|
||||||
|
CGFloat imageViewH = self.bounds.size.height;
|
||||||
|
if (imageSize.width > 0) {
|
||||||
|
imageViewH = self.bounds.size.width * (imageSize.height / imageSize.width);
|
||||||
|
}
|
||||||
|
zoomingImageView.bounds = CGRectMake(0, 0, self.bounds.size.width, imageViewH);
|
||||||
|
zoomingImageView.center = _zoomingScroolView.center;
|
||||||
|
zoomingImageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||||
|
_zoomingImageView = zoomingImageView;
|
||||||
|
[_zoomingScroolView addSubview:zoomingImageView];
|
||||||
|
[self addSubview:_zoomingScroolView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)scaleImage:(CGFloat)scale
|
||||||
|
{
|
||||||
|
[self prepareForImageViewScaling];
|
||||||
|
[self setTotalScale:scale];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除缩放
|
||||||
|
- (void)eliminateScale
|
||||||
|
{
|
||||||
|
[self clear];
|
||||||
|
_totalScale = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clear
|
||||||
|
{
|
||||||
|
[_zoomingScroolView removeFromSuperview];
|
||||||
|
_zoomingScroolView = nil;
|
||||||
|
_zoomingImageView = nil;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeWaitingView
|
||||||
|
{
|
||||||
|
[_waitingView removeFromSuperview];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
38
xplan-ios/Base/Tool/SDPhotoBrowser/SDPhotoBrowser.h
Executable file
38
xplan-ios/Base/Tool/SDPhotoBrowser/SDPhotoBrowser.h
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
//
|
||||||
|
// SDPhotoBrowser.h
|
||||||
|
// photobrowser
|
||||||
|
//
|
||||||
|
// Created by aier on 15-2-3.
|
||||||
|
// Copyright (c) 2015年 aier. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
|
||||||
|
@class SDButton, SDPhotoBrowser;
|
||||||
|
|
||||||
|
@protocol SDPhotoBrowserDelegate <NSObject>
|
||||||
|
|
||||||
|
@required
|
||||||
|
|
||||||
|
- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index;
|
||||||
|
|
||||||
|
@optional
|
||||||
|
|
||||||
|
- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface SDPhotoBrowser : UIView <UIScrollViewDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, weak) UIView *sourceImagesContainerView;
|
||||||
|
@property (nonatomic, assign) NSInteger currentImageIndex;
|
||||||
|
@property (nonatomic, assign) NSInteger imageCount;
|
||||||
|
@property (nonatomic, assign) BOOL isMe;
|
||||||
|
@property (nonatomic, assign) CGRect sourceImagesFrame;
|
||||||
|
@property (nonatomic, strong) id<SDPhotoBrowserDelegate> delegate;
|
||||||
|
@property (nonatomic, assign) BOOL isHaveUserAdd; // 为了区分当前页面的cell是否第一个是添加图片的Icon
|
||||||
|
- (void)show;
|
||||||
|
|
||||||
|
@end
|
393
xplan-ios/Base/Tool/SDPhotoBrowser/SDPhotoBrowser.m
Executable file
393
xplan-ios/Base/Tool/SDPhotoBrowser/SDPhotoBrowser.m
Executable file
@@ -0,0 +1,393 @@
|
|||||||
|
//
|
||||||
|
// SDPhotoBrowser.m
|
||||||
|
// photobrowser
|
||||||
|
//
|
||||||
|
// Created by aier on 15-2-3.
|
||||||
|
// Copyright (c) 2015年 aier. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "SDPhotoBrowser.h"
|
||||||
|
#import "UIImageView+WebCache.h"
|
||||||
|
#import "SDBrowserImageView.h"
|
||||||
|
|
||||||
|
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO) //判断是否iPhoneX
|
||||||
|
|
||||||
|
#define iPhoneX_NavSafeArea ([[UIScreen mainScreen] bounds].size.height >= 812.0 ? 24 : 0) // 如果是iphoneX 顶部安全区域 24
|
||||||
|
|
||||||
|
// ============在这里方便配置样式相关设置===========
|
||||||
|
|
||||||
|
// ||
|
||||||
|
// ||
|
||||||
|
// ||
|
||||||
|
// \\//
|
||||||
|
// \/
|
||||||
|
|
||||||
|
#import "SDPhotoBrowserConfig.h"
|
||||||
|
|
||||||
|
// =============================================
|
||||||
|
|
||||||
|
@implementation SDPhotoBrowser
|
||||||
|
{
|
||||||
|
UIScrollView *_scrollView;
|
||||||
|
BOOL _hasShowedFistView;
|
||||||
|
UILabel *_indexLabel;
|
||||||
|
UIButton *_saveButton;
|
||||||
|
UIActivityIndicatorView *_indicatorView;
|
||||||
|
BOOL _willDisappear;
|
||||||
|
UIWindow *currentWindows;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithFrame:(CGRect)frame
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
|
||||||
|
if (self) {
|
||||||
|
self.backgroundColor = SDPhotoBrowserBackgrounColor;
|
||||||
|
_isMe = NO;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)didMoveToSuperview
|
||||||
|
{
|
||||||
|
[self setupScrollView];
|
||||||
|
|
||||||
|
[self setupToolbars];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[currentWindows removeObserver:self forKeyPath:@"frame"];
|
||||||
|
self.delegate = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)setupToolbars
|
||||||
|
{
|
||||||
|
// 1. 序标
|
||||||
|
UILabel *indexLabel = [[UILabel alloc] init];
|
||||||
|
indexLabel.bounds = CGRectMake(0, 0, 80, 30);
|
||||||
|
indexLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
indexLabel.textColor = [UIColor whiteColor];
|
||||||
|
indexLabel.font = [UIFont boldSystemFontOfSize:20];
|
||||||
|
indexLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
|
||||||
|
indexLabel.layer.cornerRadius = indexLabel.bounds.size.height * 0.5;
|
||||||
|
indexLabel.clipsToBounds = YES;
|
||||||
|
if (self.imageCount >= 1) {
|
||||||
|
indexLabel.text = [NSString stringWithFormat:@"1/%ld", (long)self.imageCount];
|
||||||
|
}
|
||||||
|
_indexLabel = indexLabel;
|
||||||
|
[self addSubview:indexLabel];
|
||||||
|
|
||||||
|
// 2.保存按钮
|
||||||
|
UIButton *saveButton = [[UIButton alloc] init];
|
||||||
|
[saveButton setTitle:@"保存" forState:UIControlStateNormal];
|
||||||
|
[saveButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||||
|
saveButton.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f];
|
||||||
|
saveButton.layer.cornerRadius = 5;
|
||||||
|
saveButton.clipsToBounds = YES;
|
||||||
|
[saveButton addTarget:self action:@selector(saveImage) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
_saveButton = saveButton;
|
||||||
|
[self addSubview:saveButton];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)saveImage
|
||||||
|
{
|
||||||
|
int index = _scrollView.contentOffset.x / _scrollView.bounds.size.width;
|
||||||
|
UIImageView *currentImageView = _scrollView.subviews[index];
|
||||||
|
|
||||||
|
UIImageWriteToSavedPhotosAlbum(currentImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
|
||||||
|
|
||||||
|
if (_indicatorView == nil) {
|
||||||
|
_indicatorView = [[UIActivityIndicatorView alloc] init];
|
||||||
|
_indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
|
||||||
|
_indicatorView.center = self.center;
|
||||||
|
[[UIApplication sharedApplication].keyWindow addSubview:_indicatorView];
|
||||||
|
}
|
||||||
|
|
||||||
|
[_indicatorView startAnimating];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;
|
||||||
|
{
|
||||||
|
[_indicatorView stopAnimating];
|
||||||
|
|
||||||
|
UILabel *label = [[UILabel alloc] init];
|
||||||
|
label.textColor = [UIColor whiteColor];
|
||||||
|
label.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f];
|
||||||
|
label.layer.cornerRadius = 5;
|
||||||
|
label.clipsToBounds = YES;
|
||||||
|
label.bounds = CGRectMake(0, 0, 150, 30);
|
||||||
|
label.center = self.center;
|
||||||
|
label.textAlignment = NSTextAlignmentCenter;
|
||||||
|
label.font = [UIFont boldSystemFontOfSize:17];
|
||||||
|
[[UIApplication sharedApplication].keyWindow addSubview:label];
|
||||||
|
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:label];
|
||||||
|
if (error) {
|
||||||
|
label.text = SDPhotoBrowserSaveImageFailText;
|
||||||
|
} else {
|
||||||
|
label.text = SDPhotoBrowserSaveImageSuccessText;
|
||||||
|
}
|
||||||
|
[label performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.0];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setupScrollView
|
||||||
|
{
|
||||||
|
_scrollView = [[UIScrollView alloc] init];
|
||||||
|
_scrollView.delegate = self;
|
||||||
|
_scrollView.showsHorizontalScrollIndicator = NO;
|
||||||
|
_scrollView.showsVerticalScrollIndicator = NO;
|
||||||
|
_scrollView.pagingEnabled = YES;
|
||||||
|
[self addSubview:_scrollView];
|
||||||
|
|
||||||
|
for (int i = 0; i < self.imageCount; i++) {
|
||||||
|
SDBrowserImageView *imageView = [[SDBrowserImageView alloc] init];
|
||||||
|
imageView.tag = i;
|
||||||
|
|
||||||
|
// 单击图片
|
||||||
|
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(photoClick:)];
|
||||||
|
|
||||||
|
// 双击放大图片
|
||||||
|
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewDoubleTaped:)];
|
||||||
|
doubleTap.numberOfTapsRequired = 2;
|
||||||
|
|
||||||
|
[singleTap requireGestureRecognizerToFail:doubleTap];
|
||||||
|
|
||||||
|
[imageView addGestureRecognizer:singleTap];
|
||||||
|
[imageView addGestureRecognizer:doubleTap];
|
||||||
|
[_scrollView addSubview:imageView];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self setupImageOfImageViewForIndex:self.currentImageIndex];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载图片
|
||||||
|
- (void)setupImageOfImageViewForIndex:(NSInteger)index
|
||||||
|
{
|
||||||
|
SDBrowserImageView *imageView = _scrollView.subviews[index];
|
||||||
|
self.currentImageIndex = index;
|
||||||
|
if (imageView.hasLoadedImage) return;
|
||||||
|
if ([self highQualityImageURLForIndex:index]) {
|
||||||
|
[imageView setImageWithURL:[self highQualityImageURLForIndex:index] placeholderImage:[self placeholderImageForIndex:index]];
|
||||||
|
} else {
|
||||||
|
imageView.image = [self placeholderImageForIndex:index];
|
||||||
|
}
|
||||||
|
imageView.hasLoadedImage = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)photoClick:(UITapGestureRecognizer *)recognizer
|
||||||
|
{
|
||||||
|
_scrollView.hidden = YES;
|
||||||
|
_willDisappear = YES;
|
||||||
|
|
||||||
|
SDBrowserImageView *currentImageView = (SDBrowserImageView *)recognizer.view;
|
||||||
|
NSInteger currentIndex = currentImageView.tag;
|
||||||
|
if (self.isHaveUserAdd) {
|
||||||
|
currentIndex = currentImageView.tag + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIView *sourceView = nil;
|
||||||
|
if ([self.sourceImagesContainerView isKindOfClass:UICollectionView.class]) {
|
||||||
|
UICollectionView *view = (UICollectionView *)self.sourceImagesContainerView;
|
||||||
|
NSIndexPath *path = [NSIndexPath indexPathForItem:currentIndex inSection:0];
|
||||||
|
sourceView = [view cellForItemAtIndexPath:path];
|
||||||
|
}else {
|
||||||
|
if (self.currentImageIndex<self.sourceImagesContainerView.subviews.count) {
|
||||||
|
sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CGRect targetTemp = (!CGRectEqualToRect(self.sourceImagesFrame, CGRectZero)) ? self.sourceImagesFrame : [self.sourceImagesContainerView convertRect:sourceView.frame toView:self];
|
||||||
|
UIImageView *tempView = [[UIImageView alloc] init];
|
||||||
|
tempView.contentMode = sourceView.contentMode;
|
||||||
|
tempView.clipsToBounds = YES;
|
||||||
|
tempView.image = currentImageView.image;
|
||||||
|
CGFloat h = (self.bounds.size.width / currentImageView.image.size.width) * currentImageView.image.size.height;
|
||||||
|
|
||||||
|
if (!currentImageView.image) { // 防止 因imageview的image加载失败 导致 崩溃
|
||||||
|
h = self.bounds.size.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
tempView.bounds = CGRectMake(0, 0, self.bounds.size.width, h);
|
||||||
|
tempView.center = self.center;
|
||||||
|
|
||||||
|
[self addSubview:tempView];
|
||||||
|
|
||||||
|
_saveButton.hidden = YES;
|
||||||
|
|
||||||
|
[UIView animateWithDuration:SDPhotoBrowserHideImageAnimationDuration animations:^{
|
||||||
|
tempView.frame = targetTemp;
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
_indexLabel.alpha = 0.1;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[self removeFromSuperview];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)imageViewDoubleTaped:(UITapGestureRecognizer *)recognizer
|
||||||
|
{
|
||||||
|
SDBrowserImageView *imageView = (SDBrowserImageView *)recognizer.view;
|
||||||
|
CGFloat scale;
|
||||||
|
if (imageView.isScaled) {
|
||||||
|
scale = 1.0;
|
||||||
|
} else {
|
||||||
|
scale = 2.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDBrowserImageView *view = (SDBrowserImageView *)recognizer.view;
|
||||||
|
|
||||||
|
[view doubleTapToZommWithScale:scale];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)layoutSubviews
|
||||||
|
{
|
||||||
|
[super layoutSubviews];
|
||||||
|
|
||||||
|
CGRect rect = self.bounds;
|
||||||
|
rect.size.width += SDPhotoBrowserImageViewMargin * 2;
|
||||||
|
|
||||||
|
_scrollView.bounds = rect;
|
||||||
|
_scrollView.center = self.center;
|
||||||
|
|
||||||
|
CGFloat y = 0;
|
||||||
|
CGFloat w = _scrollView.frame.size.width - SDPhotoBrowserImageViewMargin * 2;
|
||||||
|
CGFloat h = _scrollView.frame.size.height;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[_scrollView.subviews enumerateObjectsUsingBlock:^(SDBrowserImageView *obj, NSUInteger idx, BOOL *stop) {
|
||||||
|
CGFloat x = SDPhotoBrowserImageViewMargin + idx * (SDPhotoBrowserImageViewMargin * 2 + w);
|
||||||
|
obj.frame = CGRectMake(x, y, w, h);
|
||||||
|
}];
|
||||||
|
|
||||||
|
_scrollView.contentSize = CGSizeMake(_scrollView.subviews.count * _scrollView.frame.size.width, 0);
|
||||||
|
_scrollView.contentOffset = CGPointMake(self.currentImageIndex * _scrollView.frame.size.width, 0);
|
||||||
|
|
||||||
|
|
||||||
|
if (!_hasShowedFistView) {
|
||||||
|
[self showFirstImage];
|
||||||
|
}
|
||||||
|
|
||||||
|
_indexLabel.center = CGPointMake(self.bounds.size.width * 0.5, 35+iPhoneX_NavSafeArea);
|
||||||
|
_saveButton.frame = CGRectMake(30, self.bounds.size.height - 70, 50, 25);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)show
|
||||||
|
{
|
||||||
|
currentWindows = [UIApplication sharedApplication].keyWindow;
|
||||||
|
self.frame = currentWindows.bounds;
|
||||||
|
[currentWindows addObserver:self forKeyPath:@"frame" options:0 context:nil];
|
||||||
|
[currentWindows addSubview:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(UIView *)object change:(NSDictionary *)change context:(void *)context
|
||||||
|
{
|
||||||
|
if ([keyPath isEqualToString:@"frame"]) {
|
||||||
|
self.frame = object.bounds;
|
||||||
|
SDBrowserImageView *currentImageView = _scrollView.subviews[_currentImageIndex];
|
||||||
|
if ([currentImageView isKindOfClass:[SDBrowserImageView class]]) {
|
||||||
|
[currentImageView clear];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showFirstImage
|
||||||
|
{
|
||||||
|
UIView *sourceView = nil;
|
||||||
|
|
||||||
|
if ([self.sourceImagesContainerView isKindOfClass:UICollectionView.class]) {
|
||||||
|
UICollectionView *view = (UICollectionView *)self.sourceImagesContainerView;
|
||||||
|
if (self.isHaveUserAdd) {
|
||||||
|
NSInteger haveUserIndex = self.currentImageIndex + 1;
|
||||||
|
NSIndexPath *path = [NSIndexPath indexPathForItem:haveUserIndex inSection:0];
|
||||||
|
sourceView = [view cellForItemAtIndexPath:path];
|
||||||
|
} else {
|
||||||
|
NSIndexPath *path = [NSIndexPath indexPathForItem:self.currentImageIndex inSection:0];
|
||||||
|
sourceView = [view cellForItemAtIndexPath:path];
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
if (self.currentImageIndex<self.sourceImagesContainerView.subviews.count) {
|
||||||
|
sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CGRect rect = (!CGRectEqualToRect(self.sourceImagesFrame, CGRectZero)) ? self.sourceImagesFrame : [self.sourceImagesContainerView convertRect:sourceView.frame toView:self];
|
||||||
|
|
||||||
|
UIImageView *tempView = [[UIImageView alloc] init];
|
||||||
|
tempView.image = [self placeholderImageForIndex:self.currentImageIndex];
|
||||||
|
|
||||||
|
[self addSubview:tempView];
|
||||||
|
|
||||||
|
CGRect targetTemp = [_scrollView.subviews[self.currentImageIndex] bounds];
|
||||||
|
|
||||||
|
tempView.frame = rect;
|
||||||
|
tempView.contentMode = [_scrollView.subviews[self.currentImageIndex] contentMode];
|
||||||
|
_scrollView.hidden = YES;
|
||||||
|
|
||||||
|
|
||||||
|
[UIView animateWithDuration:SDPhotoBrowserShowImageAnimationDuration animations:^{
|
||||||
|
tempView.center = self.center;
|
||||||
|
tempView.bounds = (CGRect){CGPointZero, targetTemp.size};
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
_hasShowedFistView = YES;
|
||||||
|
[tempView removeFromSuperview];
|
||||||
|
_scrollView.hidden = NO;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)placeholderImageForIndex:(NSInteger)index
|
||||||
|
{
|
||||||
|
if ([self.delegate respondsToSelector:@selector(photoBrowser:placeholderImageForIndex:)]) {
|
||||||
|
return [self.delegate photoBrowser:self placeholderImageForIndex:index];
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSURL *)highQualityImageURLForIndex:(NSInteger)index
|
||||||
|
{
|
||||||
|
if ([self.delegate respondsToSelector:@selector(photoBrowser:highQualityImageURLForIndex:)]) {
|
||||||
|
return [self.delegate photoBrowser:self highQualityImageURLForIndex:index];
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - scrollview代理方法
|
||||||
|
|
||||||
|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
|
||||||
|
{
|
||||||
|
int index = (scrollView.contentOffset.x + _scrollView.bounds.size.width * 0.5) / _scrollView.bounds.size.width;
|
||||||
|
|
||||||
|
// 有过缩放的图片在拖动一定距离后清除缩放
|
||||||
|
CGFloat margin = 150;
|
||||||
|
CGFloat x = scrollView.contentOffset.x;
|
||||||
|
if ((x - index * self.bounds.size.width) > margin || (x - index * self.bounds.size.width) < - margin) {
|
||||||
|
SDBrowserImageView *imageView = _scrollView.subviews[index];
|
||||||
|
if (imageView.isScaled) {
|
||||||
|
[UIView animateWithDuration:0.5 animations:^{
|
||||||
|
imageView.transform = CGAffineTransformIdentity;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[imageView eliminateScale];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!_willDisappear) {
|
||||||
|
if (self.isMe) {
|
||||||
|
if (self.isHaveUserAdd) {
|
||||||
|
_indexLabel.text = [NSString stringWithFormat:@"%d/%ld", index + 1, (long)self.imageCount];
|
||||||
|
} else {
|
||||||
|
_indexLabel.text = [NSString stringWithFormat:@"%d/%ld", index, (long)self.imageCount];
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
_indexLabel.text = [NSString stringWithFormat:@"%d/%ld", index + 1, (long)self.imageCount];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
[self setupImageOfImageViewForIndex:index];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
42
xplan-ios/Base/Tool/SDPhotoBrowser/SDPhotoBrowserConfig.h
Executable file
42
xplan-ios/Base/Tool/SDPhotoBrowser/SDPhotoBrowserConfig.h
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// SDPhotoBrowserConfig.h
|
||||||
|
// SDPhotoBrowser
|
||||||
|
//
|
||||||
|
// Created by aier on 15-2-9.
|
||||||
|
// Copyright (c) 2015年 GSD. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SDWaitingViewModeLoopDiagram, // 环形
|
||||||
|
SDWaitingViewModePieDiagram // 饼型
|
||||||
|
} SDWaitingViewMode;
|
||||||
|
|
||||||
|
// 图片保存成功提示文字
|
||||||
|
#define SDPhotoBrowserSaveImageSuccessText @" ^_^ 保存成功 ";
|
||||||
|
|
||||||
|
// 图片保存失败提示文字
|
||||||
|
#define SDPhotoBrowserSaveImageFailText @" >_< 保存失败 ";
|
||||||
|
|
||||||
|
// browser背景颜色
|
||||||
|
#define SDPhotoBrowserBackgrounColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.95]
|
||||||
|
|
||||||
|
// browser中图片间的margin
|
||||||
|
#define SDPhotoBrowserImageViewMargin 10
|
||||||
|
|
||||||
|
// browser中显示图片动画时长
|
||||||
|
#define SDPhotoBrowserShowImageAnimationDuration 0.4f
|
||||||
|
|
||||||
|
// browser中显示图片动画时长
|
||||||
|
#define SDPhotoBrowserHideImageAnimationDuration 0.4f
|
||||||
|
|
||||||
|
// 图片下载进度指示进度显示样式(SDWaitingViewModeLoopDiagram 环形,SDWaitingViewModePieDiagram 饼型)
|
||||||
|
#define SDWaitingViewProgressMode SDWaitingViewModeLoopDiagram
|
||||||
|
|
||||||
|
// 图片下载进度指示器背景色
|
||||||
|
#define SDWaitingViewBackgroundColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]
|
||||||
|
|
||||||
|
// 图片下载进度指示器内部控件间的间距
|
||||||
|
#define SDWaitingViewItemMargin 10
|
||||||
|
|
||||||
|
|
17
xplan-ios/Base/Tool/SDPhotoBrowser/SDWaitingView.h
Executable file
17
xplan-ios/Base/Tool/SDPhotoBrowser/SDWaitingView.h
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// SDWaitingView.h
|
||||||
|
// SDPhotoBrowser
|
||||||
|
//
|
||||||
|
// Created by aier on 15-2-6.
|
||||||
|
// Copyright (c) 2015年 GSD. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "SDPhotoBrowserConfig.h"
|
||||||
|
|
||||||
|
@interface SDWaitingView : UIView
|
||||||
|
|
||||||
|
@property (nonatomic, assign) CGFloat progress;
|
||||||
|
@property (nonatomic, assign) int mode;
|
||||||
|
|
||||||
|
@end
|
93
xplan-ios/Base/Tool/SDPhotoBrowser/SDWaitingView.m
Executable file
93
xplan-ios/Base/Tool/SDPhotoBrowser/SDWaitingView.m
Executable file
@@ -0,0 +1,93 @@
|
|||||||
|
//
|
||||||
|
// SDWaitingView.m
|
||||||
|
// SDPhotoBrowser
|
||||||
|
//
|
||||||
|
// Created by aier on 15-2-6.
|
||||||
|
// Copyright (c) 2015年 GSD. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "SDWaitingView.h"
|
||||||
|
|
||||||
|
//// 图片下载进度指示器背景色
|
||||||
|
//#define SDWaitingViewBackgroundColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]
|
||||||
|
//
|
||||||
|
//// 图片下载进度指示器内部控件间的间距
|
||||||
|
//
|
||||||
|
//#define SDWaitingViewItemMargin 10
|
||||||
|
|
||||||
|
|
||||||
|
@implementation SDWaitingView
|
||||||
|
|
||||||
|
|
||||||
|
- (id)initWithFrame:(CGRect)frame
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
self.backgroundColor = SDWaitingViewBackgroundColor;
|
||||||
|
self.layer.cornerRadius = 5;
|
||||||
|
self.clipsToBounds = YES;
|
||||||
|
self.mode = SDWaitingViewModeLoopDiagram;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setProgress:(CGFloat)progress
|
||||||
|
{
|
||||||
|
_progress = progress;
|
||||||
|
// NSLog(@"%@",[NSThread currentThread]);
|
||||||
|
//将重绘操作放在主线程,解决自动布局控制台报错的问题
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
|
||||||
|
[self setNeedsDisplay];
|
||||||
|
if (progress >= 1) {
|
||||||
|
[self removeFromSuperview];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)drawRect:(CGRect)rect
|
||||||
|
{
|
||||||
|
CGContextRef ctx = UIGraphicsGetCurrentContext();
|
||||||
|
|
||||||
|
CGFloat xCenter = rect.size.width * 0.5;
|
||||||
|
CGFloat yCenter = rect.size.height * 0.5;
|
||||||
|
[[UIColor whiteColor] set];
|
||||||
|
|
||||||
|
switch (self.mode) {
|
||||||
|
case SDWaitingViewModePieDiagram:
|
||||||
|
{
|
||||||
|
CGFloat radius = MIN(rect.size.width * 0.5, rect.size.height * 0.5) - SDWaitingViewItemMargin;
|
||||||
|
|
||||||
|
|
||||||
|
CGFloat w = radius * 2 + SDWaitingViewItemMargin;
|
||||||
|
CGFloat h = w;
|
||||||
|
CGFloat x = (rect.size.width - w) * 0.5;
|
||||||
|
CGFloat y = (rect.size.height - h) * 0.5;
|
||||||
|
CGContextAddEllipseInRect(ctx, CGRectMake(x, y, w, h));
|
||||||
|
CGContextFillPath(ctx);
|
||||||
|
|
||||||
|
[SDWaitingViewBackgroundColor set];
|
||||||
|
CGContextMoveToPoint(ctx, xCenter, yCenter);
|
||||||
|
CGContextAddLineToPoint(ctx, xCenter, 0);
|
||||||
|
CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.001; // 初始值
|
||||||
|
CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 1);
|
||||||
|
CGContextClosePath(ctx);
|
||||||
|
|
||||||
|
CGContextFillPath(ctx);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
CGContextSetLineWidth(ctx, 15);
|
||||||
|
CGContextSetLineCap(ctx, kCGLineCapRound);
|
||||||
|
CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.05; // 初始值0.05
|
||||||
|
CGFloat radius = MIN(rect.size.width, rect.size.height) * 0.5 - SDWaitingViewItemMargin;
|
||||||
|
CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 0);
|
||||||
|
CGContextStrokePath(ctx);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
33
xplan-ios/Main/Mine/Model/XPMineUserInfoEditModel.h
Normal file
33
xplan-ios/Main/Mine/Model/XPMineUserInfoEditModel.h
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditModel.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
typedef NS_ENUM(NSInteger, XPMineUserInfoEditType) {
|
||||||
|
XPMineUserInfoEditType_Avatar,///头像
|
||||||
|
XPMineUserInfoEditType_Nick,///名字
|
||||||
|
XPMineUserInfoEditType_Birth,///生日
|
||||||
|
XPMineUserInfoEditType_Photo,///相册
|
||||||
|
XPMineUserInfoEditType_UseDes,///用户描述
|
||||||
|
};
|
||||||
|
|
||||||
|
@interface XPMineUserInfoEditModel : NSObject
|
||||||
|
///类型
|
||||||
|
@property (nonatomic,assign) XPMineUserInfoEditType type;
|
||||||
|
///标题
|
||||||
|
@property (nonatomic,copy) NSString *title;
|
||||||
|
///副标题
|
||||||
|
@property (nonatomic,copy) NSString *subTitle;
|
||||||
|
///头像
|
||||||
|
@property (nonatomic,copy) NSString *avatarUrl;
|
||||||
|
///相册
|
||||||
|
@property (nonatomic,copy) NSArray *photoArray;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
12
xplan-ios/Main/Mine/Model/XPMineUserInfoEditModel.m
Normal file
12
xplan-ios/Main/Mine/Model/XPMineUserInfoEditModel.m
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditModel.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoEditModel.h"
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoEditModel
|
||||||
|
|
||||||
|
@end
|
19
xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.h
Normal file
19
xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditPresenter.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BaseMvpPresenter.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class UserInfoModel;
|
||||||
|
@interface XPMineUserInfoEditPresenter : BaseMvpPresenter
|
||||||
|
|
||||||
|
///获取个人资料页编辑的数据源
|
||||||
|
- (void)getUserInfoEditDataSourceWithUserInfo:(UserInfoModel *)userInfo;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
126
xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.m
Normal file
126
xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.m
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditPresenter.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoEditPresenter.h"
|
||||||
|
|
||||||
|
///Model
|
||||||
|
#import "XPMineUserInfoEditModel.h"
|
||||||
|
#import "UserInfoModel.h"
|
||||||
|
///P
|
||||||
|
#import "XPMineUserInfoEditProtocol.h"
|
||||||
|
@interface XPMineUserInfoEditPresenter ()
|
||||||
|
///昵称
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoEditModel *nickItem;
|
||||||
|
///头像
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoEditModel *avatarItem;
|
||||||
|
///生日
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoEditModel *birthItem;
|
||||||
|
///相册
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoEditModel *photoItem;
|
||||||
|
///介绍
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoEditModel *desItem;
|
||||||
|
///
|
||||||
|
@property (nonatomic,strong) NSMutableArray *editArray;
|
||||||
|
///日期的格式
|
||||||
|
@property (nonatomic,strong) NSDateFormatter *dateFormatter;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoEditPresenter
|
||||||
|
|
||||||
|
///获取个人资料页编辑的数据源
|
||||||
|
- (void)getUserInfoEditDataSourceWithUserInfo:(UserInfoModel *)userInfo {
|
||||||
|
///数据组装
|
||||||
|
if (self.editArray.count <= 0) {
|
||||||
|
[self.editArray addObject:self.avatarItem];
|
||||||
|
[self.editArray addObject:self.nickItem];
|
||||||
|
[self.editArray addObject:self.birthItem];
|
||||||
|
[self.editArray addObject:self.photoItem];
|
||||||
|
[self.editArray addObject:self.desItem];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userInfo.avatar.length > 0) {
|
||||||
|
self.avatarItem.avatarUrl = userInfo.avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.nickItem.subTitle = userInfo.nick;
|
||||||
|
NSString *dateStr = [self.dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:userInfo.birth/1000]];
|
||||||
|
self.birthItem.subTitle = dateStr;
|
||||||
|
|
||||||
|
if (userInfo.privatePhoto.count > 0) {
|
||||||
|
self.photoItem.photoArray = userInfo.privatePhoto;
|
||||||
|
}
|
||||||
|
self.desItem.subTitle = userInfo.userDesc.length > 0 ? userInfo.userDesc : @"";
|
||||||
|
///数据回传
|
||||||
|
[[self getView] getUserInfoEditDataSourceSuccess:self.editArray];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- (XPMineUserInfoEditModel *)nickItem {
|
||||||
|
if (!_nickItem) {
|
||||||
|
_nickItem = [[XPMineUserInfoEditModel alloc] init];
|
||||||
|
_nickItem.type = XPMineUserInfoEditType_Nick;
|
||||||
|
_nickItem.title = @"昵称:";
|
||||||
|
}
|
||||||
|
return _nickItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (XPMineUserInfoEditModel *)avatarItem {
|
||||||
|
if (!_avatarItem) {
|
||||||
|
_avatarItem = [[XPMineUserInfoEditModel alloc] init];
|
||||||
|
_avatarItem.type = XPMineUserInfoEditType_Avatar;
|
||||||
|
_avatarItem.title = @"头像:";
|
||||||
|
}
|
||||||
|
return _avatarItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (XPMineUserInfoEditModel *)birthItem {
|
||||||
|
if (!_birthItem) {
|
||||||
|
_birthItem = [[XPMineUserInfoEditModel alloc] init];
|
||||||
|
_birthItem.type = XPMineUserInfoEditType_Birth;
|
||||||
|
_birthItem.title = @"生日:";
|
||||||
|
}
|
||||||
|
return _birthItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (XPMineUserInfoEditModel *)photoItem {
|
||||||
|
if (!_photoItem) {
|
||||||
|
_photoItem = [[XPMineUserInfoEditModel alloc] init];
|
||||||
|
_photoItem.type = XPMineUserInfoEditType_Photo;
|
||||||
|
_photoItem.title = @"相册:";
|
||||||
|
}
|
||||||
|
return _photoItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (XPMineUserInfoEditModel *)desItem {
|
||||||
|
if (!_desItem) {
|
||||||
|
_desItem = [[XPMineUserInfoEditModel alloc] init];
|
||||||
|
_desItem.type = XPMineUserInfoEditType_UseDes;
|
||||||
|
_desItem.title = @"个人介绍:";
|
||||||
|
}
|
||||||
|
return _desItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSMutableArray *)editArray {
|
||||||
|
if (!_editArray) {
|
||||||
|
_editArray = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _editArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDateFormatter *)dateFormatter {
|
||||||
|
if (!_dateFormatter) {
|
||||||
|
_dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
_dateFormatter.dateFormat = @"YYYY-MM-dd";
|
||||||
|
}
|
||||||
|
return _dateFormatter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
17
xplan-ios/Main/Mine/Presenter/XPMineUserInfoPresenter.h
Normal file
17
xplan-ios/Main/Mine/Presenter/XPMineUserInfoPresenter.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoPresenter.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BaseMvpPresenter.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface XPMineUserInfoPresenter : BaseMvpPresenter
|
||||||
|
// 获取用户信息
|
||||||
|
- (void)getUserInfoWithUid:(NSString *)uid;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
29
xplan-ios/Main/Mine/Presenter/XPMineUserInfoPresenter.m
Normal file
29
xplan-ios/Main/Mine/Presenter/XPMineUserInfoPresenter.m
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoPresenter.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoPresenter.h"
|
||||||
|
///Api
|
||||||
|
#import "Api+Mine.h"
|
||||||
|
///Model
|
||||||
|
#import "UserInfoModel.h"
|
||||||
|
///P
|
||||||
|
#import "XPMineUserInfoProtocol.h"
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoPresenter
|
||||||
|
|
||||||
|
// 获取用户信息
|
||||||
|
- (void)getUserInfoWithUid:(NSString *)uid {
|
||||||
|
[Api getUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
||||||
|
UserInfoModel * infoModel = [UserInfoModel modelWithDictionary:data.data];
|
||||||
|
[[self getView] onGetUserInfoSuccess:infoModel];
|
||||||
|
} fail:^(NSInteger code, NSString * _Nullable msg) {
|
||||||
|
|
||||||
|
}] uid:uid];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
17
xplan-ios/Main/Mine/Protocol/XPMineUserInfoEditProtocol.h
Normal file
17
xplan-ios/Main/Mine/Protocol/XPMineUserInfoEditProtocol.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditProtocol.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@protocol XPMineUserInfoEditProtocol <NSObject>
|
||||||
|
///获取编辑个人资料页面的数据
|
||||||
|
- (void)getUserInfoEditDataSourceSuccess:(NSArray *)array;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
17
xplan-ios/Main/Mine/Protocol/XPMineUserInfoProtocol.h
Normal file
17
xplan-ios/Main/Mine/Protocol/XPMineUserInfoProtocol.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoProtocol.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@protocol XPMineUserInfoProtocol <NSObject>
|
||||||
|
///获取用户信息成功
|
||||||
|
- (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// XPMineCustomNavView.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class XPMineUserInfoCustomNavView;
|
||||||
|
@protocol XPMineCustomNavViewDelegate <NSObject>
|
||||||
|
///点击了编辑的按钮
|
||||||
|
- (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickEditButton:(UIButton *)sender;
|
||||||
|
///点击了返回按钮
|
||||||
|
- (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickBackButton:(UIButton *)sender;
|
||||||
|
@end
|
||||||
|
@interface XPMineUserInfoCustomNavView : UIView
|
||||||
|
///代理
|
||||||
|
@property (nonatomic,weak) id<XPMineCustomNavViewDelegate> delegate;
|
||||||
|
///显示文本
|
||||||
|
@property (nonatomic,strong,readonly) UILabel *titleLabel;
|
||||||
|
///编辑按钮
|
||||||
|
@property (nonatomic,strong,readonly) UIButton *editButton;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,103 @@
|
|||||||
|
//
|
||||||
|
// XPMineCustomNavView.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoCustomNavView.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
|
||||||
|
@interface XPMineUserInfoCustomNavView ()
|
||||||
|
///返回按钮
|
||||||
|
@property (nonatomic,strong) UIButton *backButton;
|
||||||
|
///显示文本
|
||||||
|
@property (nonatomic,strong) UILabel *titleLabel;
|
||||||
|
///编辑按钮
|
||||||
|
@property (nonatomic,strong) UIButton *editButton;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoCustomNavView
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame {
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
#pragma mark - Response
|
||||||
|
- (void)editButtonAction:(UIButton *)sender {
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineCustomNavView:didClickEditButton:)]) {
|
||||||
|
[self.delegate xPMineCustomNavView:self didClickEditButton:sender];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)backButtonAction:(UIButton *)sender {
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineCustomNavView:didClickBackButton:)]) {
|
||||||
|
[self.delegate xPMineCustomNavView:self didClickBackButton:sender];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
[self addSubview:self.backButton];
|
||||||
|
[self addSubview:self.titleLabel];
|
||||||
|
[self addSubview:self.editButton];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.backButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(15);
|
||||||
|
make.centerY.equalTo(self.mas_bottom).mas_offset(-22);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.editButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.right.mas_equalTo(-15);
|
||||||
|
make.centerY.equalTo(self.mas_bottom).mas_offset(-22);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.centerX.mas_equalTo(self);
|
||||||
|
make.centerY.equalTo(self.mas_bottom).mas_offset(-22);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
|
- (UIButton *)backButton {
|
||||||
|
if (!_backButton) {
|
||||||
|
_backButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[_backButton setImage:[UIImage imageNamed:@"common_nav_back"] forState:UIControlStateNormal];
|
||||||
|
_backButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
|
||||||
|
[_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
}
|
||||||
|
return _backButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (UIButton *)editButton {
|
||||||
|
if (!_editButton) {
|
||||||
|
_editButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[_editButton setImage:[UIImage imageNamed:@"mine_user_info_edit"] forState:UIControlStateNormal];
|
||||||
|
[_editButton addTarget:self action:@selector(editButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
}
|
||||||
|
return _editButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (UILabel *)titleLabel {
|
||||||
|
if (!_titleLabel) {
|
||||||
|
_titleLabel = [[UILabel alloc] init];
|
||||||
|
_titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
_titleLabel.font = [UIFont systemFontOfSize:15];
|
||||||
|
_titleLabel.textColor = [ThemeColor mainTextColor];
|
||||||
|
}
|
||||||
|
return _titleLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditTableViewCell.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class XPMineUserInfoEditModel;
|
||||||
|
@interface XPMineUserInfoEditTableViewCell : UITableViewCell
|
||||||
|
///数据
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoEditModel *itmeModel;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,282 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditTableViewCell.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoEditTableViewCell.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
#import "UIImageView+LoadImage.h"
|
||||||
|
///Model
|
||||||
|
#import "XPMineUserInfoEditModel.h"
|
||||||
|
|
||||||
|
@interface XPMineUserInfoEditTableViewCell ()
|
||||||
|
///容器
|
||||||
|
@property (nonatomic,strong) UIStackView *stackView;
|
||||||
|
///标题
|
||||||
|
@property (nonatomic,strong) UILabel *titleLabel;
|
||||||
|
///头像
|
||||||
|
@property (nonatomic,strong) UIImageView *avatarImageView;
|
||||||
|
///副标题
|
||||||
|
@property (nonatomic,strong) UILabel *subTitleLabel;
|
||||||
|
///箭头
|
||||||
|
@property (nonatomic,strong) UIImageView *arrowImageView;
|
||||||
|
///相册的
|
||||||
|
@property (nonatomic,strong) UIStackView *phototStackView;
|
||||||
|
///第一个
|
||||||
|
@property (nonatomic,strong) UIImageView *firstPhotoImageView;
|
||||||
|
///第er个
|
||||||
|
@property (nonatomic,strong) UIImageView *secondPhotoImageView;
|
||||||
|
///第三个
|
||||||
|
@property (nonatomic,strong) UIImageView *thirdPhotoImageView;
|
||||||
|
///分割线
|
||||||
|
@property (nonatomic,strong) UIView * partLineView;
|
||||||
|
///
|
||||||
|
@property (nonatomic,strong) NSMutableArray *photoViewArray;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoEditTableViewCell
|
||||||
|
|
||||||
|
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||||
|
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||||
|
[self.contentView addSubview:self.stackView];
|
||||||
|
[self.contentView addSubview:self.partLineView];
|
||||||
|
|
||||||
|
[self.stackView addArrangedSubview:self.titleLabel];
|
||||||
|
[self.stackView addArrangedSubview:self.avatarImageView];
|
||||||
|
[self.stackView addArrangedSubview:self.subTitleLabel];
|
||||||
|
[self.stackView addArrangedSubview:self.phototStackView];
|
||||||
|
[self.stackView addArrangedSubview:self.arrowImageView];
|
||||||
|
|
||||||
|
[self.phototStackView addArrangedSubview:self.thirdPhotoImageView];
|
||||||
|
[self.phototStackView addArrangedSubview:self.secondPhotoImageView];
|
||||||
|
[self.phototStackView addArrangedSubview:self.firstPhotoImageView];
|
||||||
|
|
||||||
|
[self.photoViewArray addObject:self.firstPhotoImageView];
|
||||||
|
[self.photoViewArray addObject:self.secondPhotoImageView];
|
||||||
|
[self.photoViewArray addObject:self.secondPhotoImageView];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.mas_equalTo(self.contentView);
|
||||||
|
make.bottom.mas_equalTo(self.partLineView.mas_top);
|
||||||
|
make.left.right.mas_equalTo(self.contentView).inset(15);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.partLineView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.right.mas_equalTo(self.contentView).inset(25);
|
||||||
|
make.bottom.mas_equalTo(self.contentView);
|
||||||
|
make.height.mas_equalTo(1);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.size.mas_equalTo(CGSizeMake(50, 50));
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.arrowImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.size.mas_equalTo(CGSizeMake(6, 10));
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.firstPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.width.height.mas_equalTo(35);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.secondPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.width.height.mas_equalTo(self.firstPhotoImageView);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.thirdPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.width.height.mas_equalTo(self.firstPhotoImageView);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)loadPhotoViewWithPhotoArray:(NSArray *)array {
|
||||||
|
if (array.count > 3) {
|
||||||
|
array = [array subarrayWithRange:NSMakeRange(0, 3)];
|
||||||
|
}
|
||||||
|
for (int i = 0; i < array.count; i++) {
|
||||||
|
UIImageView * imageView = [self.photoViewArray objectAtIndex:i];
|
||||||
|
NSString * imageUrl = [array objectAtIndex:i];
|
||||||
|
[imageView load_setImageImageWithUrl:imageUrl placeholderImage:[UIImageConstant defaultAvatarPlaceholder]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)configCellWithModel:(XPMineUserInfoEditModel *)model{
|
||||||
|
switch (model.type) {
|
||||||
|
case XPMineUserInfoEditType_Avatar:
|
||||||
|
{
|
||||||
|
self.subTitleLabel.hidden = YES;
|
||||||
|
self.phototStackView.hidden = YES;
|
||||||
|
self.avatarImageView.hidden = NO;
|
||||||
|
[self.avatarImageView load_setImageImageWithUrl:model.avatarUrl placeholderImage:[UIImageConstant defaultAvatarPlaceholder]];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_Birth:
|
||||||
|
{
|
||||||
|
self.subTitleLabel.hidden = NO;
|
||||||
|
self.phototStackView.hidden = YES;
|
||||||
|
self.avatarImageView.hidden = YES;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_Nick:
|
||||||
|
{
|
||||||
|
self.subTitleLabel.hidden = NO;
|
||||||
|
self.phototStackView.hidden = YES;
|
||||||
|
self.avatarImageView.hidden = YES;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_UseDes:
|
||||||
|
{
|
||||||
|
self.subTitleLabel.hidden = NO;
|
||||||
|
self.phototStackView.hidden = YES;
|
||||||
|
self.avatarImageView.hidden = YES;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_Photo:
|
||||||
|
{
|
||||||
|
self.subTitleLabel.hidden = YES;
|
||||||
|
self.phototStackView.hidden = NO;
|
||||||
|
self.avatarImageView.hidden = YES;
|
||||||
|
[self loadPhotoViewWithPhotoArray:model.photoArray];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
|
- (void)setItmeModel:(XPMineUserInfoEditModel *)itmeModel {
|
||||||
|
_itmeModel = itmeModel;
|
||||||
|
if (_itmeModel) {
|
||||||
|
self.titleLabel.text = _itmeModel.title;
|
||||||
|
self.subTitleLabel.text = _itmeModel.subTitle;
|
||||||
|
[self configCellWithModel:itmeModel];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIStackView *)stackView {
|
||||||
|
if (!_stackView) {
|
||||||
|
_stackView = [[UIStackView alloc] init];
|
||||||
|
_stackView.axis = UILayoutConstraintAxisHorizontal;
|
||||||
|
_stackView.distribution = UIStackViewDistributionFill;
|
||||||
|
_stackView.alignment = UIStackViewAlignmentCenter;
|
||||||
|
_stackView.spacing = 10;
|
||||||
|
}
|
||||||
|
return _stackView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)titleLabel {
|
||||||
|
if (!_titleLabel) {
|
||||||
|
_titleLabel = [[UILabel alloc] init];
|
||||||
|
_titleLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
_titleLabel.textColor = [ThemeColor mainTextColor];
|
||||||
|
[_titleLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
|
||||||
|
}
|
||||||
|
return _titleLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)subTitleLabel {
|
||||||
|
if (!_subTitleLabel) {
|
||||||
|
_subTitleLabel = [[UILabel alloc] init];
|
||||||
|
_subTitleLabel.textColor = [ThemeColor secondTextColor];
|
||||||
|
_subTitleLabel.font = [UIFont systemFontOfSize:12.f];
|
||||||
|
_subTitleLabel.textAlignment = NSTextAlignmentRight;
|
||||||
|
}
|
||||||
|
return _subTitleLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImageView *)avatarImageView {
|
||||||
|
if (!_avatarImageView) {
|
||||||
|
_avatarImageView = [[UIImageView alloc] init];
|
||||||
|
_avatarImageView.userInteractionEnabled = YES;
|
||||||
|
_avatarImageView.layer.cornerRadius = 25;
|
||||||
|
_avatarImageView.layer.masksToBounds = YES;
|
||||||
|
}
|
||||||
|
return _avatarImageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImageView *)arrowImageView {
|
||||||
|
if (!_arrowImageView) {
|
||||||
|
_arrowImageView = [[UIImageView alloc] init];
|
||||||
|
_arrowImageView.userInteractionEnabled = YES;
|
||||||
|
_arrowImageView.image = [UIImage imageNamed:@"mine_item_arrow"];
|
||||||
|
[_arrowImageView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
|
||||||
|
}
|
||||||
|
return _arrowImageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIStackView *)phototStackView {
|
||||||
|
if (!_phototStackView) {
|
||||||
|
_phototStackView = [[UIStackView alloc] init];
|
||||||
|
_phototStackView.axis = UILayoutConstraintAxisHorizontal;
|
||||||
|
_phototStackView.distribution = UIStackViewDistributionFill;
|
||||||
|
_phototStackView.alignment = UIStackViewAlignmentFill;
|
||||||
|
_phototStackView.spacing = 10;
|
||||||
|
}
|
||||||
|
return _phototStackView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImageView *)firstPhotoImageView {
|
||||||
|
if (!_firstPhotoImageView) {
|
||||||
|
_firstPhotoImageView = [[UIImageView alloc] init];
|
||||||
|
_firstPhotoImageView.userInteractionEnabled = YES;
|
||||||
|
_firstPhotoImageView.layer.masksToBounds = YES;
|
||||||
|
_firstPhotoImageView.layer.cornerRadius = 5;
|
||||||
|
}
|
||||||
|
return _firstPhotoImageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImageView *)secondPhotoImageView {
|
||||||
|
if (!_secondPhotoImageView) {
|
||||||
|
_secondPhotoImageView = [[UIImageView alloc] init];
|
||||||
|
_secondPhotoImageView.userInteractionEnabled = YES;
|
||||||
|
_secondPhotoImageView.layer.masksToBounds = YES;
|
||||||
|
_secondPhotoImageView.layer.cornerRadius = 5;
|
||||||
|
}
|
||||||
|
return _secondPhotoImageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImageView *)thirdPhotoImageView {
|
||||||
|
if (!_thirdPhotoImageView) {
|
||||||
|
_thirdPhotoImageView = [[UIImageView alloc] init];
|
||||||
|
_thirdPhotoImageView.userInteractionEnabled = YES;
|
||||||
|
_thirdPhotoImageView.layer.masksToBounds = YES;
|
||||||
|
_thirdPhotoImageView.layer.cornerRadius = 5;
|
||||||
|
}
|
||||||
|
return _thirdPhotoImageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIView *)partLineView {
|
||||||
|
if (!_partLineView) {
|
||||||
|
_partLineView = [[UIView alloc] init];
|
||||||
|
_partLineView.backgroundColor = [ThemeColor dividerColor];
|
||||||
|
}
|
||||||
|
return _partLineView;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSMutableArray *)photoViewArray {
|
||||||
|
if (!_photoViewArray) {
|
||||||
|
_photoViewArray = [NSMutableArray array];
|
||||||
|
}
|
||||||
|
return _photoViewArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// XPMineInfoTableViewCell.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class UserInfoModel;
|
||||||
|
@interface XPMineUserInfoTableViewCell : UITableViewCell
|
||||||
|
///用户信息
|
||||||
|
@property (nonatomic,strong) UserInfoModel *userInfo;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,141 @@
|
|||||||
|
//
|
||||||
|
// XPMineInfoTableViewCell.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoTableViewCell.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
///Model
|
||||||
|
#import "UserInfoModel.h"
|
||||||
|
|
||||||
|
@interface XPMineUserInfoTableViewCell ()
|
||||||
|
///背景
|
||||||
|
@property (nonatomic,strong) UIView * backView;
|
||||||
|
///名字
|
||||||
|
@property (nonatomic,strong) UILabel *nameLabel;
|
||||||
|
///sex
|
||||||
|
@property (nonatomic,strong) UIImageView *sexImageView;
|
||||||
|
///id
|
||||||
|
@property (nonatomic,strong) UILabel *idLabel;
|
||||||
|
///签名
|
||||||
|
@property (nonatomic,strong) UILabel *signLabel;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoTableViewCell
|
||||||
|
|
||||||
|
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||||
|
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||||
|
[self.contentView addSubview:self.backView];
|
||||||
|
|
||||||
|
[self.backView addSubview:self.nameLabel];
|
||||||
|
[self.backView addSubview:self.sexImageView];
|
||||||
|
[self.backView addSubview:self.idLabel];
|
||||||
|
[self.backView addSubview:self.signLabel];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.right.mas_equalTo(self.contentView).inset(15);
|
||||||
|
make.top.bottom.mas_equalTo(self.contentView);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(self.backView).offset(15);
|
||||||
|
make.top.mas_equalTo(self.backView).offset(15);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(self.nameLabel.mas_right).offset(5);
|
||||||
|
make.centerY.mas_equalTo(self.nameLabel);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(self.nameLabel);
|
||||||
|
make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(10);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.signLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.mas_equalTo(self.nameLabel);
|
||||||
|
make.top.mas_equalTo(self.idLabel.mas_bottom).offset(18);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
|
- (void)setUserInfo:(UserInfoModel *)userInfo {
|
||||||
|
_userInfo = userInfo;
|
||||||
|
if (_userInfo) {
|
||||||
|
self.nameLabel.text = _userInfo.nick;
|
||||||
|
self.idLabel.text = [NSString stringWithFormat:@"%@号:%ld",AppName, (long)_userInfo.erbanNo];
|
||||||
|
self.signLabel.text = _userInfo.userDesc.length > 0 ? _userInfo.userDesc : @"我是个默认签名";
|
||||||
|
NSString * sexStr;
|
||||||
|
if (_userInfo.gender == GenderType_Male) {
|
||||||
|
sexStr = @"common_male";
|
||||||
|
} else {
|
||||||
|
sexStr = @"common_female";
|
||||||
|
}
|
||||||
|
self.sexImageView.image = [UIImage imageNamed:sexStr];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIView *)backView {
|
||||||
|
if (!_backView) {
|
||||||
|
_backView = [[UIView alloc] init];
|
||||||
|
_backView.backgroundColor = [ThemeColor appCellBackgroundColor];
|
||||||
|
_backView.layer.masksToBounds = YES;
|
||||||
|
_backView.layer.cornerRadius = 12;
|
||||||
|
}
|
||||||
|
return _backView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)nameLabel {
|
||||||
|
if (!_nameLabel) {
|
||||||
|
_nameLabel = [[UILabel alloc] init];
|
||||||
|
_nameLabel.font = [UIFont fontWithName:@"PingFang-SC-Medium" size:15];
|
||||||
|
_nameLabel.textColor = [ThemeColor mainTextColor];
|
||||||
|
}
|
||||||
|
return _nameLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImageView *)sexImageView {
|
||||||
|
if (!_sexImageView) {
|
||||||
|
_sexImageView = [[UIImageView alloc] init];
|
||||||
|
_sexImageView.userInteractionEnabled = YES;
|
||||||
|
}
|
||||||
|
return _sexImageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)idLabel {
|
||||||
|
if (!_idLabel) {
|
||||||
|
_idLabel = [[UILabel alloc] init];
|
||||||
|
_idLabel.font = [UIFont systemFontOfSize:11];
|
||||||
|
_idLabel.textColor = [ThemeColor textThirdColor];
|
||||||
|
}
|
||||||
|
return _idLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)signLabel {
|
||||||
|
if (!_signLabel) {
|
||||||
|
_signLabel = [[UILabel alloc] init];
|
||||||
|
_signLabel.font = [UIFont systemFontOfSize:11];;
|
||||||
|
_signLabel.textColor = [ThemeColor secondTextColor];
|
||||||
|
}
|
||||||
|
return _signLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoDesViewController.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BaseViewController.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class UserInfoModel, XPMineUserInfoDesViewController;
|
||||||
|
@protocol XPMineUserInfoDesViewControllerDelegate <NSObject>
|
||||||
|
|
||||||
|
////更新用户介绍
|
||||||
|
- (void)xPMineUserInfoDesViewController:(XPMineUserInfoDesViewController *)viewController updateUserDes:(NSString *)userDes;
|
||||||
|
|
||||||
|
@end
|
||||||
|
@interface XPMineUserInfoDesViewController : BaseViewController
|
||||||
|
///用户信息
|
||||||
|
@property (nonatomic,strong) UserInfoModel *userInfo;
|
||||||
|
///代理
|
||||||
|
@property (nonatomic,weak) id<XPMineUserInfoDesViewControllerDelegate> delegate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,170 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoDesViewController.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoDesViewController.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
#import <SZTextView/SZTextView.h>
|
||||||
|
#import <ReactiveObjC/ReactiveObjC.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
///Model
|
||||||
|
#import "UserInfoModel.h"
|
||||||
|
|
||||||
|
static NSInteger maxCount = 60;
|
||||||
|
|
||||||
|
@interface XPMineUserInfoDesViewController ()<UITextViewDelegate>
|
||||||
|
///容器
|
||||||
|
@property (nonatomic, strong) UIView *containView;
|
||||||
|
///输入框
|
||||||
|
@property (nonatomic, strong) SZTextView *useDescTextView;
|
||||||
|
///清除按钮
|
||||||
|
@property (nonatomic, strong) UIButton *clearBtn;
|
||||||
|
///完成按钮
|
||||||
|
@property (nonatomic, strong) UIButton *completionBtn;
|
||||||
|
///显示输入的个数
|
||||||
|
@property (nonatomic, strong) UILabel *limitLabel;//
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoDesViewController
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
[super viewDidLoad];
|
||||||
|
self.title = @"修改个人介绍";
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
[self initEvents];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
|
||||||
|
[self.view endEditing:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
UIBarButtonItem *completeItem = [[UIBarButtonItem alloc] initWithCustomView:self.completionBtn];
|
||||||
|
self.navigationItem.rightBarButtonItem = completeItem;
|
||||||
|
[self.view addSubview:self.containView];
|
||||||
|
[self.containView addSubview:self.useDescTextView];
|
||||||
|
[self.containView addSubview:self.clearBtn];
|
||||||
|
[self.view addSubview:self.limitLabel];
|
||||||
|
self.useDescTextView.text = self.userInfo.userDesc;
|
||||||
|
self.limitLabel.text = [NSString stringWithFormat:@"%ld",(maxCount - self.userInfo.userDesc.length)];
|
||||||
|
self.limitLabel.textColor = self.userInfo.userDesc.length > 0 ? [ThemeColor mainTextColor] : [ThemeColor secondTextColor];
|
||||||
|
self.completionBtn.enabled = self.useDescTextView.text.length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.containView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.mas_equalTo(20);
|
||||||
|
make.left.mas_equalTo(self.view).offset(15);
|
||||||
|
make.right.mas_equalTo(self.view).offset(-15);
|
||||||
|
make.height.mas_equalTo(137);
|
||||||
|
}];
|
||||||
|
[self.useDescTextView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.top.mas_equalTo(self.containView).offset(10);
|
||||||
|
make.bottom.mas_equalTo(self.containView).offset(-10);
|
||||||
|
make.right.mas_equalTo(self.clearBtn.mas_left).offset(-5);
|
||||||
|
}];
|
||||||
|
[self.clearBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.mas_equalTo(self.containView).offset(10);
|
||||||
|
make.right.mas_equalTo(self.containView).offset(-10);
|
||||||
|
}];
|
||||||
|
[self.limitLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.mas_equalTo(self.containView.mas_bottom).offset(5);
|
||||||
|
make.right.mas_equalTo(self.containView);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initEvents {
|
||||||
|
@weakify(self);
|
||||||
|
RAC(self.completionBtn, enabled) = [RACSignal combineLatest:@[self.useDescTextView.rac_textSignal] reduce:^id _Nonnull(NSString *text){
|
||||||
|
@strongify(self);
|
||||||
|
self.limitLabel.text = [NSString stringWithFormat:@"%ld",(maxCount - text.length)];
|
||||||
|
if (text.length > maxCount) {
|
||||||
|
[self showErrorToast:[NSString stringWithFormat:@"最多输入%ld个介绍", maxCount]];
|
||||||
|
}
|
||||||
|
return @(text.length > 0 && text.length <= maxCount);
|
||||||
|
}];
|
||||||
|
|
||||||
|
|
||||||
|
[[self.completionBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
|
||||||
|
@strongify(self);
|
||||||
|
[self.navigationController popViewControllerAnimated:YES];
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoDesViewController:updateUserDes:)]) {
|
||||||
|
[self.delegate xPMineUserInfoDesViewController:self updateUserDes:self.useDescTextView.text];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
[[self.clearBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
|
||||||
|
@strongify(self);
|
||||||
|
self.useDescTextView.text = @"";
|
||||||
|
self.completionBtn.enabled = NO;
|
||||||
|
self.limitLabel.text = [NSString stringWithFormat:@"%ld",(maxCount - self.useDescTextView.text.length)];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - getter && setter
|
||||||
|
|
||||||
|
- (UIView *)containView {
|
||||||
|
if (!_containView) {
|
||||||
|
_containView = [[UIView alloc] init];
|
||||||
|
_containView.layer.cornerRadius = 5;
|
||||||
|
_containView.backgroundColor = [ThemeColor appCellBackgroundColor];
|
||||||
|
}
|
||||||
|
return _containView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (SZTextView *)useDescTextView {
|
||||||
|
if (!_useDescTextView) {
|
||||||
|
_useDescTextView = [[SZTextView alloc] init];
|
||||||
|
_useDescTextView.delegate = self;
|
||||||
|
_useDescTextView.placeholder = @"填写自我介绍,可以让别人更了解你哦~";
|
||||||
|
_useDescTextView.placeholderTextColor = [ThemeColor secondTextColor];
|
||||||
|
_useDescTextView.font = [UIFont systemFontOfSize:14];
|
||||||
|
_useDescTextView.textColor = [ThemeColor mainTextColor];
|
||||||
|
_useDescTextView.backgroundColor = [ThemeColor appCellBackgroundColor];
|
||||||
|
}
|
||||||
|
return _useDescTextView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIButton *)completionBtn {
|
||||||
|
if (!_completionBtn) {
|
||||||
|
_completionBtn = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[_completionBtn setTitle:@"完成" forState:UIControlStateNormal];
|
||||||
|
[_completionBtn setFrame:CGRectMake(0, 0, 50, 30)];
|
||||||
|
[_completionBtn setTitleColor:[ThemeColor mainTextColor] forState:UIControlStateNormal];
|
||||||
|
[_completionBtn setTitleColor:[ThemeColor disableButtonTextColor] forState:UIControlStateDisabled];
|
||||||
|
[_completionBtn.titleLabel setFont:[UIFont systemFontOfSize:13]];
|
||||||
|
}
|
||||||
|
return _completionBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)limitLabel {
|
||||||
|
if (!_limitLabel) {
|
||||||
|
_limitLabel = [[UILabel alloc] init];
|
||||||
|
_limitLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
_limitLabel.textColor = [ThemeColor secondTextColor];
|
||||||
|
_limitLabel.text = @"60";
|
||||||
|
}
|
||||||
|
return _limitLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIButton *)clearBtn {
|
||||||
|
if (!_clearBtn) {
|
||||||
|
_clearBtn = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[_clearBtn setImage:[UIImage imageNamed:@"mine_user_info_edit_clear"] forState:UIControlStateNormal];
|
||||||
|
}
|
||||||
|
return _clearBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditViewController.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MvpViewController.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class UserInfoModel;
|
||||||
|
@interface XPMineUserInfoEditViewController : MvpViewController
|
||||||
|
///
|
||||||
|
@property (nonatomic,strong) UserInfoModel *userInfo;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,156 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoEditViewController.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoEditViewController.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
///Model
|
||||||
|
#import "XPMineUserInfoEditModel.h"
|
||||||
|
#import "UserInfoModel.h"
|
||||||
|
///View
|
||||||
|
#import "XPMineUserInfoEditTableViewCell.h"
|
||||||
|
///P
|
||||||
|
#import "XPMineUserInfoEditProtocol.h"
|
||||||
|
#import "XPMineUserInfoEditPresenter.h"
|
||||||
|
///VC
|
||||||
|
#import "XPMineUserInfoNickViewController.h"
|
||||||
|
#import "XPMineUserInfoDesViewController.h"
|
||||||
|
|
||||||
|
@interface XPMineUserInfoEditViewController ()<UITableViewDelegate, UITableViewDataSource, XPMineUserInfoEditProtocol, XPMineUserInfoDesViewControllerDelegate, XPMineUserInfoNickViewControllerDelegate>
|
||||||
|
///列表
|
||||||
|
@property (nonatomic,strong) UITableView *tableView;
|
||||||
|
///数据源
|
||||||
|
@property (nonatomic,strong) NSArray *datasouce;;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoEditViewController
|
||||||
|
|
||||||
|
- (XPMineUserInfoEditPresenter *)createPresenter {
|
||||||
|
return [[XPMineUserInfoEditPresenter alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
[super viewDidLoad];
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
}
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
self.title = @"编辑个人资料";
|
||||||
|
[self.view addSubview:self.tableView];
|
||||||
|
[self.presenter getUserInfoEditDataSourceWithUserInfo:self.userInfo];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.edges.mas_equalTo(self.view);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UITableViewDelegate And UITableViewDataSource
|
||||||
|
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||||
|
return self.datasouce.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
XPMineUserInfoEditModel * model = [self.datasouce objectAtIndex:indexPath.row];
|
||||||
|
if (model.type == XPMineUserInfoEditType_Avatar) {
|
||||||
|
return 60;
|
||||||
|
} else {
|
||||||
|
return 50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
XPMineUserInfoEditTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])];
|
||||||
|
if (cell == nil) {
|
||||||
|
cell = [[XPMineUserInfoEditTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])];
|
||||||
|
}
|
||||||
|
XPMineUserInfoEditModel * model = [self.datasouce objectAtIndex:indexPath.row];
|
||||||
|
cell.itmeModel = model;
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||||
|
XPMineUserInfoEditModel * model = [self.datasouce objectAtIndex:indexPath.row];
|
||||||
|
switch (model.type) {
|
||||||
|
case XPMineUserInfoEditType_Nick:
|
||||||
|
{
|
||||||
|
XPMineUserInfoNickViewController * nickVC = [[XPMineUserInfoNickViewController alloc] init];
|
||||||
|
nickVC.userInfo = self.userInfo;
|
||||||
|
nickVC.delegate = self;
|
||||||
|
[self.navigationController pushViewController:nickVC animated:YES];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_Avatar:
|
||||||
|
{
|
||||||
|
#warning to do 选择头像
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_Birth:
|
||||||
|
{
|
||||||
|
#warning to do 选择日期
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_UseDes:
|
||||||
|
{
|
||||||
|
XPMineUserInfoDesViewController * desVC = [[XPMineUserInfoDesViewController alloc] init];
|
||||||
|
desVC.userInfo = self.userInfo;
|
||||||
|
desVC.delegate = self;
|
||||||
|
[self.navigationController pushViewController:desVC animated:YES];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XPMineUserInfoEditType_Photo:
|
||||||
|
{
|
||||||
|
#warning to do 选择相册
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - XPMineUserInfoNickViewControllerDelegate
|
||||||
|
- (void)xPMineUserInfoNickViewController:(XPMineUserInfoNickViewController *)viewController updateNick:(NSString *)nick {
|
||||||
|
|
||||||
|
}
|
||||||
|
#pragma mark - XPMineUserInfoDesViewControllerDelegate
|
||||||
|
- (void)xPMineUserInfoDesViewController:(XPMineUserInfoDesViewController *)viewController updateUserDes:(NSString *)userDes {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - XPMineUserInfoEditProtocol
|
||||||
|
- (void)getUserInfoEditDataSourceSuccess:(NSArray *)array {
|
||||||
|
self.datasouce = array;
|
||||||
|
[self.tableView reloadData];
|
||||||
|
}
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
|
- (UITableView *)tableView {
|
||||||
|
if (!_tableView) {
|
||||||
|
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
|
||||||
|
_tableView.delegate = self;
|
||||||
|
_tableView.dataSource = self;
|
||||||
|
_tableView.tableFooterView = [UIView new];
|
||||||
|
_tableView.tableHeaderView = [UIView new];
|
||||||
|
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||||
|
_tableView.backgroundColor = [UIColor clearColor];
|
||||||
|
if (@available(iOS 11.0, *)) {
|
||||||
|
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||||
|
}
|
||||||
|
[_tableView registerClass:[XPMineUserInfoEditTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])];
|
||||||
|
}
|
||||||
|
return _tableView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -0,0 +1,24 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoNickViewController.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BaseViewController.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class UserInfoModel, XPMineUserInfoNickViewController;
|
||||||
|
@protocol XPMineUserInfoNickViewControllerDelegate <NSObject>
|
||||||
|
///更新用户名
|
||||||
|
- (void)xPMineUserInfoNickViewController:(XPMineUserInfoNickViewController *)viewController updateNick:(NSString *)nick;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface XPMineUserInfoNickViewController : BaseViewController
|
||||||
|
///用户信息
|
||||||
|
@property (nonatomic,strong) UserInfoModel *userInfo;
|
||||||
|
///代理
|
||||||
|
@property (nonatomic,weak) id<XPMineUserInfoNickViewControllerDelegate> delegate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,168 @@
|
|||||||
|
//
|
||||||
|
// XPMineUserInfoNickViewController.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoNickViewController.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
#import <ReactiveObjC/ReactiveObjC.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
#import "UIImage+Utils.h"
|
||||||
|
///Tool
|
||||||
|
#import "UserInfoModel.h"
|
||||||
|
|
||||||
|
static NSInteger maxCount = 15;
|
||||||
|
|
||||||
|
@interface XPMineUserInfoNickViewController ()
|
||||||
|
@property (nonatomic, strong) UIView *containView;//
|
||||||
|
@property (nonatomic, strong) UITextField *nickTextField;//
|
||||||
|
@property (nonatomic, strong) UIButton *completionBtn;//
|
||||||
|
@property (nonatomic, strong) UILabel *limitLabel;//
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoNickViewController
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
[super viewDidLoad];
|
||||||
|
[self setEvents];
|
||||||
|
[self setUpUI];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -UI
|
||||||
|
- (void)setUpUI {
|
||||||
|
self.title = @"修改昵称";
|
||||||
|
UIBarButtonItem *completeItem = [[UIBarButtonItem alloc] initWithCustomView:self.completionBtn];
|
||||||
|
self.navigationItem.rightBarButtonItem = completeItem;
|
||||||
|
[self.view addSubview:self.containView];
|
||||||
|
[self.containView addSubview:self.nickTextField];
|
||||||
|
[self.view addSubview:self.limitLabel];
|
||||||
|
self.nickTextField.text = self.userInfo.nick;
|
||||||
|
self.limitLabel.text = [NSString stringWithFormat:@"%ld", (long)(maxCount - self.userInfo.nick.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.containView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.mas_equalTo(20);
|
||||||
|
make.left.mas_equalTo(self.view).offset(15);
|
||||||
|
make.right.mas_equalTo(self.view).offset(-15);
|
||||||
|
make.height.mas_equalTo(35);
|
||||||
|
}];
|
||||||
|
[self.nickTextField mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.mas_equalTo(self.containView);
|
||||||
|
make.left.mas_equalTo(self.containView).offset(5);
|
||||||
|
make.right.mas_equalTo(self.containView);
|
||||||
|
make.height.mas_equalTo(35);
|
||||||
|
}];
|
||||||
|
[self.limitLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.mas_equalTo(self.nickTextField.mas_bottom).offset(8);
|
||||||
|
make.right.mas_equalTo(self.nickTextField);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -交互事件
|
||||||
|
- (void)setEvents {
|
||||||
|
@weakify(self)
|
||||||
|
[self.nickTextField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
|
||||||
|
@strongify(self);
|
||||||
|
[self nickTextRuleFilter:x];
|
||||||
|
self.limitLabel.text = [NSString stringWithFormat:@"%ld", (long)(maxCount - self.nickTextField.text.length)];
|
||||||
|
}];
|
||||||
|
RAC(self.completionBtn, enabled) = [RACSignal combineLatest:@[self.nickTextField.rac_textSignal] reduce:^id _Nonnull(NSString *text){
|
||||||
|
return @(text.length > 0 && text.length <= maxCount);
|
||||||
|
}];
|
||||||
|
|
||||||
|
// 完成
|
||||||
|
[[self.completionBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
|
||||||
|
@strongify(self);
|
||||||
|
[self.navigationController popViewControllerAnimated:YES];
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoNickViewController:updateNick:)]) {
|
||||||
|
[self.delegate xPMineUserInfoNickViewController:self updateNick:self.nickTextField.text];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 昵称规则过滤
|
||||||
|
- (void)nickTextRuleFilter:(NSString *)nickTitle{
|
||||||
|
NSString *toBeString = nickTitle;
|
||||||
|
NSString *lang = [self.nickTextField.textInputMode primaryLanguage];
|
||||||
|
if ([lang isEqualToString:@"zh-Hans"]){// 简体中文输入
|
||||||
|
//获取高亮部分
|
||||||
|
UITextRange *selectedRange = [self.nickTextField markedTextRange];
|
||||||
|
UITextPosition *position = [self.nickTextField positionFromPosition:selectedRange.start offset:0];
|
||||||
|
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
|
||||||
|
if (!position){
|
||||||
|
if (toBeString.length > 15){
|
||||||
|
[self showErrorToast:@"输入字数已达上限"];
|
||||||
|
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:15];
|
||||||
|
if (rangeIndex.length == 1){
|
||||||
|
self.nickTextField.text = [toBeString substringToIndex:15];
|
||||||
|
}else{
|
||||||
|
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, 15)];
|
||||||
|
self.nickTextField.text = [toBeString substringWithRange:rangeRange];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{ // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
|
||||||
|
if (toBeString.length > 15){
|
||||||
|
[self showErrorToast:@"输入字数已达上限"];
|
||||||
|
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:15];
|
||||||
|
if (rangeIndex.length == 1){
|
||||||
|
self.nickTextField.text = [toBeString substringToIndex:15];
|
||||||
|
}else{
|
||||||
|
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, 15)];
|
||||||
|
self.nickTextField.text = [toBeString substringWithRange:rangeRange];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - getter && setter
|
||||||
|
|
||||||
|
- (UIView *)containView {
|
||||||
|
if (!_containView) {
|
||||||
|
_containView = [[UIView alloc] init];
|
||||||
|
_containView.layer.cornerRadius = 5;
|
||||||
|
_containView.backgroundColor = [ThemeColor appCellBackgroundColor];
|
||||||
|
}
|
||||||
|
return _containView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITextField *)nickTextField {
|
||||||
|
if (!_nickTextField) {
|
||||||
|
_nickTextField = [[UITextField alloc] init];
|
||||||
|
_nickTextField.clearButtonMode = UITextFieldViewModeAlways;
|
||||||
|
_nickTextField.font = [UIFont systemFontOfSize:14];
|
||||||
|
_nickTextField.textColor = [ThemeColor mainTextColor];
|
||||||
|
_nickTextField.layer.cornerRadius = 5;
|
||||||
|
}
|
||||||
|
return _nickTextField;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIButton *)completionBtn {
|
||||||
|
if (!_completionBtn) {
|
||||||
|
_completionBtn = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
[_completionBtn setFrame:CGRectMake(0, 0, 50, 30)];
|
||||||
|
[_completionBtn setTitle:@"完成" forState:UIControlStateNormal];
|
||||||
|
[_completionBtn setTitleColor:[ThemeColor mainTextColor] forState:UIControlStateNormal];
|
||||||
|
[_completionBtn setTitleColor:[ThemeColor disableButtonTextColor] forState:UIControlStateDisabled];
|
||||||
|
_completionBtn.titleLabel.font = [UIFont systemFontOfSize:13];
|
||||||
|
}
|
||||||
|
return _completionBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)limitLabel {
|
||||||
|
if (!_limitLabel) {
|
||||||
|
_limitLabel = [[UILabel alloc] init];
|
||||||
|
_limitLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
_limitLabel.textColor = [ThemeColor secondTextColor];
|
||||||
|
_limitLabel.text = @"0/15";
|
||||||
|
}
|
||||||
|
return _limitLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// MineInfoViewController.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MvpViewController.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface XPMineUserInfoViewController : MvpViewController
|
||||||
|
///用户的id
|
||||||
|
@property (nonatomic,assign) long long uid;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
166
xplan-ios/Main/Mine/View/MineInfo/XPMineUserInfoViewController.m
Normal file
166
xplan-ios/Main/Mine/View/MineInfo/XPMineUserInfoViewController.m
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
//
|
||||||
|
// MineInfoViewController.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoViewController.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
#import "XPMacro.h"
|
||||||
|
///View
|
||||||
|
#import "XPMineUserInfoTableViewCell.h"
|
||||||
|
#import "XPMineUserInfoHeaderView.h"
|
||||||
|
#import "XPMineUserInfoCustomNavView.h"
|
||||||
|
///P
|
||||||
|
#import "XPMineUserInfoPresenter.h"
|
||||||
|
#import "XPMineUserInfoProtocol.h"
|
||||||
|
///VC
|
||||||
|
#import "XPMineUserInfoEditViewController.h"
|
||||||
|
|
||||||
|
@interface XPMineUserInfoViewController ()<UITableViewDelegate, UITableViewDataSource, XPMineCustomNavViewDelegate, XPMineUserInfoProtocol>
|
||||||
|
///列别
|
||||||
|
@property (nonatomic,strong) UITableView *tableView;
|
||||||
|
///头部视图
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoHeaderView *headView;
|
||||||
|
///table的顶部视图
|
||||||
|
@property (nonatomic,strong) UIView * tableViewHeadView;
|
||||||
|
///自定义的导航栏
|
||||||
|
@property (nonatomic,strong) XPMineUserInfoCustomNavView *navView;
|
||||||
|
///用户信息
|
||||||
|
@property (nonatomic,strong) UserInfoModel *userInfo;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoViewController
|
||||||
|
|
||||||
|
- (XPMineUserInfoPresenter *)createPresenter {
|
||||||
|
return [[XPMineUserInfoPresenter alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isHiddenNavBar {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
[super viewDidLoad];
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
|
||||||
|
}
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
[self.view addSubview:self.headView];
|
||||||
|
[self.view addSubview:self.tableView];
|
||||||
|
[self.view addSubview:self.navView];
|
||||||
|
self.tableView.tableHeaderView = self.tableViewHeadView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.right.top.mas_equalTo(self.view);
|
||||||
|
make.height.mas_equalTo(250 + kSafeAreaTopHeight);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.edges.mas_equalTo(self.view);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.left.right.top.mas_equalTo(self.view);
|
||||||
|
make.height.mas_equalTo(kNavigationHeight);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UITableViewDelegate And UITableViewDataSource
|
||||||
|
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
XPMineUserInfoTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineUserInfoTableViewCell class])];
|
||||||
|
if (cell == nil) {
|
||||||
|
cell = [[XPMineUserInfoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineUserInfoTableViewCell class])];
|
||||||
|
}
|
||||||
|
cell.userInfo = self.userInfo;
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - XPMineCustomNavViewDelegate
|
||||||
|
- (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickEditButton:(UIButton *)sender {
|
||||||
|
XPMineUserInfoEditViewController * editVC = [[XPMineUserInfoEditViewController alloc] init];
|
||||||
|
editVC.userInfo = self.userInfo;
|
||||||
|
[self.navigationController pushViewController:editVC animated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickBackButton:(UIButton *)sender {
|
||||||
|
[self.navigationController popViewControllerAnimated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - XPMineUserInfoProtocol
|
||||||
|
- (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo {
|
||||||
|
self.userInfo = userInfo;
|
||||||
|
self.headView.userInfo = userInfo;
|
||||||
|
[self.tableView reloadData];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
|
- (void)setUid:(long long)uid {
|
||||||
|
_uid = uid;
|
||||||
|
if (_uid > 0) {
|
||||||
|
NSString * uidStr = [NSString stringWithFormat:@"%lld", uid];
|
||||||
|
[self.presenter getUserInfoWithUid:uidStr];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableView *)tableView {
|
||||||
|
if (!_tableView) {
|
||||||
|
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
|
||||||
|
_tableView.delegate = self;
|
||||||
|
_tableView.dataSource = self;
|
||||||
|
_tableView.tableFooterView = [UIView new];
|
||||||
|
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||||
|
_tableView.backgroundColor = [UIColor clearColor];
|
||||||
|
if (@available(iOS 11.0, *)) {
|
||||||
|
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||||
|
}
|
||||||
|
[_tableView registerClass:[XPMineUserInfoTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineUserInfoTableViewCell class])];
|
||||||
|
}
|
||||||
|
return _tableView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (XPMineUserInfoHeaderView *)headView {
|
||||||
|
if (!_headView) {
|
||||||
|
_headView = [[XPMineUserInfoHeaderView alloc] init];
|
||||||
|
}
|
||||||
|
return _headView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIView *)tableViewHeadView {
|
||||||
|
if (!_tableViewHeadView) {
|
||||||
|
_tableViewHeadView = [[UIView alloc] init];
|
||||||
|
_tableViewHeadView.frame = CGRectMake(0, 0, KScreenWidth, 179 + kSafeAreaTopHeight);
|
||||||
|
_tableViewHeadView.backgroundColor = [UIColor clearColor];
|
||||||
|
}
|
||||||
|
return _tableViewHeadView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (XPMineUserInfoCustomNavView *)navView {
|
||||||
|
if (!_navView) {
|
||||||
|
_navView = [[XPMineUserInfoCustomNavView alloc] init];
|
||||||
|
_navView.delegate = self;
|
||||||
|
}
|
||||||
|
return _navView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// XPMineHeaderView.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@class UserInfoModel;
|
||||||
|
@interface XPMineUserInfoHeaderView : UIView
|
||||||
|
///
|
||||||
|
@property (nonatomic,strong) UserInfoModel *userInfo;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,167 @@
|
|||||||
|
//
|
||||||
|
// XPMineHeaderView.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by 冯硕 on 2021/9/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XPMineUserInfoHeaderView.h"
|
||||||
|
///Third
|
||||||
|
#import <Masonry/Masonry.h>
|
||||||
|
#import <SDCycleScrollView/SDCycleScrollView.h>
|
||||||
|
#import "SDPhotoBrowser.h"
|
||||||
|
#import <ReactiveObjC/ReactiveObjC.h>
|
||||||
|
///Tool
|
||||||
|
#import "ThemeColor.h"
|
||||||
|
#import "XPMacro.h"
|
||||||
|
#import "UIImageConstant.h"
|
||||||
|
///Model
|
||||||
|
#import "UserInfoModel.h"
|
||||||
|
|
||||||
|
@interface XPMineUserInfoHeaderView ()<SDCycleScrollViewDelegate, SDPhotoBrowserDelegate>
|
||||||
|
///覆盖的
|
||||||
|
@property (nonatomic,strong) UIView * coverView;
|
||||||
|
///轮播图
|
||||||
|
@property (nonatomic,strong) SDCycleScrollView *cycleScrollView;
|
||||||
|
///高斯模糊
|
||||||
|
@property (nonatomic,strong) UIVisualEffectView *effectView;
|
||||||
|
///显示当前的页数
|
||||||
|
@property (nonatomic,strong) UILabel *pageLabel;
|
||||||
|
///图片数组
|
||||||
|
@property (nonatomic,strong) NSArray *imageUrls;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation XPMineUserInfoHeaderView
|
||||||
|
|
||||||
|
- (instancetype)initWithFrame:(CGRect)frame {
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
[self initSubViews];
|
||||||
|
[self initSubViewConstraints];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
#pragma mark - Private Method
|
||||||
|
- (void)initSubViews {
|
||||||
|
[self addSubview:self.cycleScrollView];
|
||||||
|
[self addSubview:self.effectView];
|
||||||
|
[self addSubview:self.coverView];
|
||||||
|
[self addSubview:self.pageLabel];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initSubViewConstraints {
|
||||||
|
[self.cycleScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.edges.mas_equalTo(self);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.effectView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.edges.mas_equalTo(self);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.coverView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.edges.mas_equalTo(self.cycleScrollView);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.pageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.right.mas_equalTo(-15);
|
||||||
|
make.width.mas_equalTo(35);
|
||||||
|
make.height.mas_equalTo(16);
|
||||||
|
make.top.mas_equalTo(self).offset(148 + kSafeAreaTopHeight);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
#pragma mark - SDPhotoBrowserDelegate
|
||||||
|
- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index {
|
||||||
|
NSString * photoUrl = [self.imageUrls objectAtIndex:index];
|
||||||
|
return [NSURL URLWithString:photoUrl];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
|
||||||
|
return [UIImage imageNamed:[UIImageConstant defalutBannerPlaceholder]];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - SDCycleScrollViewDelegate
|
||||||
|
-(void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index {
|
||||||
|
self.pageLabel.text = [NSString stringWithFormat:@"%ld/%lu",(index + 1), (unsigned long)self.imageUrls.count];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 轮播图点击
|
||||||
|
- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index {
|
||||||
|
NSInteger count = self.imageUrls.count;
|
||||||
|
SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init];
|
||||||
|
browser.sourceImagesContainerView = self.cycleScrollView;
|
||||||
|
browser.delegate = self;
|
||||||
|
browser.imageCount = count;
|
||||||
|
browser.currentImageIndex = index;
|
||||||
|
browser.isMe = NO;
|
||||||
|
[browser show];
|
||||||
|
}
|
||||||
|
#pragma mark - Getters And Setters
|
||||||
|
- (void)setUserInfo:(UserInfoModel *)userInfo {
|
||||||
|
_userInfo = userInfo;
|
||||||
|
// 轮播图
|
||||||
|
NSMutableArray * imageUrls;
|
||||||
|
if (self.userInfo.privatePhoto.count > 0) {
|
||||||
|
imageUrls = [[[self.userInfo.privatePhoto.rac_sequence map:^id _Nullable(UserPhoto * _Nullable value) {
|
||||||
|
return value.photoUrl;
|
||||||
|
}] array] mutableCopy] ;
|
||||||
|
}
|
||||||
|
if (self.userInfo.avatar.length > 0) {
|
||||||
|
if (imageUrls.count >0) {
|
||||||
|
[imageUrls addObject:self.userInfo.avatar];
|
||||||
|
} else {
|
||||||
|
imageUrls = [NSMutableArray array];
|
||||||
|
[imageUrls addObject:self.userInfo.avatar];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (imageUrls.count > 0) {
|
||||||
|
self.imageUrls = imageUrls;
|
||||||
|
self.cycleScrollView.imageURLStringsGroup = imageUrls;
|
||||||
|
self.pageLabel.text = [NSString stringWithFormat:@"1/%lu",(unsigned long)imageUrls.count];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (UIView *)coverView {
|
||||||
|
if (!_coverView) {
|
||||||
|
_coverView = [[UIView alloc] init];
|
||||||
|
_coverView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
|
||||||
|
_coverView.alpha = 0.5;
|
||||||
|
}
|
||||||
|
return _coverView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (SDCycleScrollView *)cycleScrollView {
|
||||||
|
if (!_cycleScrollView) {
|
||||||
|
_cycleScrollView = [[SDCycleScrollView alloc] init];
|
||||||
|
_cycleScrollView.backgroundColor = [UIColor clearColor];
|
||||||
|
_cycleScrollView.delegate = self;
|
||||||
|
_cycleScrollView.bannerImageViewContentMode = UIViewContentModeScaleAspectFill;
|
||||||
|
_cycleScrollView.pageControlStyle = SDCycleScrollViewPageContolStyleNone;;
|
||||||
|
_cycleScrollView.autoScroll = NO;
|
||||||
|
}
|
||||||
|
return _cycleScrollView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIVisualEffectView *)effectView {
|
||||||
|
if (!_effectView) {
|
||||||
|
UIBlurEffect *beffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
|
||||||
|
UIVisualEffectView *view = [[UIVisualEffectView alloc]initWithEffect:beffect];
|
||||||
|
_effectView = view;
|
||||||
|
}
|
||||||
|
return _effectView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UILabel *)pageLabel {
|
||||||
|
if (!_pageLabel) {
|
||||||
|
_pageLabel = [[UILabel alloc] init];
|
||||||
|
_pageLabel.font = [UIFont systemFontOfSize:10];
|
||||||
|
_pageLabel.textColor = [ThemeColor textThirdColor];
|
||||||
|
_pageLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
_pageLabel.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
|
||||||
|
_pageLabel.alpha = 0.2;
|
||||||
|
_pageLabel.layer.masksToBounds = YES;
|
||||||
|
_pageLabel.layer.cornerRadius = 8;
|
||||||
|
}
|
||||||
|
return _pageLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -15,6 +15,7 @@
|
|||||||
#import "UIButton+EnlargeTouchArea.h"
|
#import "UIButton+EnlargeTouchArea.h"
|
||||||
///Model
|
///Model
|
||||||
#import "XPMineItemModel.h"
|
#import "XPMineItemModel.h"
|
||||||
|
#import "UserInfoModel.h"
|
||||||
///P
|
///P
|
||||||
#import "XPMineProtocol.h"
|
#import "XPMineProtocol.h"
|
||||||
#import "XPMinePresent.h"
|
#import "XPMinePresent.h"
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
///VC
|
///VC
|
||||||
#import "XPMineSettingViewController.h"
|
#import "XPMineSettingViewController.h"
|
||||||
#import "XPMineTeenagerViewController.h"
|
#import "XPMineTeenagerViewController.h"
|
||||||
|
#import "XPMineUserInfoViewController.h"
|
||||||
#import "XPWebViewController.h"
|
#import "XPWebViewController.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -128,7 +130,11 @@
|
|||||||
[self pushWebViewWIthUrl:URLWithType(kUserInviteFriendURL)];
|
[self pushWebViewWIthUrl:URLWithType(kUserInviteFriendURL)];
|
||||||
break;
|
break;
|
||||||
case XPMineItemType_Personinfo:
|
case XPMineItemType_Personinfo:
|
||||||
#warning to do 个人中心
|
{
|
||||||
|
XPMineUserInfoViewController * infoVC = [[XPMineUserInfoViewController alloc] init];
|
||||||
|
infoVC.uid = self.userInfo.uid;
|
||||||
|
[self.navigationController pushViewController:infoVC animated:YES];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Reference in New Issue
Block a user