个人资料页 编辑个人资料页

This commit is contained in:
fengshuo
2021-09-23 18:38:33 +08:00
committed by zu
parent d4a368aa20
commit 7372b8b776
45 changed files with 2865 additions and 2 deletions

View File

@@ -20,6 +20,8 @@ target 'xplan-ios' do
pod 'SDWebImage'
#输入
pod 'SZTextView'
#轮播图
pod 'SDCycleScrollView'
#登录的
pod 'mob_sharesdk'
pod 'mob_sharesdk/ShareSDKPlatforms/QQ'

View File

@@ -35,6 +35,8 @@ PODS:
- MOBFoundation (3.2.27)
- NTESQuickPass (2.1.9)
- ReactiveObjC (3.1.1)
- SDCycleScrollView (1.82):
- SDWebImage (>= 5.0.0)
- SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1)
- SDWebImage/Core (5.11.1)
@@ -53,6 +55,7 @@ DEPENDENCIES:
- mob_sharesdk/ShareSDKPlatforms/WeChat
- NTESQuickPass (~> 2.1.6)
- ReactiveObjC
- SDCycleScrollView
- SDWebImage
- SZTextView
- YYText
@@ -68,6 +71,7 @@ SPEC REPOS:
- MOBFoundation
- NTESQuickPass
- ReactiveObjC
- SDCycleScrollView
- SDWebImage
- SZTextView
- YYText
@@ -82,10 +86,11 @@ SPEC CHECKSUMS:
MOBFoundation: efdc3ce6b843fbc10ae8c1c6122a02b0d845b39b
NTESQuickPass: 8431dc52737c95883cd382c2ee75664d58f39377
ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1
YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
PODFILE CHECKSUM: d5910ffe3f02430dd36728a17554f28258564c74
PODFILE CHECKSUM: a4cc983fad6d0cd9a7283a7dc7e989a39c24fc18
COCOAPODS: 1.10.1

View File

@@ -133,6 +133,8 @@
E88B5CB826FB325200DA9178 /* XPMineTeenagerPwdPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CB726FB325200DA9178 /* XPMineTeenagerPwdPresenter.m */; };
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */; };
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 */; };
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720F26F43955007D6E91 /* UIImageConstant.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 */; };
E8E70D8F26F2F5DB00F03460 /* XPMineMenuTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D8E26F2F5DB00F03460 /* XPMineMenuTableViewCell.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 */
/* Begin PBXCopyFilesBuildPhase section */
@@ -409,6 +426,10 @@
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>"; };
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>"; };
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>"; };
@@ -477,6 +498,35 @@
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>"; };
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 */
/* Begin PBXFrameworksBuildPhase section */
@@ -729,6 +779,8 @@
18E7B31D26F0984C0064BC9B /* UserLevelVo.m */,
18E7B31F26F098650064BC9B /* UserInfoSkillVo.h */,
18E7B32026F098650064BC9B /* UserInfoSkillVo.m */,
E8EEB8F526FC2673007C6EBA /* UserPhoto.h */,
E8EEB8F626FC2673007C6EBA /* UserPhoto.m */,
);
path = Model;
sourceTree = "<group>";
@@ -855,6 +907,7 @@
189DD5A726DFA09700AB55B1 /* Tool */ = {
isa = PBXGroup;
children = (
E8EEB8EA26FC2050007C6EBA /* SDPhotoBrowser */,
E81366E426F0A4820076364C /* NSString */,
E82109AA26F1C86E00FC3319 /* CountDown */,
E81C278726EAFABF0031E639 /* Security */,
@@ -1098,6 +1151,30 @@
path = Teenager;
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 */ = {
isa = PBXGroup;
children = (
@@ -1150,6 +1227,8 @@
E8AC722E26F49610007D6E91 /* XPMineNotificationItemModel.m */,
E8AC723826F49AAE007D6E91 /* XPMineNotifyStatus.h */,
E8AC723926F49AAE007D6E91 /* XPMineNotifyStatus.m */,
E8EEB90A26FC5EBC007C6EBA /* XPMineUserInfoEditModel.h */,
E8EEB90B26FC5EBC007C6EBA /* XPMineUserInfoEditModel.m */,
);
path = Model;
sourceTree = "<group>";
@@ -1177,6 +1256,7 @@
E824545526F5E51900BE8163 /* XPMineVerifIdentityViewController.m */,
E824545F26F5F4E400BE8163 /* XPMineResetPayPwdViewController.h */,
E824546026F5F4E400BE8163 /* XPMineResetPayPwdViewController.m */,
E88B5CBE26FB404800DA9178 /* MineInfo */,
E88B5CA926FB15B900DA9178 /* Teenager */,
);
path = View;
@@ -1205,6 +1285,10 @@
E88B5CAF26FB1C6500DA9178 /* XPMineTeenagerPresenter.m */,
E88B5CB626FB325200DA9178 /* XPMineTeenagerPwdPresenter.h */,
E88B5CB726FB325200DA9178 /* XPMineTeenagerPwdPresenter.m */,
E8EEB8FF26FC31B6007C6EBA /* XPMineUserInfoPresenter.h */,
E8EEB90026FC31B6007C6EBA /* XPMineUserInfoPresenter.m */,
E8EEB90D26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.h */,
E8EEB90E26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m */,
);
path = Presenter;
sourceTree = "<group>";
@@ -1222,6 +1306,8 @@
E824546526F5FF5100BE8163 /* XPMineResetPayPasswordProtocol.h */,
E88B5CB126FB1CC100DA9178 /* XPMineTeenagerProtocol.h */,
E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */,
E8EEB90226FC31CE007C6EBA /* XPMineUserInfoProtocol.h */,
E8EEB91026FC6AD3007C6EBA /* XPMineUserInfoEditProtocol.h */,
);
path = Protocol;
sourceTree = "<group>";
@@ -1229,6 +1315,7 @@
E8E70D7F26F2F39000F03460 /* SubViews */ = {
isa = PBXGroup;
children = (
E88B5CC226FB429C00DA9178 /* MineInfo */,
E88B5CAA26FB168200DA9178 /* Teenager */,
E8E70D8126F2F51A00F03460 /* XPMineHeadView.h */,
E8E70D8226F2F51A00F03460 /* XPMineHeadView.m */,
@@ -1247,6 +1334,7 @@
E8E70D8026F2F3C500F03460 /* Cell */ = {
isa = PBXGroup;
children = (
E8EEB8F826FC285B007C6EBA /* MineInfo */,
E8E70D8726F2F58F00F03460 /* XPMineMatchTableViewCell.h */,
E8E70D8826F2F58F00F03460 /* XPMineMatchTableViewCell.m */,
E8E70D8A26F2F5A500F03460 /* XPMineMatchCollectionViewCell.h */,
@@ -1261,6 +1349,33 @@
path = Cell;
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 */
/* Begin PBXNativeTarget section */
@@ -1394,6 +1509,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E8EEB91126FC6AE2007C6EBA /* XPMineUserInfoEditProtocol.h in Sources */,
E8EEB90326FC31DC007C6EBA /* XPMineUserInfoProtocol.h in Sources */,
E88B5CBA26FB329C00DA9178 /* XPMineTeenagerPwdProtocol.h in Sources */,
E88B5CB226FB1CFF00DA9178 /* XPMineTeenagerProtocol.h in Sources */,
E824546626F5FF6000BE8163 /* XPMineResetPayPasswordProtocol.h in Sources */,
@@ -1410,6 +1527,7 @@
E81366F826F0C12A0076364C /* LoginFullInfoProtocol.h in Sources */,
E8E70D7E26F2F19D00F03460 /* Api+Mine.m in Sources */,
E824543D26F58C3A00BE8163 /* XPLoginBindSuccessView.m in Sources */,
E8EEB8F726FC2673007C6EBA /* UserPhoto.m in Sources */,
E81C27A226EF23490031E639 /* XPEnum.h in Sources */,
E88B5CB526FB20B800DA9178 /* XPMineTeenagerPwdView.m in Sources */,
E81C279826EB3AC40031E639 /* LoginForgetPasswordProtocol.h in Sources */,
@@ -1419,6 +1537,7 @@
E8B825CA26EA1231009E8E9F /* LoginVerifCodeViewController.m in Sources */,
189DD76226E60DDC00AB55B1 /* Api+Login.m in Sources */,
18E7B22626E8CDCF0064BC9B /* XplanFlutterBoostDelegate.m in Sources */,
E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */,
E824544026F58F9400BE8163 /* XPMinePayPwdViewController.m in Sources */,
E8AC723D26F4B6AA007D6E91 /* XPLoginBindPhoneResultViewController.m in Sources */,
189DD73E26E21C3F00AB55B1 /* YYUtility.m in Sources */,
@@ -1430,6 +1549,7 @@
189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */,
E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */,
E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */,
E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */,
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */,
E81C279D26EEEC620031E639 /* XPConstant.m in Sources */,
187EEEFE26E8A82C002833B2 /* NSObject+AutoCoding.m in Sources */,
@@ -1442,6 +1562,7 @@
E81C27AE26EF39AB0031E639 /* AppDelegate+ThirdConfig.m in Sources */,
E8E70D8326F2F51A00F03460 /* XPMineHeadView.m in Sources */,
E8B825D026EA3825009E8E9F /* LoginPasswordViewController.m in Sources */,
E8EEB90C26FC5EBC007C6EBA /* XPMineUserInfoEditModel.m in Sources */,
18E7B31826F097E00064BC9B /* UserInfoModel.m in Sources */,
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */,
18E7B32126F098650064BC9B /* UserInfoSkillVo.m in Sources */,
@@ -1454,9 +1575,11 @@
18E7B26926E8D5D60064BC9B /* XCCurrentVCStackManager.m in Sources */,
E824544326F58FCE00BE8163 /* XPMinePayPwdInputView.m in Sources */,
9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */,
E8EEB8F426FC2050007C6EBA /* SDBrowserImageView.m in Sources */,
E824544626F5934700BE8163 /* XPMinePayPwdPresenter.m in Sources */,
186A536A26FC6F2E00D67B2C /* XCShareItem.m in Sources */,
189DD54B26DE338800AB55B1 /* BaseViewController.m in Sources */,
E8EEB91726FC7B35007C6EBA /* XPMineUserInfoDesViewController.m in Sources */,
E8E70D8626F2F55C00F03460 /* XPMineAccountView.m in Sources */,
E81C279026EB314D0031E639 /* LoginForgetEditView.m in Sources */,
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */,
@@ -1472,6 +1595,8 @@
E824545626F5E51900BE8163 /* XPMineVerifIdentityViewController.m in Sources */,
186A534726FC6ED900D67B2C /* TTAlertConfig.m in Sources */,
18E7B31E26F0984C0064BC9B /* UserLevelVo.m in Sources */,
E8EEB90626FC5772007C6EBA /* XPMineUserInfoEditViewController.m in Sources */,
E8EEB91426FC7786007C6EBA /* XPMineUserInfoNickViewController.m in Sources */,
18E7B31B26F0982E0064BC9B /* UserExpand.m in Sources */,
E824543526F57D6E00BE8163 /* XPLoginVerifBindPhoneViewController.m in Sources */,
E8B825CD26EA18C8009E8E9F /* ThemeColor.m in Sources */,
@@ -1486,14 +1611,18 @@
E81C279326EB394D0031E639 /* LoginForgetPasswordViewController.m in Sources */,
E81C278D26EAFAF60031E639 /* DESEncrypt.m in Sources */,
E81366E726F0A49E0076364C /* NSString+Regex.m in Sources */,
E8EEB90126FC31B6007C6EBA /* XPMineUserInfoPresenter.m in Sources */,
189DD56526DE465A00AB55B1 /* LoginViewController.m in Sources */,
E824544B26F5BBB800BE8163 /* XPMineModifPayPwdViewController.m in Sources */,
E8EEB8FE26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m in Sources */,
E88B5CAD26FB16A800DA9178 /* XPMineTeenagerDesView.m in Sources */,
E824545126F5CE6E00BE8163 /* XPMineModifPayPwdPresenter.m in Sources */,
E8EEB90F26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m in Sources */,
E8AC723A26F49AAE007D6E91 /* XPMineNotifyStatus.m in Sources */,
18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */,
E8AC721C26F4720B007D6E91 /* XPMineSettingPresent.m in Sources */,
E88B5CA526FB088600DA9178 /* XPMineTeenagerViewController.m in Sources */,
E8EEB90926FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m in Sources */,
18C17A5D26F338F300C48E11 /* XplanFBFlutterViewContainer.m in Sources */,
186A536926FC6F2E00D67B2C /* XCShareView.m in Sources */,
186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */,
@@ -1508,6 +1637,7 @@
E81366FC26F0D2980076364C /* UIButton+EnlargeTouchArea.m in Sources */,
E824546426F5FF1C00BE8163 /* XPMineResetPayPasswordPresenter.m in Sources */,
186A534D26FC6ED900D67B2C /* TTActionSheetView.m in Sources */,
E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */,
E824545926F5E65900BE8163 /* XPMineVerifIdentityView.m in Sources */,
189DD74026E21C3F00AB55B1 /* YYUtility+App.m in Sources */,
189DD74526E21CCC00AB55B1 /* YYReachability.m in Sources */,
@@ -1515,6 +1645,8 @@
E8E70D8F26F2F5DB00F03460 /* XPMineMenuTableViewCell.m in Sources */,
187EEEE126E89BFB002833B2 /* AccountModel.m in Sources */,
E8AC722126F47E23007D6E91 /* XPMineAboutUsViewController.m in Sources */,
E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */,
E8EEB8FB26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m in Sources */,
E8AC721626F46B06007D6E91 /* XPMineSettingTableViewCell.m in Sources */,
189DD75026E21D9000AB55B1 /* GCDHelper.m in Sources */,
186A534826FC6ED900D67B2C /* TTAlertButtonConfig.m in Sources */,

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

View File

@@ -9,6 +9,7 @@
#import "UserExpand.h"
#import "UserLevelVo.h"
#import "UserInfoSkillVo.h"
#import "UserPhoto.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, GenderType) {
@@ -47,6 +48,12 @@ typedef NS_ENUM(NSInteger, GenderType) {
@property (nonatomic , assign) BOOL isBindPaymentPwd;
@property (nonatomic , assign) BOOL isBindXCZAccount;
@property (nonatomic , assign) BOOL isBindAlipay;
///相册
@property (nonatomic, strong) NSArray<UserPhoto *> *privatePhoto;//相册
///签名
@property (nonatomic,copy) NSString *userDesc;
///出生日期
@property (nonatomic,assign) long birth;
@end
NS_ASSUME_NONNULL_END

View File

@@ -9,4 +9,10 @@
@implementation UserInfoModel
+ (NSDictionary *)objectClassInArray {
return @{
@"privatePhoto":UserPhoto.class
};
}
@end

View 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

View File

@@ -0,0 +1,13 @@
//
// UserPhoto.m
// xplan-ios
//
// Created by on 2021/9/23.
//
#import "UserPhoto.h"
@implementation UserPhoto
@end

View 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

View 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

View 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

View 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) { // imageviewimage
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

View 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

View 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

View 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

View 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

View File

@@ -0,0 +1,12 @@
//
// XPMineUserInfoEditModel.m
// xplan-ios
//
// Created by on 2021/9/23.
//
#import "XPMineUserInfoEditModel.h"
@implementation XPMineUserInfoEditModel
@end

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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

View File

@@ -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

View File

@@ -15,6 +15,7 @@
#import "UIButton+EnlargeTouchArea.h"
///Model
#import "XPMineItemModel.h"
#import "UserInfoModel.h"
///P
#import "XPMineProtocol.h"
#import "XPMinePresent.h"
@@ -25,6 +26,7 @@
///VC
#import "XPMineSettingViewController.h"
#import "XPMineTeenagerViewController.h"
#import "XPMineUserInfoViewController.h"
#import "XPWebViewController.h"
@@ -128,7 +130,11 @@
[self pushWebViewWIthUrl:URLWithType(kUserInviteFriendURL)];
break;
case XPMineItemType_Personinfo:
#warning to do
{
XPMineUserInfoViewController * infoVC = [[XPMineUserInfoViewController alloc] init];
infoVC.uid = self.userInfo.uid;
[self.navigationController pushViewController:infoVC animated:YES];
}
break;
default: