younger_times
2023-07-12 5a590aaf3fd9ed5f9cfd2d54e72c904ce4918e7f
WanPai/Root/Home/VC/HomeVC.swift
@@ -8,13 +8,22 @@
import UIKit
import JQTools
import RxSwift
import RxCocoa
import SDWebImage
    //http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
    //http://vjs.zencdn.net/v/oceans.mp4
    //https://media.w3.org/2010/05/sintel/trailer.mp4
class HomeVC: BaseVC,Refreshable{
class HomeViewModel:RefreshModel<HomeStoreConfigModel>{
    let storeId = BehaviorRelay<Int>(value: 0)
    override func api() -> (Observable<BaseResponse<[HomeStoreConfigModel]>>)? {
        return Services.homeStoreConfig(storeId: 1)
    }
}
class HomeVC: BaseVC{
    @IBOutlet weak var collectionView: BaseCollectionView!
    @IBOutlet weak var label_vipInfo: UILabel!
@@ -22,9 +31,11 @@
    @IBOutlet weak var label_store: UILabel!
    private var items = Array<HomeStoreConfigModel>()
    private var storeModel:HomeStoreModel?
    var viewModel = HomeViewModel()
    override func viewDidLoad() {
        super.viewDidLoad()
        viewModel.configure(collectionView,needMore: false)
        locationTool.startLocation { [weak self] local in
            locationTool.stopLocation()
@@ -35,20 +46,17 @@
            self?.getStoreInfo()
        }
        refreshStatusBind(to: collectionView,header: { [weak self] () in
            guard let weakSelf = self,weakSelf.storeModel != nil else {
                self?.refreshStatus.onNext(.endHeaderRefresh);return
            }
            Services.homeStoreConfig(storeId: weakSelf.storeModel!.storeId).subscribe(onNext: {data in
                if let models = data.data{
                    self?.items = models
        viewModel.dataSource.subscribe(onNext: {[weak self] data in
            guard let weakSelf = self else { return }
            guard data.count != 0 else {return}
            weakSelf.items = data
                    let group = DispatchGroup()
                    for m in models{
            for m in weakSelf.items{
                        let queue = DispatchQueue(label: "1")
                        queue.async(group: group) {
                            group.enter()
                            SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage)) { image, data, error, status in
                    SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage),options: .scaleDownLargeImages,progress: nil) { image, data, error, status in
                                if let i = image{
                                    m.radio = i.size.width / i.size.height
                                }
@@ -58,12 +66,20 @@
                    }
                    group.notify(queue: .main){
                        self?.refreshStatus.onNext(.endHeaderRefresh)
                        self?.collectionView.reloadData()
                //重置Layout,不然不更新
                self!.layout = WaterFallFlowLayout()
                self!.layout.cols = 2
                self!.layout.sectionInset = UIEdgeInsets(top: 14, left: 34, bottom: 14, right: 34)
                self!.layout.delegate = self
                self!.collectionView.collectionViewLayout = self!.layout
                self!.collectionView.reloadData()
                    }
        }).disposed(by: disposeBag)
                }
            }).disposed(by: weakSelf.disposeBag)
        })
    override func setRx() {
    }
    
    override func setUI() {
@@ -90,8 +106,8 @@
                self?.label_vipInfo.text = text
                if m.storeId != 0{
                    self?.storeModel = m
                    self?.refreshStatus.onNext(.beingHeaderRefresh)
                    self?.viewModel.storeId.accept(m.storeId)
                    self?.viewModel.beginRefresh()
                }else{
                    self?.defaultData()
                }