详情页移除入场动画、标题显示分类名,汉选英播放按钮选答后才显示
This commit is contained in:
@@ -28,6 +28,12 @@ final class QuizViewController: UIViewController {
|
||||
private let promptStack = UIStackView()
|
||||
private let inputStack = UIStackView()
|
||||
private let resultStack = UIStackView()
|
||||
private let navSpeakerItem = UIBarButtonItem(
|
||||
image: UIImage(systemName: "speaker.wave.2.fill"),
|
||||
style: .plain,
|
||||
target: nil,
|
||||
action: nil
|
||||
)
|
||||
|
||||
private var current: QuizQuestion? {
|
||||
questions.indices.contains(currentIndex) ? questions[currentIndex] : nil
|
||||
@@ -110,12 +116,9 @@ final class QuizViewController: UIViewController {
|
||||
nextButton.configuration = nextConfig
|
||||
nextButton.addAction(UIAction { [weak self] _ in self?.primaryButtonTapped() }, for: .touchUpInside)
|
||||
|
||||
navigationItem.rightBarButtonItem = UIBarButtonItem(
|
||||
image: UIImage(systemName: "speaker.wave.2.fill"),
|
||||
style: .plain,
|
||||
target: self,
|
||||
action: #selector(speakCurrentWord)
|
||||
)
|
||||
navSpeakerItem.target = self
|
||||
navSpeakerItem.action = #selector(speakCurrentWord)
|
||||
navigationItem.rightBarButtonItem = navSpeakerItem
|
||||
|
||||
let headerStack = UIStackView(arrangedSubviews: [progressView, countLabel])
|
||||
headerStack.axis = .vertical
|
||||
@@ -163,6 +166,8 @@ final class QuizViewController: UIViewController {
|
||||
resultLabel.isHidden = true
|
||||
resultPhoneticLabel.isHidden = true
|
||||
|
||||
navigationItem.rightBarButtonItem = config.mode == .zhToEn ? nil : navSpeakerItem
|
||||
|
||||
let isSpelling = config.mode == .spelling
|
||||
let isDictation = config.mode == .dictation
|
||||
let isChoice = !isSpelling && !isDictation
|
||||
@@ -290,6 +295,7 @@ final class QuizViewController: UIViewController {
|
||||
icon.transform = .identity
|
||||
}
|
||||
}
|
||||
navigationItem.rightBarButtonItem = navSpeakerItem
|
||||
showResult(correct, for: question)
|
||||
}
|
||||
|
||||
|
||||
@@ -2,16 +2,17 @@ import UIKit
|
||||
|
||||
final class WordDetailViewController: UIViewController {
|
||||
private let word: Word
|
||||
private let categoryName: String
|
||||
private let speech = SpeechService.shared
|
||||
|
||||
private let speakButton = UIButton(type: .system)
|
||||
private let exampleSpeakButton = UIButton(type: .system)
|
||||
private let contentStack = UIStackView()
|
||||
private var speechObserver: NSObjectProtocol?
|
||||
private var didAnimateEntry = false
|
||||
|
||||
init(word: Word) {
|
||||
init(word: Word, categoryName: String = "") {
|
||||
self.word = word
|
||||
self.categoryName = categoryName
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
@@ -27,7 +28,7 @@ final class WordDetailViewController: UIViewController {
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
view.backgroundColor = .systemBackground
|
||||
title = word.word
|
||||
title = categoryName
|
||||
navigationItem.largeTitleDisplayMode = .never
|
||||
buildLayout()
|
||||
updateSpeakState()
|
||||
@@ -38,14 +39,6 @@ final class WordDetailViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
if !didAnimateEntry {
|
||||
didAnimateEntry = true
|
||||
contentStack.animateEntry(distance: 16, duration: 0.35)
|
||||
}
|
||||
}
|
||||
|
||||
private func updateSpeakState() {
|
||||
let wordSpeaking = speech.isSpeaking(word.word)
|
||||
speakButton.configuration?.image = UIImage(
|
||||
|
||||
@@ -148,6 +148,6 @@ extension WordListViewController: UITableViewDataSource, UITableViewDelegate {
|
||||
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
Haptics.selection()
|
||||
navigationController?.pushViewController(
|
||||
WordDetailViewController(word: category.words[indexPath.row]), animated: true)
|
||||
WordDetailViewController(word: category.words[indexPath.row], categoryName: category.name), animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user