Ein Kreisel ist kein Pausenknopf

Während der Player auf Daten wartete, stand im mittleren Knopf das
Abspieldreieck und der Ladekreis lag dahinter. Das las sich als
„angehalten": man drückte auf Abspielen, und es geschah nichts — es lief
ja bereits, es kam nur nichts an.

Jetzt sitzt der Kreisel **im** Knopf, dort wo sonst das Symbol steht. Der
freistehende Kreisel in der Bildmitte bleibt für den Fall, dass die
Bedienelemente ausgeblendet sind. Zwei übereinander gibt es nicht mehr.

`togglePlayPause` zählt das Warten jetzt zum Laufen. Vorher führte ein
Tipp in diesem Moment zu `play()` auf etwas, das schon spielte.

Dazu auf dem Mac, wie im Browser auch:

- Ein Klick ins Bild hält an, statt erst die Bedienelemente zu holen. Die
  kommen dort von allein, sobald sich der Zeiger regt.
- Leertaste hält an, Pfeil links und rechts springen.

Mit dem Finger bleibt es beim Alten: ohne Zeiger gibt es keine Bewegung
ohne Berührung, und ein Tipp, der sofort anhält, nähme den einzigen Weg
zu Scrubber, Tonspur und Qualität.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-15 20:33:24 +02:00
co-authored by Claude Opus 5
parent 3af6c3112f
commit 9a4b6b1e06
6 changed files with 245 additions and 39 deletions
+6 -1
View File
@@ -523,9 +523,14 @@ final class PlayerModel {
programmeEndsAt = match.endsAt
}
/// Anhalten oder weiterlaufen lassen.
///
/// Das Warten auf Daten zählt hier zum Laufen. Ohne `isBuffering` in
/// dieser Bedingung führte ein Tipp in genau dem Moment zu `play()` auf
/// etwas, das bereits spielte — und sichtbar geschah nichts.
func togglePlayPause() {
guard let engine else { return }
if isPlaying { engine.pause() } else { engine.play() }
if isPlaying || isBuffering { engine.pause() } else { engine.play() }
}
func seek(to time: Duration) {