Brak opisu

ContainerViewController.swift 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //
  2. // ContainerViewController.swift
  3. // PaiAi
  4. //
  5. // Created by ffib on 2018/12/6.
  6. // Copyright © 2018 yb. 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. }
  47. func setupNavigationBar() {
  48. navigationController?.navigationBar.shadowImage = UIImage()
  49. navigationController?.navigationBar.tintColor = UIColor.white
  50. navigationController?.navigationBar.barTintColor = UIColor.white
  51. navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
  52. navigationController?.navigationBar.setBackgroundImage(UIImage.Navigation.background, for: .default)
  53. constructNavigationViewHierarchy()
  54. }
  55. func constructNavigationViewHierarchy() {
  56. navigationContentView.addSubview(iconView)
  57. navigationContentView.addSubview(headerView)
  58. navigationItem.setLeftItem(UIBarButtonItem(customView: navigationContentView))
  59. }
  60. }
  61. /// binding UI
  62. fileprivate extension ContainerViewController {
  63. func bindLoggedInInteraction() {
  64. userInfo.notLoggedIn
  65. .asDriver(onErrorJustReturn: ())
  66. .drive(onNext: { [unowned self] (_) in
  67. self.delegate?.presentLogin()
  68. }).disposed(by: disposeBag)
  69. }
  70. func bindInteraction() {
  71. let tap = UITapGestureRecognizer()
  72. tap.rx.event.subscribe(onNext: { (_) in
  73. self.delegate?.presentMine()
  74. }).disposed(by: disposeBag)
  75. navigationContentView.addGestureRecognizer(tap)
  76. }
  77. func bindUserInfoToHeaderView() {
  78. userInfo.shareUserInfo.asObservable()
  79. .subscribe(onNext: {[unowned self] (info) in
  80. self.headerView.setImage(info.photoPath, placeholder: UIImage.defaultAvatar)
  81. }).disposed(by: disposeBag)
  82. }
  83. }