Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
SpeakEasyLearnEnglish
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yqz
SpeakEasyLearnEnglish
Commits
06999bdc
Commit
06999bdc
authored
Jul 17, 2025
by
taorui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 数据页面代码提交
parent
3f24c198
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
708 additions
and
1 deletion
+708
-1
Contents.json
...akEasyLearnEnglish/Assets.xcassets/Progress/Contents.json
+6
-0
Contents.json
...cassets/Progress/sp-progress-Check.imageset/Contents.json
+23
-0
sp-progress-Check.png
...Progress/sp-progress-Check.imageset/sp-progress-Check.png
+0
-0
sp-progress-Check@2x.png
...gress/sp-progress-Check.imageset/sp-progress-Check@2x.png
+0
-0
sp-progress-Check@3x.png
...gress/sp-progress-Check.imageset/sp-progress-Check@3x.png
+0
-0
Contents.json
...cassets/Progress/sp-progress-Lfire.imageset/Contents.json
+23
-0
sp-progress-Lfire.png
...Progress/sp-progress-Lfire.imageset/sp-progress-Lfire.png
+0
-0
sp-progress-Lfire@2x.png
...gress/sp-progress-Lfire.imageset/sp-progress-Lfire@2x.png
+0
-0
sp-progress-Lfire@3x.png
...gress/sp-progress-Lfire.imageset/sp-progress-Lfire@3x.png
+0
-0
Contents.json
...cassets/Progress/sp-progress-Mfire.imageset/Contents.json
+23
-0
sp-progress-Mfire.png
...Progress/sp-progress-Mfire.imageset/sp-progress-Mfire.png
+0
-0
sp-progress-Mfire@2x.png
...gress/sp-progress-Mfire.imageset/sp-progress-Mfire@2x.png
+0
-0
sp-progress-Mfire@3x.png
...gress/sp-progress-Mfire.imageset/sp-progress-Mfire@3x.png
+0
-0
SpeakEleTabbarViewCtr.swift
...EasyLearnEnglish/Classes/Base/SpeakEleTabbarViewCtr.swift
+9
-1
SpeakEleProgressViewCtr.swift
...lish/Classes/Pages/Progress/SpeakEleProgressViewCtr.swift
+66
-0
SpeakEleChooseCell.swift
...lish/Classes/Pages/Progress/View/SpeakEleChooseCell.swift
+39
-0
SpeakEleDailyCell.swift
...glish/Classes/Pages/Progress/View/SpeakEleDailyCell.swift
+146
-0
SpeakEleLtimeCell.swift
...glish/Classes/Pages/Progress/View/SpeakEleLtimeCell.swift
+55
-0
SpeakEleOtherCell.swift
...glish/Classes/Pages/Progress/View/SpeakEleOtherCell.swift
+53
-0
SpeakElePCCollectionViewCell.swift
...es/Pages/Progress/View/SpeakElePCCollectionViewCell.swift
+85
-0
SpeakElePCView.swift
...nEnglish/Classes/Pages/Progress/View/SpeakElePCView.swift
+56
-0
SpeakEleProgressHeaderView.swift
...sses/Pages/Progress/View/SpeakEleProgressHeaderView.swift
+57
-0
SpeakEleReviewCell.swift
...lish/Classes/Pages/Progress/View/SpeakEleReviewCell.swift
+54
-0
NSObject+Extension.swift
...arnEnglish/Classes/Tool/NSObject/NSObject+Extension.swift
+13
-0
No files found.
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/Contents.json
0 → 100644
View file @
06999bdc
{
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Check.imageset/Contents.json
0 → 100644
View file @
06999bdc
{
"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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Check.imageset/sp-progress-Check.png
0 → 100644
View file @
06999bdc
1.02 KB
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Check.imageset/sp-progress-Check@2x.png
0 → 100644
View file @
06999bdc
2.17 KB
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Check.imageset/sp-progress-Check@3x.png
0 → 100644
View file @
06999bdc
3.79 KB
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Lfire.imageset/Contents.json
0 → 100644
View file @
06999bdc
{
"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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Lfire.imageset/sp-progress-Lfire.png
0 → 100644
View file @
06999bdc
841 Bytes
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Lfire.imageset/sp-progress-Lfire@2x.png
0 → 100644
View file @
06999bdc
1.74 KB
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Lfire.imageset/sp-progress-Lfire@3x.png
0 → 100644
View file @
06999bdc
3.17 KB
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Mfire.imageset/Contents.json
0 → 100644
View file @
06999bdc
{
"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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Mfire.imageset/sp-progress-Mfire.png
0 → 100644
View file @
06999bdc
553 Bytes
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Mfire.imageset/sp-progress-Mfire@2x.png
0 → 100644
View file @
06999bdc
1.03 KB
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Assets.xcassets/Progress/sp-progress-Mfire.imageset/sp-progress-Mfire@3x.png
0 → 100644
View file @
06999bdc
1.8 KB
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Base/SpeakEleTabbarViewCtr.swift
View file @
06999bdc
...
@@ -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
...
...
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/SpeakEleProgressViewCtr.swift
0 → 100644
View file @
06999bdc
//
// 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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakEleChooseCell.swift
0 → 100644
View file @
06999bdc
//
// 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
()
{
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakEleDailyCell.swift
0 → 100644
View file @
06999bdc
//
// 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
)
}
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakEleLtimeCell.swift
0 → 100644
View file @
06999bdc
//
// 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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakEleOtherCell.swift
0 → 100644
View file @
06999bdc
//
// 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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakElePCCollectionViewCell.swift
0 → 100644
View file @
06999bdc
//
// 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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakElePCView.swift
0 → 100644
View file @
06999bdc
//
// 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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakEleProgressHeaderView.swift
0 → 100644
View file @
06999bdc
//
// 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
)
}
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Pages/Progress/View/SpeakEleReviewCell.swift
0 → 100644
View file @
06999bdc
//
// 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
}
}
SpeakEasyLearnEnglish/SpeakEasyLearnEnglish/Classes/Tool/NSObject/NSObject+Extension.swift
0 → 100644
View file @
06999bdc
//
// NSObject+.swift
// SpeakEasyLearnEnglish
//
// Created by mac on 2025/7/16.
//
import
Foundation
extension
NSObject
{
class
func
className
()
->
String
{
return
NSStringFromClass
(
self
)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment