123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- //
- // UserPersonalCenterViewController.swift
- // RainbowPlanet
- //
- // Created by 南鑫林 on 2019/6/17.
- // Copyright © 2019 RainbowPlanet. All rights reserved.
- //
- import UIKit
- import JXSegmentedView
- import RxSwift
- import SwiftyMediator
- import ESTabBarController_swift
- import Kingfisher
- class UserPersonalCenterViewController: BaseViewController {
-
- deinit {
- NXLLog("deinit")
- if observe != nil {
- NotificationCenter.default.removeObserver(observe!)
- }
- }
-
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- }
- weak var observe : NSObjectProtocol?
-
- let JXTableHeaderViewHeight: Int = Int(140 + kNavBarTotalHeight + 109)
- let JXheightForHeaderInSection: Int = 44
- var cmsTemplateTitles = ["发布 0", "收藏 0", "分享 0"]
- var userPersonalCenterVCType : Int = 0
- var jumpModeType : JumpModeType? = JumpModeType.none
- var userDetailModel : UserDetailModel?
-
- override func viewDidLoad() {
- super.viewDidLoad()
- setupViews()
- setupLayouts()
- setupData()
- }
-
- override func setupViews() {
- userHeaderContainerView.addSubview(userHeaderView)
- view.addSubview(segmentedView)
- view.addSubview(pagingView)
- view.insertSubview(navigationBar, aboveSubview: pagingView)
- setnavigationBar()
- view.addSubview(iconImageView)
- }
-
- /// 设置navigationBar
- func setnavigationBar() {
- navigationBar.addSubview(navigationBgView)
- navigationBar.addSubview(avatarButton)
- navigationBar.addSubview(nameButton)
- navigationBar.addSubview(setButton)
- navigationBar.insertSubview(navigationBgView, aboveSubview: navigationBar.backgroundImageView)
- navigationBar.backgroundImageView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenWidth)
- navigationBar.backgroundImageView.contentMode = .scaleAspectFill
- navigationBar.clipsToBounds = true
- if jumpModeType == JumpModeType.push {
- navigationBar.wr_setLeftButton(image: kImage(name: "navbar_back_white")!)
- }
- navigationBar.wr_setRightButton(image: kImage(name: "center_share")!)
- // 设置导航栏显示图片
- navigationBar.barBackgroundImage = UIImage(named: "default_pic")
- // 设置初始导航栏透明度
- navigationBar.wr_setBackgroundAlpha(alpha: 0)
- // 设置状态栏style
- statusBarStyle = .lightContent
- }
-
- override func setupLayouts() {
- navigationBgView.snp.makeConstraints { (make) in
- make.edges.equalToSuperview()
- }
- avatarButton.snp.makeConstraints { (make) in
- if jumpModeType == JumpModeType.none {
- make.left.equalTo(14)
- }else {
- make.left.equalTo(navigationBar.leftButton.snp_right)
- }
- make.size.equalTo(20)
- make.centerY.equalTo(navigationBar.rightButton)
- }
- nameButton.snp.makeConstraints { (make) in
- make.centerY.equalTo(avatarButton)
- make.left.equalTo(avatarButton.snp_right).offset(4)
- }
- setButton.snp_makeConstraints { (make) in
- make.centerY.equalTo(navigationBar.rightButton)
- make.right.equalTo(navigationBar.rightButton.snp_left)
- make.size.equalTo(34)
- }
- iconImageView.snp.makeConstraints { (make) in
- make.bottom.equalToSuperview()
- make.centerX.equalToSuperview()
- }
- }
-
-
- override func setupData() {
- navigationBar.onClickRightButton = {
- ShareCommunityView.inviteGoodFriends()
- }
-
- //设置
- setButton.rx.tap.subscribe(onNext: {
- [weak self] (data) in
- let vc = SetViewController()
- self?.navigationController?.pushViewController(vc, animated: true)
- }).disposed(by: disposeBag)
-
- pagingView.mainTableView.addHeader(withBeginRefresh: true, animation: false, refreshBlock: { [weak self] (page) in
- self?.userMemberDetailApi()
- })
- // 更新用户信息
- observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("UserMemberDetail"), object: nil, queue: OperationQueue.main) {
- [weak self] (notification) in
- self?.userMemberDetailApi()
- }
- setBadge()
- //将要进入前台的时候
- observe = NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, queue: OperationQueue.main, using: {
- [weak self] (notification) in
- self?.setBadge()
- })
-
- observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("MineModuleTop"), object: nil, queue: OperationQueue.main, using: {
- [weak self] (notification) in
- if self?.pagingView.mainTableView.contentOffset == CGPoint(x: 0, y: 0) {
- self?.userMemberDetailApi()
- }else {
- self?.pagingView.mainTableView.scrollToTop()
- }
- })
-
- observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("communityDeletePostApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
- self?.userDetailModel?.postCount = "\((Int(self?.userDetailModel?.postCount ?? "0") ?? 1) - 1)"
- self?.cmsTemplateTitles = ["发布 \(self?.userDetailModel?.postCount ?? "0")","收藏 \(self?.userDetailModel?.collectCount ?? "0")","分享 \(self?.userDetailModel?.shareCount ?? "0")"]
- self?.reloadData()
- }
-
- observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("userMemberGetTotalBean"), object: nil, queue: OperationQueue.main, using: {
- [weak self] (notification) in
- // self?.userMemberDetailApi()
- self?.userMemberDetailOnlyApi()
- })
-
- observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("PublishPostSuccess"), object: nil, queue: OperationQueue.main, using: {
- [weak self] (notification) in
- self?.userMemberDetailApi()
- })
- }
-
- // 设置Badge
- func setBadge() {
- if UpdateVersionModel.shared.object()?.upGradeModelType == .update || UpdateVersionModel.shared.object()?.upGradeModelType == .strongUpdate {
- self.setButton.pp.moveBadge(x: -8, y: 8)
- self.setButton.pp.addDot(color: kFE352BColor)
- }else {
- self.setButton.pp.hiddenBadge()
- }
- }
-
- /// 刷新页面
- func reloadData() {
- segmentedDataSource.titles = cmsTemplateTitles
- segmentedView.indicators = [indicator]
- self.segmentedDataSource.reloadData(selectedIndex: userPersonalCenterVCType)
- self.segmentedView.defaultSelectedIndex = userPersonalCenterVCType
- self.segmentedView.reloadData()
- self.pagingView.reloadData()
-
- if userPersonalCenterVCType == 0 && self.userDetailModel?.postCount == "0" {
- iconImageViewAlpha(alpha: 1)
- }else {
- iconImageViewAlpha(alpha: 0)
- }
- }
-
- /// 编辑
- func pushModifyData() {
- let vc = ModifyDataViewController()
- vc.userDetailModel = self.userDetailModel
- self.navigationController?.pushViewController(vc, animated: true)
- }
-
- lazy var avatarButton: UIButton = {
- let avatarButton = UIButton(type: UIButton.ButtonType.custom)
- avatarButton.setImage(kImage(name: "default_avatar"), for: UIControl.State.normal)
- avatarButton.alpha = 0
- avatarButton.cornerRadius = 10
- avatarButton.masksToBounds = true
- avatarButton.rx.tap.subscribe(onNext: {[weak self] (data) in
- self?.pushModifyData()
- }).disposed(by: disposeBag)
- return avatarButton
- }()
-
- lazy var nameButton: UIButton = {
- let nameButton = UIButton(type: UIButton.ButtonType.custom)
- nameButton.setTitle("昵称", for: UIControl.State.normal)
- nameButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
- nameButton.titleLabel?.font = kBoldFont18
- nameButton.alpha = 0
- nameButton.rx.tap.subscribe(onNext: {[weak self] (data) in
- self?.pushModifyData()
- }).disposed(by: disposeBag)
- return nameButton
- }()
-
- lazy var setButton: UIButton = {
- let setButton = UIButton(type: UIButton.ButtonType.custom)
- setButton.setImage(kImage(name: "nav_precenter_set"), for: UIControl.State.normal)
- return setButton
- }()
-
- private lazy var navigationBgView: UIView = {
- let navigationBgView = UIView()
- navigationBgView.backgroundColor = UIColor(hexString: "000000", alpha: 0.5)
- navigationBgView.alpha = 0
- return navigationBgView
- }()
-
- lazy var iconImageView: UIImageView = {
- let iconImageView = UIImageView()
- iconImageView.image = kImage(name: "def_page_pic_pecenter")
- iconImageView.alpha = 0
- return iconImageView
- }()
-
- func iconImageViewAlpha(alpha:CGFloat) {
- UIView.animate(withDuration: 1) {
- [weak self] in
- self?.iconImageView.alpha = alpha
- }
- }
-
- //1.初始化JXSegmentedView
- lazy var segmentedView: JXSegmentedView = {
- let segmentedView = JXSegmentedView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: CGFloat(JXheightForHeaderInSection)))
- segmentedView.delegate = self
- segmentedView.dataSource = segmentedDataSource
- segmentedView.contentScrollView = pagingView.listContainerView.collectionView
- return segmentedView
- }()
-
- //2.初始化dataSource
- lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
- let segmentedDataSource = JXSegmentedTitleDataSource()
- segmentedDataSource.isTitleColorGradientEnabled = true
- segmentedDataSource.isItemSpacingAverageEnabled = true
- segmentedDataSource.isTitleZoomEnabled = true
- segmentedDataSource.titleNormalColor = k999999Color
- segmentedDataSource.titleSelectedColor = k333333Color
- segmentedDataSource.titleNormalFont = kRegularFont14!
- segmentedDataSource.titleSelectedFont = kBoldFont16
-
- //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
- segmentedDataSource.reloadData(selectedIndex: 0)
- return segmentedDataSource
- }()
- //3.初始化指示器indicator
- lazy var indicator: JXSegmentedIndicatorLineView = {
- let indicator = JXSegmentedIndicatorLineView()
- indicator.indicatorColor = k333333Color
- indicator.indicatorHeight = 4
- indicator.indicatorWidth = 22
- return indicator
- }()
-
- //4.pagingView
- lazy var pagingView: JXPagingView = {
- let pagingView = JXPagingView(delegate: self)
- return pagingView
- }()
- // 5.头部headerView
- lazy var userHeaderContainerView: UIView = {
- let userHeaderContainerView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: CGFloat(JXTableHeaderViewHeight)))
- return userHeaderContainerView
- }()
-
- /// 6.包含头部
- lazy var userHeaderView: UserPersonalCenterHeaderView = {
- var userHeaderView = UserPersonalCenterHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: CGFloat(JXTableHeaderViewHeight)))
- return userHeaderView
- }()
-
- override func viewDidLayoutSubviews() {
- super.viewDidLayoutSubviews()
- pagingView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenHeight - kTabBarTotalHeight)
- }
-
- }
- extension UserPersonalCenterViewController {
-
- /// 获取用户详情
- func userMemberDetailApi() {
- let userModel = UserModel.shared().getModel()
- SwiftMoyaNetWorkServiceUser.shared().userMemberDetailApi(uid: userModel?.uid ?? 0) {
- [weak self] (userDetailModel) -> (Void) in
- self?.userDetailModel = userDetailModel as? UserDetailModel
- self?.userHeaderView.userDetailModel = self?.userDetailModel
- self?.navigationBar.backgroundImageView.kf.setImage(with: kURLThumbnailsImage(name: self?.userDetailModel?.backgroundImg ?? "default_pic", size: (self?.navigationBar.backgroundImageView.size)!), placeholder: kImage(name: "default_pic"))
- self?.avatarButton.kf.setImage(with: kURLThumbnailsImage(name: self?.userDetailModel?.avatar ?? "", size: kSize60x60Image), for: UIControl.State.normal, placeholder: kImage(name: "default_avatar"))
- KingfisherManager.shared.cache.clearMemoryCache()
- self?.nameButton.setTitle(self?.userDetailModel?.username, for: UIControl.State.normal)
- self?.cmsTemplateTitles = ["发布 \(self?.userDetailModel?.postCount ?? "0")","收藏 \(self?.userDetailModel?.collectCount ?? "0")","分享 \(self?.userDetailModel?.shareCount ?? "0")"]
- self?.reloadData()
- }
- }
-
- func userMemberDetailOnlyApi() {
- let userModel = UserModel.shared().getModel()
- SwiftMoyaNetWorkServiceUser.shared().userMemberDetailApi(uid: userModel?.uid ?? 0) {
- [weak self] (userDetailModel) -> (Void) in
- self?.userDetailModel = userDetailModel as? UserDetailModel
- self?.userHeaderView.userDetailModel = self?.userDetailModel
- self?.navigationBar.backgroundImageView.kf.setImage(with: kURLThumbnailsImage(name: self?.userDetailModel?.backgroundImg ?? "default_pic", size: (self?.navigationBar.backgroundImageView.size)!), placeholder: kImage(name: "default_pic"))
- self?.avatarButton.kf.setImage(with: kURLThumbnailsImage(name: self?.userDetailModel?.avatar ?? "", size: kSize60x60Image), for: UIControl.State.normal, placeholder: kImage(name: "default_avatar"))
- KingfisherManager.shared.cache.clearMemoryCache()
-
- }
- }
- }
- extension UserPersonalCenterViewController : JXSegmentedViewDelegate {
- //点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,而不关心具体是点击还是滚动选中的情况。
- func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
- self.userPersonalCenterVCType = index
- if index == 0 && self.userDetailModel?.postCount == "0" {
- iconImageViewAlpha(alpha: 1)
- }else {
- iconImageViewAlpha(alpha: 0)
- }
- }
-
- // 点击选中的情况才会调用该方法
- func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
- }
-
- // 滚动选中的情况才会调用该方法
- func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) {
- }
-
- // 正在滚动中的回调
- func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
- }
-
- /// 是否允许点击选中目标index的item
- func segmentedView(_ segmentedView: JXSegmentedView, canClickItemAt index: Int) -> Bool {
- return true
- }
- }
- extension UserPersonalCenterViewController: JXPagingViewDelegate {
-
- func tableHeaderViewHeight(in pagingView: JXPagingView) -> Int {
- return JXTableHeaderViewHeight
- }
-
- func tableHeaderView(in pagingView: JXPagingView) -> UIView {
- return userHeaderContainerView
- }
-
- func heightForPinSectionHeader(in pagingView: JXPagingView) -> Int {
- return JXheightForHeaderInSection
- }
-
- func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView {
- pagingView.pinSectionHeaderVerticalOffset = kNavBarTotalHeight
- return segmentedView
- }
-
- func numberOfLists(in pagingView: JXPagingView) -> Int {
- return cmsTemplateTitles.count
- }
-
- func pagingView(_ pagingView: JXPagingView, initListAtIndex index: Int) -> JXPagingViewListViewDelegate {
- let list = PersonViewUserAndOtherListView()
- list.jumpModeType = jumpModeType
- let uid = UserModel.shared().getModel()?.uid
- list.uid = uid
- list.personalCenterVCType = index
- userPersonalCenterVCType = index
- return list
- }
-
- func mainTableViewDidScroll(_ scrollView: UIScrollView) {
- userHeaderView.personViewUserAndOtherHeaderView.scrollViewDidScroll(contentOffsetY: scrollView.contentOffset.y)
-
- let offsetY = scrollView.contentOffset.y
- if (offsetY > kSafeStatusBarHeight) {
- let alpha = (offsetY - kSafeStatusBarHeight) / CGFloat(kNavBarTotalHeight)
- navigationBar.wr_setBackgroundAlpha(alpha: alpha)
- avatarButton.alpha = alpha
- nameButton.alpha = alpha
- navigationBgView.alpha = alpha
- } else {
- navigationBar.wr_setBackgroundAlpha(alpha: 0)
- avatarButton.alpha = 0
- nameButton.alpha = 0
- navigationBgView.alpha = 0
- }
- }
- }
|