123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import UIKit
- import RxSwift
- import PaiaiDataKit
- import PaiaiUIKit
- protocol ContainerViewControllerDelegate: class {
- func presentMine()
- func presentLogin()
- }
- public final class ContainerViewController: PageViewController {
- weak var delegate: ContainerViewControllerDelegate?
- var userInfo: UserInfoViewModel!
- private var disposeBag = DisposeBag()
- private var iconView: UIImageView = {
- let iconView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 32))
- iconView.contentMode = .scaleAspectFill
- iconView.isUserInteractionEnabled = true
- iconView.image = UIImage.Navigation.verticalPoints
- return iconView
- }()
- private var headerView: UIImageView = {
- let headerView = UIImageView(frame: CGRect(x: 20, y: 0, width: 32, height: 32))
- headerView.isUserInteractionEnabled = true
- headerView.image = UIImage.defaultAvatar
- return headerView
- }()
- private var navigationContentView: UIView = {
- let contentView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 32))
- return contentView
- }()
-
- override public func viewDidLoad() {
- super.viewDidLoad()
- setupNavigationBar()
- bindInteraction()
- }
- public override func viewDidAppear(_ animated: Bool) {
- super.viewDidAppear(animated)
- bindLoggedInInteraction()
- bindUserInfoToHeaderView()
- }
- func setupNavigationBar() {
- navigationController?.navigationBar.shadowImage = UIImage()
- navigationController?.navigationBar.tintColor = UIColor.white
- navigationController?.navigationBar.barTintColor = UIColor.white
- navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
- navigationController?.navigationBar.setBackgroundImage(UIImage.Navigation.background, for: .default)
- constructNavigationViewHierarchy()
- }
- func constructNavigationViewHierarchy() {
- navigationContentView.addSubview(iconView)
- navigationContentView.addSubview(headerView)
- navigationItem.setLeftItem(UIBarButtonItem(customView: navigationContentView))
- }
- }
- fileprivate extension ContainerViewController {
- func bindLoggedInInteraction() {
- userInfo.notLoggedIn
- .asDriver(onErrorJustReturn: ())
- .drive(onNext: { [unowned self] (_) in
- self.delegate?.presentLogin()
- }).disposed(by: disposeBag)
- }
- func bindInteraction() {
- let tap = UITapGestureRecognizer()
- tap.rx.event.subscribe(onNext: { (_) in
- self.delegate?.presentMine()
- }).disposed(by: disposeBag)
- navigationContentView.addGestureRecognizer(tap)
- }
- func bindUserInfoToHeaderView() {
- userInfo.shareUserInfo.asObservable()
- .subscribe(onNext: {[unowned self] (info) in
- self.headerView.setImage(info.photoPath, placeholder: UIImage.defaultAvatar)
- }).disposed(by: disposeBag)
- }
- }
|