145 lines
4.1 KiB
Swift
145 lines
4.1 KiB
Swift
//
|
|
// SPExplorePageController.swift
|
|
// Thimra
|
|
//
|
|
// Created by Overseas on 2025/4/21.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
|
|
class SPExplorePageController: SPViewController {
|
|
|
|
private lazy var titles: [String] = {
|
|
let arr = ["Shorts".localized, "All".localized]
|
|
return arr
|
|
}()
|
|
|
|
private lazy var viewControllers: [SPViewController] = {
|
|
let vc1 = SPExploreViewController()
|
|
let vc2 = SPAllShortViewController()
|
|
return [vc1, vc2]
|
|
}()
|
|
|
|
private lazy var itemWidthArr: [NSNumber] = {
|
|
var arr: [NSNumber] = []
|
|
self.titles.forEach {
|
|
var width = $0.size(font: .systemFont(ofSize: 14)).width + 16
|
|
if width < 50 {
|
|
width = 50
|
|
}
|
|
arr.append(NSNumber(value: width))
|
|
}
|
|
return arr
|
|
}()
|
|
|
|
private lazy var menuWidth: CGFloat = {
|
|
var width: CGFloat = 0.0
|
|
itemWidthArr.forEach {
|
|
width += CGFloat($0.floatValue)
|
|
}
|
|
return width
|
|
}()
|
|
|
|
|
|
private lazy var pageView: WMPageController = {
|
|
var itemWidthArr: [NSNumber] = []
|
|
|
|
self.titles.forEach {
|
|
var width = $0.size(font: .systemFont(ofSize: 14)).width + 16
|
|
if width < 50 {
|
|
width = 50
|
|
}
|
|
itemWidthArr.append(NSNumber(value: width))
|
|
}
|
|
|
|
let pageView = WMPageController()
|
|
pageView.delegate = self
|
|
pageView.dataSource = self
|
|
pageView.titleSizeNormal = 14
|
|
pageView.titleSizeSelected = 14
|
|
pageView.titleColorNormal = .colorFFFFFF()
|
|
pageView.titleColorSelected = .colorFFFFFF()
|
|
pageView.progressColor = .colorFFFFFF(alpha: 0.22)
|
|
pageView.menuViewStyle = .flood
|
|
pageView.menuViewLayoutMode = .center
|
|
pageView.itemsWidths = itemWidthArr
|
|
pageView.progressHeight = 24
|
|
|
|
return pageView
|
|
}()
|
|
|
|
private lazy var menuBgView: UIView = {
|
|
let view = UIView()
|
|
view.addEffectView(style: .light)
|
|
view.layer.cornerRadius = 15
|
|
view.layer.masksToBounds = true
|
|
return view
|
|
}()
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
|
|
_setupUI()
|
|
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
self.navigationController?.setNavigationBarHidden(true, animated: true)
|
|
}
|
|
|
|
}
|
|
|
|
extension SPExplorePageController {
|
|
|
|
private func _setupUI() {
|
|
addChild(pageView)
|
|
|
|
self.view.addSubview(self.pageView.view)
|
|
self.pageView.view.addSubview(menuBgView)
|
|
self.pageView.view.bringSubviewToFront(self.pageView.menuView!)
|
|
|
|
self.pageView.view.snp.makeConstraints { make in
|
|
make.edges.equalToSuperview()
|
|
}
|
|
|
|
menuBgView.snp.makeConstraints { make in
|
|
make.center.equalTo(self.pageView.menuView!)
|
|
make.width.equalTo(menuWidth + 8)
|
|
make.height.equalTo(30)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//MARK: -------------- WMPageControllerDelegate & WMPageControllerDataSource --------------
|
|
extension SPExplorePageController: WMPageControllerDelegate, WMPageControllerDataSource {
|
|
|
|
func pageController(_ pageController: WMPageController, preferredFrameForContentView contentView: WMScrollView) -> CGRect {
|
|
return CGRect(x: 0, y: 0, width: kSPScreenWidth, height: kSPScreenHeight - kSPTabBarHeight)
|
|
}
|
|
|
|
func pageController(_ pageController: WMPageController, preferredFrameFor menuView: WMMenuView) -> CGRect {
|
|
return CGRect(x: 0, y: kSPStatusbarHeight + 10, width: kSPScreenWidth, height: 30)
|
|
}
|
|
|
|
func pageController(_ pageController: WMPageController, titleAt index: Int) -> String {
|
|
return titles[index]
|
|
}
|
|
|
|
func numbersOfChildControllers(in pageController: WMPageController) -> Int {
|
|
return titles.count
|
|
}
|
|
|
|
func pageController(_ pageController: WMPageController, viewControllerAt index: Int) -> UIViewController {
|
|
return viewControllers[index]
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|