No Description

ContainerViewController.swift 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //
  2. // ContainerViewController.swift
  3. // Paiai_iOS
  4. //
  5. // Created by FFIB on 2018/12/6.
  6. // Copyright © 2018 FFIB. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import PaiaiDataKit
  11. import PaiaiUIKit
  12. protocol ContainerViewControllerDelegate: class {
  13. func presentMine()
  14. func presentLogin()
  15. }
  16. public final class ContainerViewController: PageViewController {
  17. weak var delegate: ContainerViewControllerDelegate?
  18. var userInfo: UserInfoViewModel!
  19. private var disposeBag = DisposeBag()
  20. private var iconView: UIImageView = {
  21. let iconView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 32))
  22. iconView.contentMode = .scaleAspectFill
  23. iconView.isUserInteractionEnabled = true
  24. iconView.image = UIImage.Navigation.verticalPoints
  25. return iconView
  26. }()
  27. private var headerView: UIImageView = {
  28. let headerView = UIImageView(frame: CGRect(x: 20, y: 0, width: 32, height: 32))
  29. headerView.isUserInteractionEnabled = true
  30. headerView.image = UIImage.defaultAvatar
  31. return headerView
  32. }()
  33. private var navigationContentView: UIView = {
  34. let contentView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 32))
  35. return contentView
  36. }()
  37. /// life circle
  38. override public func viewDidLoad() {
  39. super.viewDidLoad()
  40. setupNavigationBar()
  41. bindInteraction()
  42. }
  43. public override func viewDidAppear(_ animated: Bool) {
  44. super.viewDidAppear(animated)
  45. bindLoggedInInteraction()
  46. bindUserInfoToHeaderView()
  47. }
  48. func setupNavigationBar() {
  49. navigationController?.navigationBar.shadowImage = UIImage()
  50. navigationController?.navigationBar.tintColor = UIColor.white
  51. navigationController?.navigationBar.barTintColor = UIColor.white
  52. navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
  53. navigationController?.navigationBar.setBackgroundImage(UIImage.Navigation.background, for: .default)
  54. constructNavigationViewHierarchy()
  55. }
  56. func constructNavigationViewHierarchy() {
  57. navigationContentView.addSubview(iconView)
  58. navigationContentView.addSubview(headerView)
  59. navigationItem.setLeftItem(UIBarButtonItem(customView: navigationContentView))
  60. }
  61. }
  62. /// binding UI
  63. fileprivate extension ContainerViewController {
  64. func bindLoggedInInteraction() {
  65. userInfo.notLoggedIn
  66. .asDriver(onErrorJustReturn: ())
  67. .drive(onNext: { [unowned self] (_) in
  68. self.delegate?.presentLogin()
  69. }).disposed(by: disposeBag)
  70. }
  71. func bindInteraction() {
  72. let tap = UITapGestureRecognizer()
  73. tap.rx.event.subscribe(onNext: { (_) in
  74. self.delegate?.presentMine()
  75. }).disposed(by: disposeBag)
  76. navigationContentView.addGestureRecognizer(tap)
  77. }
  78. func bindUserInfoToHeaderView() {
  79. userInfo.shareUserInfo.asObservable()
  80. .subscribe(onNext: {[unowned self] (info) in
  81. self.headerView.setImage(info.photoPath, placeholder: UIImage.defaultAvatar)
  82. }).disposed(by: disposeBag)
  83. }
  84. }