// // HealthViewController.swift // Lookfit // // Created by lemo. on 2020/3/7. // Copyright © 2020 Sheldon. All rights reserved. // import UIKit fileprivate enum Resuable { static let stepCell = ReusableCell() static let sleeoHeartRateCell = ReusableCell() static let temperatureCell = ReusableCell() } class HealthViewController: TableViewController { lazy var navigationBar: HealthNavigationBar = { let navbar = HealthNavigationBar() navbar.gradient(colors: [kHexColor(0xFFF0DE), kHexColor(0xFFFFFF)], locations: nil, autoLaoutFrame: CGRect(x: 0, y: 0, width: kScreenW, height: kScaleWidth(90))) return navbar }() override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) } override func viewDidLoad() { super.viewDidLoad() // 未设置用户信息 guard let _ = UserDefaultsManager.getUserInfo() else { // 未设置用户信息 navigator.show(segue: .guideUserInfo, sender: self, transition: .modal) return } } override func makeUI() { super.makeUI() tableView.tableHeaderView = UIView() tableView.register(Resuable.stepCell) tableView.register(Resuable.sleeoHeartRateCell) tableView.register(Resuable.temperatureCell) tableView.rx.setDelegate(self).disposed(by: rx.disposeBag) view.addSubview(navigationBar) layout() } func layout() { navigationBar.snp.makeConstraints { (make) in make.top.equalToSuperview() make.width.equalTo(kScreenW) make.height.equalTo(kBatteryH + 70) } tableView.snp.makeConstraints { (make) in make.top.equalTo(navigationBar.snp.bottom) make.left.right.bottom.equalToSuperview() } } override func bindViewModel() { guard let viewModel = viewModel as? HealthViewModel else { return } let rxDataSource = RxTableViewSectionedReloadDataSource(configureCell: { [weak self] (_ , tv, indexPath, model) -> UITableViewCell in switch model { case .stepItem(let viewModel): let cell = tv.dequeue(Resuable.stepCell, for: indexPath) cell.bind(model: viewModel) return cell case .sleepHeartItem(let viewModel): let cell = tv.dequeue(Resuable.sleeoHeartRateCell, for: indexPath) cell.bind(model: viewModel) cell.sleepBlockView.bgImgBtn.rx.tap .subscribe(onNext: { _ in self?.navigator.show(segue: .sleep(viewModel: SleepViewModel()), sender: self) }) .disposed(by: cell.cellDisposeBag) cell.hearRateBlockView.bgImgBtn.rx.tap .subscribe(onNext: { _ in self?.navigator.show(segue: .heartRate(viewModel: HRViewModel()), sender: self) }) .disposed(by: cell.cellDisposeBag) return cell case .temperatureIitem(let viewModel): let cell = tv.dequeue(Resuable.temperatureCell, for: indexPath) cell.bind(model: viewModel) cell.temperatureBlockView.bgImgBtn.rx.tap .subscribe(onNext: { _ in self?.navigator.show(segue: .temperature(viewModel: TemperatureViewModel()), sender: self) }) .disposed(by: cell.cellDisposeBag) return cell default: return UITableViewCell() } }) viewModel.userIcon .bind(to: navigationBar.headImg.rx.image) .disposed(by: rx.disposeBag) viewModel.userNickname .bind(to: navigationBar.nicknameLabel.rx.text) .disposed(by: rx.disposeBag) BluetoothService.shared.deviceConnectState .bind(to: navigationBar.statusBtn.rx.isSelected) .disposed(by: rx.disposeBag) BluetoothService.shared.powerState .bind(to: navigationBar.powerBtn.rx.image()) .disposed(by: rx.disposeBag) viewModel.relay .bind(to: tableView.rx.items(dataSource: rxDataSource)) .disposed(by: rx.disposeBag) // DFU设备升级 viewModel.dfuDeviceUpgrate .subscribe(onNext: { [weak self] viewModel in guard let `self` = self else { return } if let currenVC = currentViewController(), currenVC.isKind(of: FirmwareUpdateViewController.self) { return } currentTabbarController()?.selectedIndex = 0 self.navigator.show(segue: .firmwareUpdate(viewModel: viewModel), sender: self) }) .disposed(by: rx.disposeBag) } override func handleEvent() { navigationBar.rx.tap .subscribe(onNext: { [weak self] _ in let viewModel = UserInfoViewModel() self?.navigator.show(segue: .userInfo(viewModel: viewModel), sender: self) }) .disposed(by: rx.disposeBag) tableView.rx.itemSelected .subscribe(onNext: { [weak self] (indexPath) in if indexPath.row == 0 { let viewModel = StepViewModel() self?.navigator.show(segue: .step(viewModel: viewModel), sender: self) } }) .disposed(by: rx.disposeBag) } } extension HealthViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if indexPath.row == 0 { return kScaleWidth(215) } return kScaleWidth(224) } }