jsdw_ios/QuickLocation/Section/Launch/LaunchViewController.swift

251 lines
8.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// LaunchViewController.swift
// SHECommunity
//
// Created by Lin on 2025/1/3.
//
import UIKit
import RxSwift
import SwiftyUserDefaults
import RxCocoa
class LaunchViewController: BaseViewController {
private let guideImgList: [String] = [
"guide_1",
"guide_2",
"guide_3",
"guide_4",
"guide_5"
]
private let showVersion = 1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.backgroundColor = UIColor(hexStr: "#E0F2FF")
setupLayout()
experienceBtn.rx.tap.subscribe(onNext: { _ in
// Defaults[\.guideShowVersion] = self.showVersion
AppDelegate.shared.showMainViewController()
}).disposed(by: disposeBag)
getUserConfig()
navigateAfterDelay()
}
private func navigateAfterDelay() {
Observable.just(())
.delay(.milliseconds(2500), scheduler: MainScheduler.instance)
.subscribe(onNext: { [weak self] in
self?.navigateToNext()
})
.disposed(by: disposeBag)
}
private func navigateToNext() {
let hasShownGuide = UserDefaults.standard.bool(forKey: "hasShownGuide")
if hasShownGuide {
let loginVC = LoginViewController()
UIView.transition(with: view.window!, duration: 0.4, options: .transitionCrossDissolve) {
self.view.window?.rootViewController = UINavigationController(rootViewController: loginVC)
}
} else {
collectionView.isHidden = false
pageControl.isHidden = false
experienceBtn.isHidden = false
}
}
///
func getUserConfig() {
SystemService.userConfig().subscribe(onNext: { response in
self.getUserIMToken()
guard let model = response.model else { return }
AppContextManager.shared.systemConfig = model.config
//
AppContextManager.shared.saveAccount(model)
}, onError: { [weak self] (error) in
DLAlert.show(title: error.localizedDescription,
defaultTitle: "重试") { [weak self] in
guard let this = self else { return }
this.getUserConfig()
}
}).disposed(by: disposeBag)
}
/// IM Token
func getUserIMToken() {
UserService.imToken().subscribe(onNext: { response in
guard let data = response.data, let token = data["token"] as? String else { return }
AppContextManager.shared.imToken = token
// SDK
GroupIMService.shared.initSDK()
}).disposed(by: disposeBag)
}
// MARK: - Init
init() {
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
lazy var launchLogoView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Launch/logo")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
lazy var tipsImgView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Launch/slogan")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
///
lazy var collectionView: UICollectionView = {
let viewFlowLayout = UICollectionViewFlowLayout()
viewFlowLayout.scrollDirection = .horizontal
viewFlowLayout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
viewFlowLayout.minimumLineSpacing = 0
viewFlowLayout.minimumInteritemSpacing = 0
viewFlowLayout.itemSize = CGSizeMake(kScreenWidth, kScreenHeight)
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: viewFlowLayout)
collectionView.backgroundColor = .white
collectionView.dataSource = self
collectionView.delegate = self
collectionView.showsVerticalScrollIndicator = false
collectionView.showsHorizontalScrollIndicator = false
collectionView.isPagingEnabled = true
collectionView.bounces = false
collectionView.register(GuideCell.self)
collectionView.isHidden = true
return collectionView
}()
lazy var experienceBtn: UIButton = {
let btn = UIButton(type: .custom)
btn.setTitle("立即体验", for: .normal)
btn.setTitleColor(UIColor(hexStr: "#0F2846"), for: .normal)
btn.titleLabel?.font = .systemFont(ofSize: 16, weight: .medium)
btn.setBackgroundImage(UIImage(named: "Guide/experience"), for: .normal)
btn.isHidden = true
return btn
}()
lazy var pageControl: JJPageControl = {
let pageControl = JJPageControl(frame: CGRectMake(0, 0, kScreenWidth, 10))
pageControl.currentColor = ThemeManager.shared.color.mainColor
pageControl.currentPointSize = CGSize(width: 20, height: 6)
pageControl.otherColor = ThemeManager.shared.color.mainColor.withAlphaComponent(0.5)
pageControl.otherPointSize = CGSize(width: 6, height: 6)
pageControl.pointCornerRadius = 3
pageControl.controlSpacing = 18
pageControl.pageAliment = .Center
pageControl.backgroundColor = .clear
pageControl.numberOfPages = guideImgList.count
pageControl.isHidden = true
return pageControl
}()
}
extension LaunchViewController {
private func setupLayout() {
view.addSubview(launchLogoView)
view.addSubview(tipsImgView)
view.addSubview(collectionView)
view.addSubview(experienceBtn)
view.addSubview(pageControl)
launchLogoView.layoutChain
.centerX()
.centerY()
tipsImgView.layoutChain
.centerX()
.bottom(kSafeBottomMargin + 50)
collectionView.layoutChain.edges()
experienceBtn.layoutChain
.bottom(kSafeBottomMargin + 23)
.width(245)
.height(50)
.centerX()
pageControl.layoutChain
.bottomToTopOfView(experienceBtn, offset: -25)
.edgesHorzontal(10)
.centerX()
.height(10)
}
}
// MARK: - UICollectionViewDataSource
extension LaunchViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
guideImgList.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell: GuideCell = collectionView.dequeueReusableCell(for: indexPath)
cell.configure(imageName: guideImgList[indexPath.row])
return cell
}
}
// MARK: - UICollectionViewDelegate
extension LaunchViewController: UICollectionViewDelegate {
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView == collectionView {
let page = Int(scrollView.contentOffset.x / scrollView.dl.width)
pageControl.currentPage = page
}
}
}
class GuideCell: UICollectionViewCell {
func configure(imageName: String) {
imgView.image = UIImage(named: "Guide/" + imageName)
}
private func setupSubViews() {
addSubview(imgView)
setupLayout()
}
private func setupLayout() {
imgView.layoutChain.edges()
}
lazy var imgView: UIImageView = {
let icon = UIImageView()
icon.contentMode = .scaleAspectFill
return icon
}()
override init(frame: CGRect) {
super.init(frame: frame)
contentView.backgroundColor = .clear
setupSubViews()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}