//
|
// TravelVC.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/5/28.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxCocoa
|
import RxSwift
|
import HandyJSON
|
|
/// 出行
|
class TravelVC: YYViewController {
|
|
/// TableView
|
private let tableView = YYTableView()
|
|
/// 地图
|
let mapView = YYMapViewManager.share.mapView
|
|
/// 地址栏高度
|
var cellHeight: CGFloat = 168
|
|
/// 特惠购卡高度
|
var buyCardHeight:CGFloat = 42
|
|
var offset: CGFloat = 30
|
|
/// 信息view高度
|
let infoViewHeight: CGFloat = 138
|
|
var showCar:Bool = false
|
|
/// 偏移高度
|
private var OffsetY: CGFloat {
|
return screenH - navH - cellHeight - yy_bottomH - offset - buyCardHeight
|
}
|
|
/// 开始滑动之前的偏移量
|
private var beforeOffsetY = screenH - navH - 168 - yy_bottomH - 30
|
|
/// 附近车辆
|
private var view_carNum = CarNumView.instance()
|
|
var officialCharterClouse:((TravelViewModel)->Void)?
|
|
lazy var label_desc: UILabel = {
|
let label = UILabel()
|
label.text = "在这里上车"
|
label.font = UIFont.systemFont(ofSize: 14, weight: .medium)
|
label.textColor = ThemeColor
|
return label
|
}()
|
|
/// 中心点
|
lazy var view_desc: UIView = {
|
let view = UIView()
|
view.backgroundColor = UIColor.white
|
view.cornerRadius = 10
|
view.addSubview(label_desc)
|
label_desc.snp.makeConstraints { (make) in
|
make.edges.equalToSuperview().inset(UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5))
|
}
|
return view
|
}()
|
|
/// 中心点
|
private let centerView: UIImageView = {
|
let image = UIImageView.init(image: UIImage.init(named: "zuobiao"))
|
return image
|
}()
|
|
/// 信息
|
let view_info = TripInfoView.instance()
|
|
/// 填写地址
|
private var cell_address: TripAddressCell {
|
let cell = UINib.init(nibName: "TripAddressCell", bundle: Bundle.main).instantiate(withOwner: self, options: nil).first as! TripAddressCell
|
cell.selectionStyle = .none
|
YYMapViewManager.share.orderType.accept(viewModel.orderType.value)
|
cell.setupView()
|
cell.bindRx()
|
|
|
//74067 【特惠购卡】需根据返回的状态,是否显示 购卡模块、 我的商家中心模块
|
buyCardHeight = showCar == true ? 42:0
|
cell.buyCardBtn.isHidden = !showCar
|
|
// 选择起点
|
cell.origin.delegate(on: self) { (self, _) in
|
if self.viewModel.orderType.value == .offical && self.viewModel.authStatus.value == false{
|
alert(popup: .single, title: "提示", text: "未通过企业认证", submitTitle: "确定", cancelTitle: "取消") {
|
|
} cancelClick: {
|
|
}
|
return
|
}
|
|
if self.viewModel.orderType.value == .special{
|
let vc = SearchAddressDragVC()
|
vc.orderType.accept(.special)
|
vc.origin.accept(true)
|
vc.complete.delegate(on: self) { (self, arge) in
|
let (model,_) = arge
|
cell.textField_startAddress.text = model.name
|
self.mapView.setCenter(CLLocationCoordinate2D.init(latitude: model.lat, longitude: model.lon), animated: true)
|
YYMapViewManager.share.searchInfo.accept(model)
|
YYMapViewManager.share.addressNameType.accept(.search)
|
|
}
|
self.yy_push(vc: vc);return
|
}
|
|
|
let vc = storyBoard(name: "Home", identifier: "SearchAddressVC") as! SearchAddressVC
|
vc.origin.accept(true)
|
vc.complete.delegate(on: self) { (self, arge) in
|
let (model,_) = arge
|
cell.textField_startAddress.text = model.name
|
self.mapView.setCenter(CLLocationCoordinate2D.init(latitude: model.lat, longitude: model.lon), animated: true)
|
YYMapViewManager.share.searchInfo.accept(model)
|
YYMapViewManager.share.addressNameType.accept(.search)
|
|
}
|
self.yy_push(vc: vc)
|
}
|
|
//计价规则
|
cell.valuationRule.delegate(on: self) { (self, type) in
|
guard self.viewModel.selectedCarType.value != nil else{return}
|
let vc = ValuationRuleVC()
|
vc.model = self.viewModel.selectedCarType.value
|
vc.type = type
|
self.yy_push(vc: vc)
|
}
|
|
cell.carType.delegate(on: self) { (self, model) in
|
self.viewModel.selectedCarType.accept(model)
|
}
|
|
// 选择终点
|
cell.destination.delegate(on: self) { (self, _) in
|
if self.viewModel.orderType.value == .offical && self.viewModel.authStatus.value == false{
|
alert(popup: .single, title: "提示", text: "未通过企业认证", submitTitle: "确定", cancelTitle: "取消") {
|
|
} cancelClick: {
|
|
}
|
return
|
}
|
|
if self.viewModel.orderType.value == .special{
|
let vc = SearchAddressDragVC()
|
vc.orderType.accept(.special)
|
vc.origin.accept(false)
|
vc.complete.delegate(on: self) { (self, arge) in
|
let (model,_) = arge
|
YYMapViewManager.share.carpoolingType.accept(.seating)
|
YYMapViewManager.share.addressNameType.accept(.normal)
|
YYMapViewManager.share.destination.accept(model)
|
}
|
self.yy_push(vc: vc);return
|
}
|
|
let vc = storyBoard(name: "Home", identifier: "SearchAddressVC") as! SearchAddressVC
|
vc.origin.accept(false)
|
vc.complete.delegate(on: self) { (self, arge) in
|
let (model,_) = arge
|
YYMapViewManager.share.addressNameType.accept(.normal)
|
YYMapViewManager.share.destination.accept(model)
|
}
|
self.yy_push(vc: vc)
|
}
|
|
// 选择人数
|
cell.appointment.delegate(on: self) { (self, _) in
|
if self.viewModel.orderType.value == .offical && self.viewModel.authStatus.value == false{
|
alert(popup: .single, title: "提示", text: "未通过企业认证", submitTitle: "确定", cancelTitle: "取消") {
|
|
} cancelClick: {
|
|
}
|
return
|
}
|
if self.viewModel.orderType.value == OrderType.special{
|
let num = YYMapViewManager.share.passengerNum.value
|
SpecialSealAffirmView.show(defaultNum: num, affirmClouse: { num in
|
YYMapViewManager.share.passengerNum.accept(num)
|
cell.onUserNumPressed.onNext(num)
|
|
//73975 [专车]人数为4人时未自动勾选独享
|
// cell.sitTogetherChooseBtn.isEnabled = num != 4
|
if num == 4{
|
YYMapViewManager.share.carpoolingType.accept(.exclusive)
|
cell.sitSingleChooseBtn.isSelected = true
|
cell.sitTogetherChooseBtn.isSelected = false
|
cell.onePriceChooseBtn.isSelected = false
|
}
|
cell.button_date.setTitle("\(num)人", for: .normal)
|
})
|
return
|
}
|
|
if self.viewModel.orderType.value == OrderType.offical{
|
if self.viewModel.authStatus.value == false{
|
alert(popup: .single, title: "提示", text: "未通过企业认证", submitTitle: "确定", cancelTitle: "取消") {
|
|
} cancelClick: {
|
|
}
|
return
|
}
|
|
let view = TaxiReservationView()
|
view.show(intervalMinute:20)
|
view.complete.delegate(on: self) { (self, timeStamp) in
|
if timeStamp == nil{
|
YYMapViewManager.share.timeStamp.accept(nil)
|
cell.button_date.setTitle("现在", for: .normal)
|
}else{
|
YYMapViewManager.share.timeStamp.accept(timeStamp)
|
cell.button_date.setTitle(timeStamp!.toFormat(format: "M月d日 HH:mm"), for: .normal)
|
}
|
}
|
}
|
}
|
|
// 时间
|
cell.passenger.delegate(on: self) { (self, _) in
|
|
//公务车出行事由
|
if self.viewModel.orderType.value == .offical{
|
if self.viewModel.authStatus.value == false{
|
alert(popup: .single, title: "提示", text: "未通过企业认证", submitTitle: "确定", cancelTitle: "取消") {
|
|
} cancelClick: {
|
|
}
|
return
|
}
|
|
let vc = ReasonforTravelVC()
|
vc.viewModel = self.viewModel
|
vc.view.backgroundColor = UIColor.black.withAlphaComponent(0)
|
vc.view.frame = CGRect(x: 0, y: screenH, width: ScreenWidth, height: ScreenHeight)
|
self.navigationController?.addChild(vc)
|
self.navigationController?.view.addSubview(vc.view)
|
|
UIView.animate(withDuration: 0.5) {
|
vc.view.frame = app.window?.frame ?? .zero
|
vc.view.backgroundColor = UIColor.black.withAlphaComponent(0.5)
|
} completion: { _ in
|
|
}
|
return
|
}
|
|
let view = TaxiReservationView()
|
view.show(intervalMinute:20)
|
view.complete.delegate(on: self) { (self, timeStamp) in
|
if timeStamp == nil{
|
YYMapViewManager.share.timeStamp.accept(nil)
|
cell.label_more.text = "现在"
|
cell.button_passenger.setTitle("现在", for: .normal)
|
}else{
|
YYMapViewManager.share.timeStamp.accept(timeStamp)
|
cell.label_more.text = timeStamp!.toFormat(format: "M月d日 HH:mm")
|
cell.button_passenger.setTitle(timeStamp!.toFormat(format: "M月d日 HH:mm"), for: .normal)
|
}
|
|
}
|
}
|
|
// 添加小费
|
cell.tip.delegate(on: self) { (self, _) in
|
//公务车计费方式
|
if self.viewModel.orderType.value == .offical{
|
|
if self.viewModel.orderType.value == .offical && self.viewModel.authStatus.value == false{
|
alert(popup: .single, title: "提示", text: "未通过企业认证", submitTitle: "确定", cancelTitle: "取消") {
|
|
} cancelClick: {
|
|
}
|
return
|
}
|
|
MineInfoView.instance(data: ["单程计费","包车计费"]).show { (row) in
|
if row == 0{
|
self.cell_address.button_tip.setTitle("单程计费", for: .normal)
|
YYMapViewManager.share.calType.accept(1)
|
}else{
|
self.officialCharterClouse?(self.viewModel)
|
YYMapViewManager.share.calType.accept(2)
|
}
|
}
|
return
|
}
|
|
let view = TipView.instance()
|
view.show()
|
view.complete.delegate(on: self) { (self, string) in
|
YYMapViewManager.share.tip.accept(string == "不添加" ? nil : string)
|
}
|
}
|
|
// 添加小费
|
cell.contact.delegate(on: self) { (self, _) in
|
|
if self.viewModel.orderType.value == .special{
|
|
if self.viewModel.orderType.value == .offical && self.viewModel.authStatus.value == false{
|
alert(popup: .single, title: "提示", text: "未通过企业认证", submitTitle: "确定", cancelTitle: "取消") {
|
|
} cancelClick: {
|
|
}
|
return
|
}
|
|
//乘车人信息
|
let vc = PassengerVC()
|
vc.orderType.accept(self.viewModel.orderType.value)
|
vc.complete.delegate(on: self) { (self, arge) in
|
let (phone,name) = arge
|
var model = PassengerModel()
|
model.name = name
|
model.phone = phone
|
YYMapViewManager.share.passenger.accept(model)
|
cell.label_more.text = model.name
|
cell.button_emergencyContact.setTitle(model.name, for: .normal)
|
}
|
self.yy_push(vc: vc)
|
return
|
}
|
|
|
let vc = MineContactVC.init(state: app.userInfo.emergencyContact == "" ? .add : .edit)
|
self.yy_push(vc: vc)
|
}
|
|
cell.submit.delegate(on: self) { (self, _) in
|
if self.isUserLogined(){
|
if app.userInfo.emergencyContact == ""{
|
alert(text: "请设置紧急联系人")
|
let vc = MineContactVC.init(state: .add)
|
self.yy_push(vc: vc)
|
return
|
}
|
if app.userInfo.phone == ""{
|
let vc = YYNavigationController.init(rootViewController: BindPhoneVC())
|
self.yy_present(vc: vc)
|
return
|
}
|
if self.viewModel.orderType.value == .taxi{
|
self.viewModel.taxiOrder()
|
}else if self.viewModel.orderType.value == .special{
|
if YYMapViewManager.share.passengerNum.value == 0{
|
SpecialSealAffirmView.show {[unowned self] num in
|
YYMapViewManager.share.passengerNum.accept(num)
|
self.viewModel.specialOrder()
|
}
|
}else{
|
self.viewModel.specialOrder()
|
}
|
}else if self.viewModel.orderType.value == .offical{
|
guard YYMapViewManager.share.timeStamp.value != nil else {alert(text: "请选择出行日期");return}
|
guard !(self.viewModel.trailReason.value?.isEmpty ?? true) else {alert(text: "请填写事由出行");return}
|
guard YYMapViewManager.share.calType.value != nil else {alert(text: "请选择计费方式");return}
|
self.viewModel.officalOrder()
|
}
|
}
|
}
|
//购卡
|
cell.buyCard.delegate(on: self) { (self, _) in
|
if self.isUserLogined(){
|
let vc = TravelCardShopVC()
|
if self.viewModel.orderType.value == .taxi{
|
vc.seletedIndex = 1
|
}else if self.viewModel.orderType.value == .special{
|
vc.seletedIndex = 0
|
}
|
self.yy_push(vc: vc)
|
}
|
}
|
|
return cell
|
}
|
|
/// viewModel
|
let viewModel = TravelViewModel()
|
|
/// 广告
|
let advertViewModel = HomeViewModel()
|
|
init(orderType: OrderType) {
|
super.init(nibName: nil, bundle: nil)
|
viewModel.orderType.accept(orderType)
|
|
if orderType == .offical{
|
YYMapViewManager.share.state.accept(.appointment)
|
}
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
override func loadView() {
|
super.loadView()
|
view.addSubview(view_desc)
|
view.addSubview(centerView)
|
view.addSubview(tableView)
|
view.addSubview(view_info)
|
view.addSubview(view_carNum)
|
|
view_carNum.snp.makeConstraints { (make) in
|
make.top.equalToSuperview().offset(40)
|
make.left.equalToSuperview().offset(12)
|
make.right.equalToSuperview().offset(-12)
|
make.height.equalTo(42)
|
}
|
centerView.snp.makeConstraints { (make) in
|
make.centerX.equalToSuperview()
|
make.centerY.equalToSuperview().offset(-13)
|
}
|
view_info.snp.makeConstraints { (make) in
|
make.left.right.equalToSuperview()
|
make.height.equalTo(infoViewHeight)
|
make.top.equalToSuperview().offset(OffsetY - infoViewHeight)
|
}
|
view_desc.snp.makeConstraints { (make) in
|
make.centerX.equalTo(centerView.snp.centerX)
|
make.bottom.equalTo(centerView.snp.top).offset(-15)
|
}
|
}
|
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
|
// Do any additional setup after loading the view.
|
viewModel.queryPhones()
|
viewModel.queryNotices()
|
advertViewModel.advertType.accept(2)
|
advertViewModel.getAdvertising()
|
cell_address.queryServerCarModel()
|
|
|
if viewModel.orderType.value == .offical{
|
APIManager.shared.provider.rx.request(.validPermission).mapThenValidate(AuthStatusModel.self).subscribe { restult in
|
switch restult{
|
case .success(let m):
|
self.viewModel.authStatus.accept(m?.permission ?? false)
|
case .failure(let error):
|
alert(text: error.localizedDescription)
|
}
|
} onError: { error in
|
alert(text: error.localizedDescription)
|
}.disposed(by: disposeBag)
|
}
|
}
|
|
//MARK: - viewWillAppear
|
override func viewWillAppear(_ animated: Bool) {
|
super.viewWillAppear(animated)
|
setupMapView()
|
viewModel.queryServingOrder()
|
}
|
|
//MARK: - UI
|
override func setupViews() {
|
super.setupViews()
|
view.backgroundColor = UIColor.color(light: UIColor.color(hexString: "#FFFFFF"), dark: UIColor.color(hexString: "#FFFFFF"))
|
tableView.separatorStyle = .none
|
tableView.backgroundColor = .clear
|
tableView.tableHeaderView = UIView()
|
tableView.tableFooterView = UIView()
|
tableView.contentInset.top = OffsetY
|
tableView.estimatedRowHeight = 0
|
tableView.estimatedSectionFooterHeight = 0
|
tableView.estimatedSectionHeaderHeight = 0
|
tableView.delegate = self
|
tableView.dataSource = self
|
tableView.showsVerticalScrollIndicator = false
|
tableView.delaysContentTouches = false
|
tableView.register(cellName: "AdvertCell", identifier: "item")
|
tableView.frame = CGRect(x: 0, y: 0, width: screenW, height: screenH - navH)
|
tableView.estimatedRowHeight = 0
|
|
}
|
|
/// 设置地图
|
func setupMapView() {
|
view.addSubview(mapView)
|
view.insertSubview(mapView, at: 0)
|
mapView.snp.makeConstraints { (make) in
|
make.edges.equalToSuperview()
|
}
|
YYMapViewManager.share.animation.delegate(on: self) { (self, _) in
|
DispatchQueue.main.async {
|
self.label_desc.text = "在这里上车"
|
self.centerView.popJumpAnimation()
|
}
|
}
|
|
|
YYMapViewManager.share.mapWillMoveByUser.delegate(on: self) { (self, _) in
|
DispatchQueue.main.async {
|
self.label_desc.text = "拖到路边,接驾更快"
|
}
|
}
|
}
|
|
//MARK: - Layouts
|
override func defineLayouts() {
|
super.defineLayouts()
|
|
}
|
|
deinit {
|
NotificationCenter.default.removeObserver(self)
|
}
|
|
//MARK: - Rx
|
override func bindRx() {
|
super.bindRx()
|
|
|
|
advertViewModel.requestSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self] (status) in
|
switch status {
|
case .loading: break
|
case .success(_):
|
self.tableView.reloadData()
|
break
|
case .error(let error):
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
viewModel.taxiOrderSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self] (status) in
|
switch status {
|
case .loading:
|
self.show()
|
break
|
case .success(_):
|
self.hide()
|
YYMapViewManager.share.clearData()
|
// 收起
|
NotificationCenter.default.post(Notification.init(name: Notification.Name(rawValue: YYTableViewReset)))
|
switch self.viewModel.orderType.value {
|
case .taxi:
|
let vc = TravelServiceVC.init(orderId: self.viewModel.orderId.value, orderType: self.viewModel.orderType.value)
|
self.yy_push(vc: vc)
|
case .special:
|
|
var isCarpool:Bool = false
|
if YYMapViewManager.share.carpoolingType.value == .seating{
|
isCarpool = true
|
}
|
let vc = YYSpecialCarViewController.init(orderId: self.viewModel.orderId.value,isCarpool: isCarpool)
|
self.yy_push(vc: vc)
|
break
|
case .travel:
|
let vc = YYSpecialCarViewController.init(orderId: self.viewModel.orderId.value)
|
self.yy_push(vc: vc)
|
break
|
case .offical:
|
let vc = TravelServiceVC.init(orderId: self.viewModel.orderId.value, orderType: self.viewModel.orderType.value)
|
self.yy_push(vc: vc)
|
default:break
|
}
|
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
viewModel.notice.subscribe(onNext: { (data) in
|
self.view_info.dataSource.accept(data)
|
self.view_info.noticeView.reloadDataAndStartRoll()
|
}).disposed(by: disposeBag)
|
|
viewModel.number.bind(to: view_carNum.label_content.rx.text).disposed(by: disposeBag)
|
|
view_carNum.didPressTrip.delegate(on: self) { (_, _) in
|
switch self.viewModel.orderType.value{
|
case .taxi:
|
// 订单流程界面
|
let vc = TravelServiceVC.init(orderId: self.viewModel.currentOrderId.value, orderType: self.viewModel.orderType.value)
|
self.yy_push(vc: vc)
|
case .special:
|
var isCarpool:Bool = false
|
if self.viewModel.rideType.value == .seating{
|
isCarpool = true
|
}
|
|
let vc = YYSpecialCarViewController.init(orderId: self.viewModel.currentOrderId.value,isCarpool: isCarpool)
|
self.yy_push(vc: vc)
|
case .offical:
|
break
|
case .travel:
|
break
|
default:break
|
}
|
|
}
|
|
|
YYMapViewManager.share.callState
|
.observeOn(MainScheduler.instance)
|
.subscribe(onNext: {[unowned self] (s) in
|
self.centerView.isHidden = s == .called
|
self.view_desc.isHidden = self.centerView.isHidden
|
self.cellHeight = s == .called ? 258 : 168
|
if self.tableView.contentOffset.y <= 0{
|
if s == .called{
|
if viewModel.orderType.value == .special{
|
self.cellHeight = 153 + 258
|
}
|
self.offset = 0
|
}else{
|
self.offset = 0
|
}
|
|
if viewModel.orderType.value == .offical{
|
self.cellHeight = 280
|
}
|
|
|
self.tableView.contentInset.top = self.OffsetY
|
self.tableView.reloadSections(IndexSet.init(integer: 0), with: .automatic)
|
self.tableView.layoutIfNeeded()
|
self.tableView.layoutSubviews()
|
}
|
}).disposed(by: disposeBag)
|
|
view_info.complete.delegate(on: self) { (self, row) in
|
switch row{
|
case 1:
|
YYMapViewManager.share.position()
|
break
|
case 2:
|
call(number: self.viewModel.policeNumber.value)
|
break
|
case 3:
|
call(number: self.viewModel.complaintsNumber.value)
|
break
|
default:
|
break
|
}
|
}
|
|
NotificationCenter.default.rx.notification(Notification.Name(rawValue: YYTableViewContentOffset), object: nil).subscribe(onNext: {[unowned self] (n) in
|
guard let offset = n.object as? CGPoint else{return}
|
if offset.y >= -(82 + self.infoViewHeight){
|
if self.view_carNum.frame.origin.y == 40{
|
UIView.animate(withDuration: 0.2) {
|
self.view_carNum.transform = CGAffineTransform.init(translationX: 0, y: -82)
|
}
|
}
|
}else{
|
if self.view_carNum.frame.origin.y < 40 + self.infoViewHeight{
|
UIView.animate(withDuration: 0.2) {
|
self.view_carNum.transform = CGAffineTransform.identity
|
}
|
}
|
}
|
}).disposed(by: disposeBag)
|
|
NotificationCenter.default.rx.notification(Notification.Name(rawValue: YYTableViewReset), object: nil).subscribe(onNext: {[unowned self] (_) in
|
UIView.animate(withDuration: 0.4) {
|
DispatchQueue.main.async {
|
self.tableView.contentInset.top = self.OffsetY
|
self.tableView.backgroundColor = UIColor.clear
|
self.tableView.scrollToRow(at: IndexPath.init(row: 0, section: 0), at: .bottom, animated: false)
|
self.view_info.snp.remakeConstraints { (make) in
|
make.left.right.equalToSuperview()
|
make.height.equalTo(self.infoViewHeight)
|
make.top.equalToSuperview().offset(self.OffsetY - self.infoViewHeight)
|
}
|
}
|
}
|
}).disposed(by: disposeBag)
|
}
|
|
|
|
/// 正在拖动
|
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
if scrollView.contentOffset.y < -OffsetY{
|
scrollView.contentOffset.y = -OffsetY
|
}
|
if YYMapViewManager.share.callState.value == .called {
|
if scrollView.contentOffset.y > -OffsetY{
|
scrollView.contentOffset.y = -OffsetY
|
}
|
}else{
|
if advertViewModel.bottomAdvert.value.count == 0{
|
if scrollView.contentOffset.y > -OffsetY{
|
scrollView.contentOffset.y = -OffsetY
|
}
|
}
|
}
|
NotificationCenter.default.post(name: NSNotification.Name.init(rawValue: YYTableViewContentOffset), object: scrollView.contentOffset)
|
|
view_info.snp.remakeConstraints { (make) in
|
make.left.right.equalTo(self.view)
|
make.height.equalTo(infoViewHeight)
|
let y = scrollView.contentOffset.y < 0 ? abs(scrollView.contentOffset.y) - infoViewHeight : -(scrollView.contentOffset.y + infoViewHeight)
|
make.top.equalTo(self.view).offset(y)
|
}
|
}
|
|
/// 开始滑动前
|
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
beforeOffsetY = scrollView.contentOffset.y
|
}
|
|
/// 拖动结束结束
|
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
|
if !decelerate{
|
fixPosition(scrollView: scrollView)
|
}
|
|
}
|
|
/// 惯性滑动结束
|
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
|
fixPosition(scrollView: scrollView)
|
}
|
|
|
|
/// 修正位置
|
/// - Parameter scrollView: UIScrollView
|
func fixPosition(scrollView: UIScrollView) {
|
let y = scrollView.contentOffset.y
|
// 判断向上还是向下
|
if beforeOffsetY < y{
|
// 向上 判断区域
|
if y <= 0 && y >= -OffsetY || y >= 0 && y <= cellHeight{
|
DispatchQueue.main.async {
|
self.tableView.backgroundColor = UIColor.white
|
UIView.animate(withDuration: 0.4) {
|
self.tableView.contentInset.top = 0
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
|
self.tableView.setContentOffset(CGPoint(x: 0, y: self.cellHeight), animated: true)
|
}
|
|
}
|
}
|
}
|
}else{
|
// 向下
|
if y >= 0 && y <= cellHeight || y < -cellHeight{
|
DispatchQueue.main.async {
|
self.tableView.backgroundColor = UIColor.clear
|
UIView.animate(withDuration: 0.4) {
|
self.tableView.contentInset.top = self.OffsetY
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
|
self.tableView.scrollToRow(at: IndexPath.init(row: 0, section: 0), at: .bottom, animated: true)
|
}
|
}
|
}
|
}
|
}
|
NotificationCenter.default.post(name: NSNotification.Name.init(rawValue: YYTableViewContentOffset), object: scrollView.contentOffset)
|
}
|
}
|
|
|
// MARK: - UITableViewDelegate
|
extension TravelVC:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
if indexPath.section == 0{
|
return cellHeight + buyCardHeight
|
}else{
|
return 117
|
}
|
|
}
|
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
guard advertViewModel.bottomAdvert.value.count > 0 else{return}
|
let data = advertViewModel.bottomAdvert.value[indexPath.row]
|
guard indexPath.section > 0,data.isJump == 1 else {return}
|
self.tableView.contentInset.top = self.OffsetY
|
self.tableView.backgroundColor = UIColor.clear
|
self.tableView.scrollToRow(at: IndexPath.init(row: 0, section: 0), at: .bottom, animated: false)
|
if data.isJump == 1{
|
switch data.jumpType {
|
case 1:// 外部
|
openURL(url: data.jumpUrl)
|
break
|
case 2:// 内部
|
let vc = YYWebView()
|
vc.name = data.name
|
vc.url = data.content
|
UIViewController.base()?.navigationController?.pushViewController(vc)
|
break
|
default:
|
break
|
}
|
}
|
}
|
}
|
|
// MARK: - UITableViewDelegate
|
extension TravelVC:UITableViewDataSource{
|
func numberOfSections(in tableView: UITableView) -> Int {
|
return 2
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return section == 0 ? 1 : advertViewModel.bottomAdvert.value.count
|
}
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
if indexPath.section == 0{
|
return cell_address
|
}else{
|
let cell = tableView.dequeueReusableCell(withIdentifier: "item", for: indexPath) as! AdvertCell
|
cell.selectionStyle = .none
|
cell.image_cover.load(url: advertViewModel.bottomAdvert.value[indexPath.row].imgUrl)
|
return cell
|
}
|
}
|
}
|