feat(ios): 播放/暂停/下载/上传/左右箭头 6 个图标全部替换
- icon-play / icon-pause / icon-download / icon-upload - icon-chevron-left / icon-chevron-right - 全局替换 systemName: chevron/play 引用 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
a09853ffa9
commit
9f4e3815d4
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-chevron-left.imageset/Contents.json
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-chevron-left.imageset/Contents.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"images":[{"filename":"icon-chevron-left.svg","idiom":"universal"}],"info":{"author":"xcode","version":1},"properties":{"template-rendering-intent":"template","preserves-vector-representation":true}}
|
||||
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-chevron-left.imageset/icon-chevron-left.svg
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-chevron-left.imageset/icon-chevron-left.svg
vendored
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M15.5644 4.50613C15.8372 4.81786 15.8056 5.29168 15.4939 5.56444L9.21404 11.0593C8.64488 11.5573 8.64488 12.4427 9.21404 12.9407L15.4939 18.4356C15.8056 18.7083 15.8372 19.1822 15.5644 19.4939C15.2917 19.8056 14.8178 19.8372 14.5061 19.5644L8.22628 14.0696C6.97413 12.974 6.97413 11.0261 8.22628 9.93042L14.5061 4.43558C14.8178 4.16282 15.2917 4.1944 15.5644 4.50613Z" fill-rule="evenodd" fill="#AEAEAE"></path></svg>
|
||||
|
After Width: | Height: | Size: 565 B |
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-chevron-right.imageset/Contents.json
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-chevron-right.imageset/Contents.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"images":[{"filename":"icon-chevron-right.svg","idiom":"universal"}],"info":{"author":"xcode","version":1},"properties":{"template-rendering-intent":"template","preserves-vector-representation":true}}
|
||||
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M14.786 12.9407C15.3551 12.4427 15.3551 11.5573 14.786 11.0593L8.50613 5.56444C8.19441 5.29168 8.16282 4.81786 8.43558 4.50613C8.70834 4.1944 9.18216 4.16282 9.49389 4.43558L15.7737 9.93043C17.0259 11.0261 17.0259 12.974 15.7737 14.0696L9.49389 19.5644C9.18216 19.8372 8.70834 19.8056 8.43558 19.4939C8.16282 19.1822 8.19441 18.7083 8.50613 18.4356L14.786 12.9407Z" fill-rule="evenodd" fill="#AEAEAE"></path></svg>
|
||||
|
After Width: | Height: | Size: 562 B |
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-download.imageset/Contents.json
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-download.imageset/Contents.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"images":[{"filename":"icon-download.svg","idiom":"universal"}],"info":{"author":"xcode","version":1},"properties":{"template-rendering-intent":"template","preserves-vector-representation":true}}
|
||||
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-download.imageset/icon-download.svg
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-download.imageset/icon-download.svg
vendored
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M2.74994 15.5022C3.16415 15.5022 3.49994 15.838 3.49994 16.2522L3.49994 16.753C3.49994 18.8241 5.17887 20.503 7.24994 20.503L16.7499 20.503C18.821 20.503 20.4999 18.8241 20.4999 16.753L20.4999 16.2522C20.4999 15.838 20.8357 15.5022 21.2499 15.5022C21.6642 15.5022 21.9999 15.838 21.9999 16.2522L21.9999 16.753C21.9999 19.6525 19.6494 22.003 16.7499 22.003L7.24994 22.003C4.35044 22.003 1.99994 19.6525 1.99994 16.753L1.99994 16.2522C1.99994 15.838 2.33573 15.5022 2.74994 15.5022Z" fill-rule="evenodd" fill="#000000"></path><path d="M11.9999 16.2497C11.5857 16.2497 11.2499 15.9139 11.2499 15.4997L11.2499 3.14142C11.2499 2.72721 11.5857 2.39142 11.9999 2.39142C12.4142 2.39142 12.7499 2.72721 12.7499 3.14142L12.7499 15.4997C12.7499 15.9139 12.4142 16.2497 11.9999 16.2497Z" fill-rule="evenodd" fill="#AEAEAE"></path><path d="M11.0837 14.9096C11.5782 15.4426 12.4216 15.4426 12.9162 14.9096L16.0898 11.4895C16.3716 11.1859 16.8461 11.1681 17.1497 11.4499C17.4534 11.7316 17.4711 12.2062 17.1894 12.5098L14.0158 15.9299C12.9277 17.1025 11.0722 17.1025 9.98411 15.9299L6.81052 12.5098C6.52878 12.2062 6.54651 11.7316 6.85014 11.4499C7.15377 11.1681 7.62832 11.1859 7.91007 11.4895L11.0837 14.9096Z" fill-rule="evenodd" fill="#AEAEAE"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-pause.imageset/Contents.json
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-pause.imageset/Contents.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"images":[{"filename":"icon-pause.svg","idiom":"universal"}],"info":{"author":"xcode","version":1},"properties":{"template-rendering-intent":"template","preserves-vector-representation":true}}
|
||||
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-pause.imageset/icon-pause.svg
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-pause.imageset/icon-pause.svg
vendored
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M3.25 6C3.25 4.48122 4.48122 3.25 6 3.25L8.5 3.25C10.0188 3.25 11.25 4.48122 11.25 6L11.25 18C11.25 19.5188 10.0188 20.75 8.5 20.75L6 20.75C4.48122 20.75 3.25 19.5188 3.25 18L3.25 6ZM6 4.75C5.30964 4.75 4.75 5.30964 4.75 6L4.75 18C4.75 18.6904 5.30964 19.25 6 19.25L8.5 19.25C9.19036 19.25 9.75 18.6904 9.75 18L9.75 6C9.75 5.30964 9.19036 4.75 8.5 4.75L6 4.75Z" fill-rule="evenodd" fill="#AEAEAE"></path><path d="M12.75 6C12.75 4.48122 13.9812 3.25 15.5 3.25L18 3.25C19.5188 3.25 20.75 4.48122 20.75 6L20.75 18C20.75 19.5188 19.5188 20.75 18 20.75L15.5 20.75C13.9812 20.75 12.75 19.5188 12.75 18L12.75 6ZM15.5 4.75C14.8096 4.75 14.25 5.30964 14.25 6L14.25 18C14.25 18.6904 14.8096 19.25 15.5 19.25L18 19.25C18.6904 19.25 19.25 18.6904 19.25 18L19.25 6C19.25 5.30964 18.6904 4.75 18 4.75L15.5 4.75Z" fill-rule="evenodd" fill="#000000"></path></svg>
|
||||
|
After Width: | Height: | Size: 995 B |
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-play.imageset/Contents.json
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-play.imageset/Contents.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"images":[{"filename":"icon-play.svg","idiom":"universal"}],"info":{"author":"xcode","version":1},"properties":{"template-rendering-intent":"template","preserves-vector-representation":true}}
|
||||
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-play.imageset/icon-play.svg
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-play.imageset/icon-play.svg
vendored
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M8.30653 4.93583C6.80803 4.1425 5.00378 5.2288 5.00378 6.92434L5.00378 17.0766C5.00378 18.7721 6.80803 19.8584 8.30654 19.0651L17.8947 13.989C19.4911 13.1439 19.4911 10.8571 17.8947 10.0119L8.30653 4.93583ZM3.50378 6.92434C3.50378 4.09844 6.51086 2.28794 9.00836 3.61015L18.5966 8.68625C21.2571 10.0948 21.2571 13.9061 18.5966 15.3147L9.00837 20.3908C6.51087 21.713 3.50378 19.9025 3.50378 17.0766L3.50378 6.92434Z" fill-rule="evenodd" fill="#AEAEAE"></path></svg>
|
||||
|
After Width: | Height: | Size: 612 B |
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-upload.imageset/Contents.json
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-upload.imageset/Contents.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"images":[{"filename":"icon-upload.svg","idiom":"universal"}],"info":{"author":"xcode","version":1},"properties":{"template-rendering-intent":"template","preserves-vector-representation":true}}
|
||||
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-upload.imageset/icon-upload.svg
vendored
Normal file
1
AIStudyApp/AIStudyApp/Assets.xcassets/Icons/icon-upload.imageset/icon-upload.svg
vendored
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M2.74994 15.5021C3.16415 15.5021 3.49994 15.8379 3.49994 16.2521L3.49994 16.753C3.49994 18.824 5.17887 20.503 7.24994 20.503L16.7499 20.503C18.821 20.503 20.4999 18.824 20.4999 16.753L20.4999 16.2521C20.4999 15.8379 20.8357 15.5021 21.2499 15.5021C21.6642 15.5021 21.9999 15.8379 21.9999 16.2521L21.9999 16.753C21.9999 19.6525 19.6494 22.003 16.7499 22.003L7.24994 22.003C4.35044 22.003 1.99994 19.6525 1.99994 16.753L1.99994 16.2521C1.99994 15.8379 2.33573 15.5021 2.74994 15.5021Z" fill-rule="evenodd" fill="#000000"></path><path d="M12.0019 3.08893C12.4161 3.08893 12.7519 3.42471 12.7519 3.83893L12.7519 16.1972C12.7519 16.6114 12.4161 16.9472 12.0019 16.9472C11.5877 16.9472 11.2519 16.6114 11.2519 16.1972L11.2519 3.83893C11.2519 3.42471 11.5877 3.08893 12.0019 3.08893Z" fill-rule="evenodd" fill="#AEAEAE"></path><path d="M12.9172 4.42899C12.4226 3.89599 11.5792 3.89599 11.0846 4.42899L7.91104 7.84907C7.62929 8.1527 7.15475 8.17044 6.85112 7.88869C6.54749 7.60694 6.52975 7.1324 6.8115 6.82877L9.98509 3.40869C11.0732 2.23609 12.9286 2.23608 14.0167 3.40869L17.1903 6.82877C17.4721 7.1324 17.4543 7.60694 17.1507 7.88869C16.8471 8.17043 16.3725 8.15269 16.0908 7.84907L12.9172 4.42899Z" fill-rule="evenodd" fill="#AEAEAE"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@ -74,7 +74,7 @@ struct AIFeedbackPageView: View {
|
||||
NavigationLink(value: Route.aiChat) {
|
||||
HStack(spacing: 4) {
|
||||
Text("深入提问").font(.system(size: 13))
|
||||
Image(systemName: "chevron.right").font(.system(size: 14))
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 14, height: 14)
|
||||
}
|
||||
.foregroundColor(Color.zxF05)
|
||||
.frame(maxWidth: .infinity).frame(height: 44)
|
||||
@ -85,7 +85,7 @@ struct AIFeedbackPageView: View {
|
||||
NavigationLink(value: Route.dailyThinking) {
|
||||
HStack(spacing: 4) {
|
||||
Text("再来一题").font(.system(size: 13))
|
||||
Image(systemName: "chevron.right").font(.system(size: 14))
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 14, height: 14)
|
||||
}
|
||||
.foregroundColor(Color.zxF05)
|
||||
.frame(maxWidth: .infinity).frame(height: 44)
|
||||
|
||||
@ -388,7 +388,7 @@ struct AIHomeView: View {
|
||||
|
||||
Spacer()
|
||||
|
||||
Image(systemName: "chevron.right")
|
||||
Image("icon-chevron-right")
|
||||
.font(.system(size: 10, weight: .semibold))
|
||||
.foregroundColor(Color.zxInkTertiary)
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ struct CreateLibraryPage: View {
|
||||
Text("选择一张图片作为封面").font(.system(size: 12)).foregroundColor(Color.zxF04)
|
||||
}
|
||||
Spacer()
|
||||
Image(systemName: "chevron.right").font(.system(size: 14)).foregroundColor(Color.zxF03)
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 14, height: 14).foregroundColor(Color.zxF03)
|
||||
}
|
||||
.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
.background(Color.zxFill004).clipShape(RoundedRectangle(cornerRadius: 14))
|
||||
@ -759,7 +759,7 @@ struct ImportPage: View {
|
||||
|
||||
struct ZXImportRow: View { let icon: String; let title: String; let desc: String
|
||||
var body: some View { HStack(spacing: 14) { Image(systemName: icon).font(.system(size: 22)).foregroundColor(Color.zxPurple).frame(width: 48, height: 48)
|
||||
; VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 12)).foregroundColor(Color.zxF04) }; Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03) }.padding(16).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 16)).overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.zxBorder006, lineWidth: 1)) }
|
||||
; VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 12)).foregroundColor(Color.zxF04) }; Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03) }.padding(16).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 16)).overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.zxBorder006, lineWidth: 1)) }
|
||||
}
|
||||
|
||||
// MARK: - Import Review
|
||||
|
||||
@ -80,7 +80,7 @@ struct ProfileView: View {
|
||||
Text(profile?.nickname ?? "学习者").font(.system(size: 20, weight: .bold)).foregroundColor(Color.zxF0)
|
||||
Text(profile?.email ?? "").font(.system(size: 12)).foregroundColor(Color.zxF04)
|
||||
}
|
||||
Spacer(); Image(systemName: "chevron.right").font(.system(size: 14)).foregroundColor(Color.zxF03)
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 14, height: 14).foregroundColor(Color.zxF03)
|
||||
}
|
||||
HStack(spacing: 0) { ZXProfileStat(value: "\(viewModel.summary?.activeDays ?? 0)", label: "活跃天", color: Color.zxOrange); ZXProfileStat(value: "\(viewModel.summary?.totalCardsReviewed ?? 0)", label: "复习卡片", color: Color.zxPurple); ZXProfileStat(value: "\(viewModel.summary?.totalMinutes ?? 0)", label: "分钟", color: Color.zxTeal) }
|
||||
}.padding(20).background(ZXGradient.profileCard).overlay(RoundedRectangle(cornerRadius: 20).stroke(Color(hex: "#7C6EFA", opacity: 0.2), lineWidth: 1)).clipShape(RoundedRectangle(cornerRadius: 20))
|
||||
@ -99,7 +99,7 @@ struct ProfileView: View {
|
||||
Text("学习资产").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Spacer()
|
||||
Text("\(viewModel.kbCount)库 \(viewModel.itemCount)项 \(viewModel.cardCount)卡").font(.system(size: 12)).foregroundColor(Color.zxF04)
|
||||
Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03)
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}.foregroundColor(.primary)
|
||||
ZXProfileDivider()
|
||||
@ -108,7 +108,7 @@ struct ProfileView: View {
|
||||
Image(systemName: "bell.fill").font(.system(size: 18)).foregroundColor(Color.zxOrange).frame(width: 36, height: 36)
|
||||
|
||||
Text("消息中心").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03)
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}.foregroundColor(.primary)
|
||||
ZXProfileDivider()
|
||||
@ -119,7 +119,7 @@ struct ProfileView: View {
|
||||
Text("存储空间").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Text(viewModel.formattedStorage).font(.system(size: 11)).foregroundColor(Color.zxF04)
|
||||
}
|
||||
Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03)
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}.background(Color.zxFill004).clipShape(RoundedRectangle(cornerRadius: 20)).overlay(RoundedRectangle(cornerRadius: 20).stroke(Color.zxBorder006, lineWidth: 1))
|
||||
}
|
||||
@ -129,7 +129,7 @@ struct ZXProfileStat: View { let v: String; let l: String; let c: Color; var bod
|
||||
init(value: String, label: String, color: Color) { self.v = value; self.l = label; self.c = color }
|
||||
}
|
||||
struct ZXProfileMenuRow: View { let icon: String; let title: String; let desc: String
|
||||
var body: some View { HStack(spacing: 12) { Image(systemName: icon).font(.system(size: 18)).foregroundColor(Color.zxF05).frame(width: 36, height: 36).background(Color.zxFill006).clipShape(RoundedRectangle(cornerRadius: 10)); VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 11)).foregroundColor(Color.zxF03) }; Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03) }.padding(.horizontal, 16).padding(.vertical, 14).accessibilityLabel("\(title):\(desc)") }
|
||||
var body: some View { HStack(spacing: 12) { Image(systemName: icon).font(.system(size: 18)).foregroundColor(Color.zxF05).frame(width: 36, height: 36).background(Color.zxFill006).clipShape(RoundedRectangle(cornerRadius: 10)); VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 11)).foregroundColor(Color.zxF03) }; Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03) }.padding(.horizontal, 16).padding(.vertical, 14).accessibilityLabel("\(title):\(desc)") }
|
||||
}
|
||||
struct ZXProfileDivider: View {
|
||||
var body: some View { Rectangle().fill(Color.zxBorder008).frame(height: 1).padding(.leading, 64) }
|
||||
|
||||
@ -165,7 +165,7 @@ struct ZXSettingRow: View {
|
||||
Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Spacer()
|
||||
if !value.isEmpty { Text(value).font(.system(size: 13)).foregroundColor(Color.zxF03) }
|
||||
Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03)
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ struct QuizListView: View {
|
||||
ForEach(quizzes) { q in
|
||||
NavigationLink(value: Route.quizTake(quizId: q.id)) {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
HStack { Text(q.title ?? "测验").font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03) }
|
||||
HStack { Text(q.title ?? "测验").font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03) }
|
||||
HStack(spacing: 12) {
|
||||
Label("\(q.questionCount ?? 0) 题", systemImage: "list.bullet").font(.system(size: 11)).foregroundColor(Color.zxF04)
|
||||
Label("选择题/判断/填空", systemImage: "square.grid.3x3").font(.system(size: 11)).foregroundColor(Color.zxF04)
|
||||
@ -146,12 +146,12 @@ struct QuizTakerView: View {
|
||||
// Navigation buttons
|
||||
HStack {
|
||||
Button { if currentIndex > 0 { currentIndex -= 1 } } label: {
|
||||
HStack { Image(systemName: "chevron.left"); Text("上一题") }.font(.system(size: 14)).foregroundColor(Color.zxF05).padding(.horizontal, 20).padding(.vertical, 12).background(Color.zxFill004).clipShape(RoundedRectangle(cornerRadius: 10))
|
||||
HStack { Image("icon-chevron-left"); Text("上一题") }.font(.system(size: 14)).foregroundColor(Color.zxF05).padding(.horizontal, 20).padding(.vertical, 12).background(Color.zxFill004).clipShape(RoundedRectangle(cornerRadius: 10))
|
||||
}.disabled(currentIndex == 0)
|
||||
Spacer()
|
||||
if currentIndex < questions.count - 1 {
|
||||
Button { currentIndex += 1 } label: {
|
||||
HStack { Text("下一题"); Image(systemName: "chevron.right") }.font(.system(size: 14, weight: .medium)).foregroundColor(.white).padding(.horizontal, 20).padding(.vertical, 12).background(ZXGradient.brand).clipShape(RoundedRectangle(cornerRadius: 10))
|
||||
HStack { Text("下一题"); Image("icon-chevron-right") }.font(.system(size: 14, weight: .medium)).foregroundColor(.white).padding(.horizontal, 20).padding(.vertical, 12).background(ZXGradient.brand).clipShape(RoundedRectangle(cornerRadius: 10))
|
||||
}
|
||||
} else {
|
||||
Button {
|
||||
|
||||
@ -97,7 +97,7 @@ struct LearningSessionView: View {
|
||||
if isRunning { isPaused = true; isRunning = false }
|
||||
else { isPaused = false; isRunning = true }
|
||||
} label: {
|
||||
Label(isRunning ? "暂停" : "继续", systemImage: isRunning ? "pause.fill" : "play.fill")
|
||||
Label(isRunning ? "暂停" : "继续", systemImage: isRunning ? "pause.fill" : "icon-play")
|
||||
.font(.system(size: 14, weight: .bold))
|
||||
.foregroundColor(.white)
|
||||
.frame(maxWidth: .infinity).frame(height: 48)
|
||||
|
||||
@ -225,7 +225,7 @@ struct ZXSTaskRow: View { @Binding var task: ZXSTask
|
||||
struct ZXSTaskRowView: View { let task: ZXSTask; var action: () -> Void
|
||||
var body: some View { HStack(spacing: 12) { Image(systemName: task.d ? "checkmark.circle.fill" : "circle").font(.system(size: 20)).foregroundColor(task.d ? Color.zxGreen : Color.zxF02)
|
||||
VStack(alignment: .leading, spacing: 4) { Text(task.t).font(.system(size: 13, weight: .semibold)).foregroundColor(task.d ? Color.zxF04 : Color.zxF0).strikethrough(task.d); HStack(spacing: 8) { Text(task.tp).font(.system(size: 10, weight: .semibold)).foregroundColor(task.c).padding(.horizontal, 6).padding(.vertical, 1).background(task.c.opacity(0.12)).clipShape(Capsule()); Text("约 \(task.m) 分钟").font(.system(size: 10)).foregroundColor(Color(hex:"#F0F0FF",opacity:0.35)) } }
|
||||
Spacer(); if !task.d { Image(systemName: "play.fill").font(.system(size: 14)).foregroundColor(.white).frame(width: 32, height: 32).background(ZXGradient.brand).clipShape(RoundedRectangle(cornerRadius: 10)) } }
|
||||
Spacer(); if !task.d { Image("icon-play").font(.system(size: 14)).foregroundColor(.white).frame(width: 32, height: 32).background(ZXGradient.brand).clipShape(RoundedRectangle(cornerRadius: 10)) } }
|
||||
.padding(.horizontal, 16).padding(.vertical, 12).background(task.d ? Color.zxFill003 : Color.zxFill005).overlay(RoundedRectangle(cornerRadius: 14).stroke(task.d ? Color(hex: "#FFFFFF", opacity: 0.05) : Color.zxBorder008, lineWidth: 1)).clipShape(RoundedRectangle(cornerRadius: 14)).opacity(task.d ? 0.6 : 1).contentShape(Rectangle()).onTapGesture { action() }.zxPressable()
|
||||
.accessibilityLabel("\(task.t), \(task.tp), 约\(task.m)分钟")
|
||||
.accessibilityAddTraits(task.d ? .isSelected : [])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user