Commit 06999bdc authored by taorui's avatar taorui

feat: 数据页面代码提交

parent 3f24c198
{
"images" : [
{
"filename" : "sp-progress-Check.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "sp-progress-Check@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "sp-progress-Check@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "sp-progress-Lfire.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "sp-progress-Lfire@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "sp-progress-Lfire@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"filename" : "sp-progress-Mfire.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "sp-progress-Mfire@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "sp-progress-Mfire@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
...@@ -46,9 +46,17 @@ class SpeakEleTabbarViewCtr: UIViewController { ...@@ -46,9 +46,17 @@ class SpeakEleTabbarViewCtr: UIViewController {
self.addChild(setvc) self.addChild(setvc)
contentStack.addArrangedSubview(setvc.view) contentStack.addArrangedSubview(setvc.view)
let pro = TabbarButton(title: "Progress", normalImage: nil, selectImage: nil)
let provc = SpeakEleProgressViewCtr()
self.addChild(provc)
contentStack.addArrangedSubview(provc.view)
tabBarItems = [ tabBarItems = [
home, home,
set set,
pro
] ]
for (i,btn) in tabBarItems.enumerated() { for (i,btn) in tabBarItems.enumerated() {
btn.tag = i btn.tag = i
......
//
// SpeakEleProgressViewCtr.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/15.
//
import UIKit
class SpeakEleProgressViewCtr: SpeakEleBaseViewCtr {
lazy var tableView: UITableView = {
let tV = UITableView()
tV.tableHeaderView = headerV
tV.backgroundColor = .clear
tV.separatorStyle = .none
tV.showsVerticalScrollIndicator = false
tV.register(SpeakEleDailyCell.self, forCellReuseIdentifier: SpeakEleDailyCell.className())
tV.register(SpeakEleChooseCell.self, forCellReuseIdentifier: SpeakEleChooseCell.className())
tV.register(SpeakEleLtimeCell.self, forCellReuseIdentifier: SpeakEleLtimeCell.className())
tV.register(SpeakEleReviewCell.self, forCellReuseIdentifier: SpeakEleReviewCell.className())
tV.register(SpeakEleOtherCell.self, forCellReuseIdentifier: SpeakEleOtherCell.className())
tV.delegate = self
tV.dataSource = self
return tV
}()
let headerV = SpeakEleProgressHeaderView(frame: CGRect(x: 0, y: 0, width: Dev.screenW, height: 40))
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.init(with: "#F6F7F9")
makeUI()
}
func makeUI() {
self.view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.equalTo(statusBarHeight + 20)
make.left.right.equalTo(0)
make.bottom.equalTo(-tabbarHeight)
}
}
}
extension SpeakEleProgressViewCtr: UITableViewDelegate,UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: SpeakEleDailyCell.className(), for: indexPath) as! SpeakEleDailyCell
return cell
} else if indexPath.row == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: SpeakEleChooseCell.className(), for: indexPath) as! SpeakEleChooseCell
return cell
}
let cell = tableView.dequeueReusableCell(withIdentifier: SpeakEleChooseCell.className(), for: indexPath) as! SpeakEleChooseCell
return cell
}
}
//
// SpeakEleChooseCell.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakEleChooseCell: UITableViewCell {
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.backgroundColor = .clear
self.backgroundColor = .clear
// 创建UI方法
creatUI()
// bindViewModel()
}
// 这个方法也是必须要实现的,和重写初始化方法在一起实现。
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func creatUI() {
}
}
//
// SpeakEleDailyCell.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakEleDailyCell: UITableViewCell {
lazy var backView: UIView = {
let bView = UIView()
bView.backgroundColor = .white
bView.isUserInteractionEnabled = true
return bView
}()
lazy var imgView: UIImageView = {
let bView = UIImageView()
bView.image = UIImage(named: "sp-progress-Lfire")
return bView
}()
lazy var titleLabel: UILabel = {
let label = UILabel()
label.textColor = .black
label.font = UIFont.montserrat(.bold ,size: 20)
label.text = "Cumulative Streak:5"
return label
}()
lazy var line: UIView = {
let lineView = UIView()
lineView.backgroundColor = UIColor.init(with: "#000000", alpha: 0.12)
return lineView
}()
lazy var subTitleLabel: UILabel = {
let label = UILabel()
label.textColor = .black
label.font = UIFont.montserrat(.bold ,size: 20)
label.text = "Daily learning"
return label
}()
lazy var tipLabel: UILabel = {
let label = UILabel()
label.textColor = UIColor.init(with: "#000000", alpha: 0.54)
label.font = UIFont.montserrat(.bold ,size: 14)
label.text = "Maste more know edge every day"
return label
}()
lazy var scView: SpeakElePCView = {
let layout = UICollectionViewFlowLayout()
let collectionView = SpeakElePCView(frame: CGRect.zero, collectionViewLayout: layout)
layout.scrollDirection = .horizontal
collectionView.backgroundColor = .clear
return collectionView
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.backgroundColor = .clear
self.backgroundColor = .clear
// 创建UI方法
creatUI()
// bindViewModel()
}
// 这个方法也是必须要实现的,和重写初始化方法在一起实现。
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func creatUI() {
self.contentView.addSubview(backView)
backView.addSubview(imgView)
backView.addSubview(titleLabel)
backView.addSubview(line)
backView.addSubview(subTitleLabel)
backView.addSubview(tipLabel)
backView.addSubview(scView)
backView.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(18)
make.bottom.equalTo(-24)
make.height.equalTo(268)
}
backView.corners = 16
imgView.snp.makeConstraints { make in
make.width.height.equalTo(32)
make.left.equalTo(24)
make.top.equalTo(16)
}
titleLabel.snp.makeConstraints { make in
make.height.equalTo(28)
make.left.equalTo(imgView.snp.right).offset(8)
make.centerY.equalTo(imgView)
}
line.snp.makeConstraints { make in
make.height.equalTo(0.6)
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(titleLabel.snp.bottom).offset(18)
}
subTitleLabel.snp.makeConstraints { make in
make.height.equalTo(28)
make.left.equalTo(imgView.snp.left)
make.right.equalTo(-24)
make.top.equalTo(line.snp.bottom).offset(16)
}
tipLabel.snp.makeConstraints { make in
make.height.equalTo(20)
make.left.equalTo(imgView.snp.left)
make.right.equalTo(-24)
make.top.equalTo(subTitleLabel.snp.bottom).offset(16)
}
scView.snp.makeConstraints { make in
make.height.equalTo(100)
make.left.equalTo(imgView.snp.left)
make.right.equalTo(-24)
make.top.equalTo(tipLabel.snp.bottom).offset(14)
}
}
}
//
// SpeakEleLtimeCell.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakEleLtimeCell: UITableViewCell {
lazy var backView: UIView = {
let bView = UIView()
bView.backgroundColor = .white
bView.isUserInteractionEnabled = true
return bView
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.backgroundColor = .clear
self.backgroundColor = .clear
// 创建UI方法
creatUI()
// bindViewModel()
}
// 这个方法也是必须要实现的,和重写初始化方法在一起实现。
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func creatUI() {
self.contentView.addSubview(backView)
backView.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(18)
make.bottom.equalTo(-24)
make.height.equalTo(323)
}
backView.corners = 16
}
}
//
// SpeakEleOtherCell.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakEleOtherCell: UITableViewCell {
lazy var backView: UIView = {
let bView = UIView()
bView.backgroundColor = .white
bView.isUserInteractionEnabled = true
return bView
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.backgroundColor = .clear
self.backgroundColor = .clear
// 创建UI方法
creatUI()
// bindViewModel()
}
// 这个方法也是必须要实现的,和重写初始化方法在一起实现。
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func creatUI() {
self.contentView.addSubview(backView)
backView.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(18)
make.bottom.equalTo(-24)
make.height.equalTo(288)
}
backView.corners = 16
}
}
//
// SpeakElePCCollectionViewCell.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakElePCCollectionViewCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
lazy var backView: UIView = {
let bView = UIView()
bView.backgroundColor = UIColor.init(with: "#000000", alpha: 0.08)
bView.isUserInteractionEnabled = true
self.contentView.addSubview(bView)
return bView
}()
private lazy var iconImageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = UIColor.clear
imageView.contentMode = .scaleAspectFit
// imageView.isUserInteractionEnabled = false
self.contentView.addSubview(imageView)
return imageView
}()
private lazy var titleLabel:UILabel = {
let label = UILabel()
label.textColor = .white
label.font = UIFont(name: "Microsoft YaHei", size:10)
self.contentView.addSubview(label)
return label
}()
}
extension SpeakElePCCollectionViewCell {
func setupUI() {
backView.snp.remakeConstraints { (make) in
make.left.equalTo(0)
make.right.equalTo(0)
make.top.equalTo(0)
make.bottom.equalTo(0)
}
backView.corners = 8
iconImageView.snp.remakeConstraints { (make) in
make.centerY.equalToSuperview().offset(-10)
make.centerX.equalToSuperview()
make.width.height.equalTo(18)
// make.height.equalTo(FITSCALE(num: 19))
}
titleLabel.snp.remakeConstraints { (make) in
// make.bottom.equalTo(-20)
make.top.equalTo(iconImageView.snp.bottom).offset(5)
make.centerX.equalToSuperview()
// make.height.equalTo(FITSCALE(num: 19))
}
}
func setImage(_ imgName:String) {
iconImageView.image = UIImage(named: imgName)
}
func setTitle(_ title:String) {
titleLabel.text = title
}
}
//
// SpeakElePCView.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakElePCView: UICollectionView,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
7
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: SpeakElePCCollectionViewCell.className() , for: indexPath) as! SpeakElePCCollectionViewCell
cell.setImage("sp-progress-Check")
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 60, height: 80)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 12, bottom: 0, right: 12)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 5
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
public override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
// layout.scrollDirection = .horizontal
self.backgroundColor = .clear
self.showsVerticalScrollIndicator = false
self.showsHorizontalScrollIndicator = false
self.scrollsToTop = false
self.dataSource = self
self.delegate = self
self.register(SpeakElePCCollectionViewCell.self, forCellWithReuseIdentifier: SpeakElePCCollectionViewCell.className())
}
deinit {
self.dataSource = nil
self.delegate = nil
}
}
//
// SpeakEleProgressHeaderView.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakEleProgressHeaderView: UIView {
lazy var titleLabel: UILabel = {
let label = UILabel()
label.textColor = .black
label.font = UIFont.montserrat(.bold ,size: 28)
label.text = "Progress"
return label
}()
lazy var signBtn: UIButton = {
let back = UIButton(type: .custom)
back.setImage(UIImage(named: "sp-progress-Mfire"), for: .normal)
back.titleLabel?.font = UIFont.montserrat(.medium ,size: 14)
back.setTitle("3", for: .normal)
back.setTitleColor(UIColor.init(with: "#FFB200"), for: .normal)
return back
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .clear
setupUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupUI() {
addSubview(titleLabel)
addSubview(signBtn)
titleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(24)
make.top.equalTo(0)
}
signBtn.snp.makeConstraints { make in
make.height.equalTo(32)
make.right.equalTo(-24)
make.width.equalTo(55)
make.centerY.equalTo(titleLabel)
}
}
}
//
// SpeakEleReviewCell.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import UIKit
class SpeakEleReviewCell: UITableViewCell {
lazy var backView: UIView = {
let bView = UIView()
bView.backgroundColor = .white
bView.isUserInteractionEnabled = true
return bView
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.backgroundColor = .clear
self.backgroundColor = .clear
// 创建UI方法
creatUI()
// bindViewModel()
}
// 这个方法也是必须要实现的,和重写初始化方法在一起实现。
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func creatUI() {
self.contentView.addSubview(backView)
backView.snp.makeConstraints { make in
make.left.equalTo(24)
make.right.equalTo(-24)
make.top.equalTo(18)
make.bottom.equalTo(-24)
make.height.equalTo(202)
}
backView.corners = 16
}
}
//
// NSObject+.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import Foundation
extension NSObject {
class func className() -> String {
return NSStringFromClass(self)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment