Zwei Schlüssel ohne Platzhalter, zwei Kreisel übereinander
**Die Schlüssel.** Im Quelltext steht `"season.number \(season)"`, der Schlüssel heißt damit `season.number %lld`. Im Katalog stand er ohne Platzhalter — also traf er nie, und die App zeigte den Schlüssel selbst: „The 50 · season.number 1 · episode.number 1". Beide umbenannt. Ein Überbleibsel `episode.number %@` ohne eine einzige Übersetzung ist mitgegangen, und aus „Episode" wurde „Folge", wie überall sonst im Haus. **Die Kreisel.** Die Abdeckung beim Wiederherstellen der Stelle ist eine ganze Seite, kein Schleier — nur lag das Übrige weiter darüber. Zu sehen waren Bedienelemente mitten im Satz, ein Kreisel in der Abdeckung und ein zweiter im Abspielknopf, den man in dem Moment ohnehin nicht drücken soll. Jetzt ist die Abdeckung ausschließlich. Die Kopfzeile bleibt: sie ist der Weg zurück. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
8a63f815cd
commit
fc812f5a25
@@ -68,40 +68,47 @@ struct PlayerView: View {
|
||||
// Deckt den Umstieg ab. Ohne sie sieht man den Filmanfang,
|
||||
// während der neue Stream anläuft — und denkt, die Stelle sei
|
||||
// weg. Die Abdeckung nennt sie ausdrücklich.
|
||||
//
|
||||
// **Und dann nichts anderes.** Die Abdeckung ist eine ganze
|
||||
// Seite, kein Schleier: legt sich das Übrige darüber, stehen
|
||||
// Bedienelemente und Kreisel mitten im Satz „Stelle wird
|
||||
// wiederhergestellt" — zwei Ladeanzeigen übereinander, eine
|
||||
// davon in einem Knopf, den man in dem Moment gar nicht
|
||||
// drücken soll. Die Kopfzeile bleibt: sie ist der Weg zurück.
|
||||
if let target = model.resumeTarget {
|
||||
restoring(to: target)
|
||||
}
|
||||
} else {
|
||||
switch model.phase {
|
||||
case .preparing:
|
||||
preparing(for: model)
|
||||
|
||||
switch model.phase {
|
||||
case .preparing:
|
||||
preparing(for: model)
|
||||
case .failed(let message):
|
||||
failure(message: message)
|
||||
|
||||
case .failed(let message):
|
||||
failure(message: message)
|
||||
case .playing:
|
||||
// Wartet auf Daten: ohne Anzeige sieht das aus wie ein
|
||||
// Standbild, und man weiß nicht, ob noch etwas kommt.
|
||||
//
|
||||
// Nur, solange die Bedienelemente aus sind. Sind sie
|
||||
// an, steht der Kreisel **im** Abspielknopf — dort, wo
|
||||
// sonst das Symbol ist. Vorher lag er dahinter und das
|
||||
// Dreieck davor: es sah pausiert aus, war es nicht.
|
||||
if model.isBuffering && !showsControls {
|
||||
ProgressView()
|
||||
.tint(.white)
|
||||
.scaleEffect(1.4)
|
||||
.transition(.opacity)
|
||||
}
|
||||
|
||||
case .playing:
|
||||
// Wartet auf Daten: ohne Anzeige sieht das aus wie ein
|
||||
// Standbild, und man weiß nicht, ob noch etwas kommt.
|
||||
//
|
||||
// Nur, solange die Bedienelemente aus sind. Sind sie an,
|
||||
// steht der Kreisel **im** Abspielknopf — dort, wo sonst
|
||||
// das Symbol ist. Vorher lag er dahinter und das Dreieck
|
||||
// davor: es sah pausiert aus, war es aber nicht.
|
||||
if model.isBuffering && !showsControls {
|
||||
ProgressView()
|
||||
.tint(.white)
|
||||
.scaleEffect(1.4)
|
||||
.transition(.opacity)
|
||||
if showsControls {
|
||||
controls(for: model).transition(.opacity)
|
||||
}
|
||||
// Überspringen und „Nächste Folge" liegen außerhalb
|
||||
// der Bedienelemente: sie sollen auch dann erscheinen,
|
||||
// wenn die ausgeblendet sind — sonst müsste man erst
|
||||
// antippen, um das Intro überspringen zu können.
|
||||
overlayActions(for: model)
|
||||
}
|
||||
|
||||
if showsControls {
|
||||
controls(for: model).transition(.opacity)
|
||||
}
|
||||
// Überspringen und „Nächste Folge" liegen außerhalb der
|
||||
// Bedienelemente: sie sollen auch dann erscheinen, wenn
|
||||
// die ausgeblendet sind — sonst müsste man erst antippen,
|
||||
// um das Intro überspringen zu können.
|
||||
overlayActions(for: model)
|
||||
}
|
||||
|
||||
// Die Kopfzeile liegt über allem und erscheint auch während
|
||||
|
||||
Reference in New Issue
Block a user