Bild-in-Bild gab es nur beim Weggehen — jetzt auch auf Zuruf
Du hast keinen Knopf gefunden, weil es keinen gab: `AVPictureInPictureController` stand da, aber nur mit `canStartPictureInPictureAutomaticallyFromInline`. Das greift, wenn man die App verlässt — und auf dem Mac gar nicht. Der Knopf erscheint nur, wenn es wirklich ginge. Das ist nicht immer so: `attachSurface` steigt für alles ausser `AVPlayerEngine` sofort aus, und `AVPictureInPictureController` braucht eine `AVPlayerLayer`. Läuft ein Titel über VLC, gibt es kein Bild-in-Bild — nur Ton im Hintergrund. Genau das war deine Beobachtung. **Beobachtet, nicht abgefragt.** `isPictureInPicturePossible` steht erst fest, wenn der Player ein Bild hat; wer beim Zeichnen fragt, bekommt `false` und zeichnet den Knopf nie wieder. Also meldet es sich über KVO — vom Input-Thread, deshalb der Sprung auf den Hauptakteur, wie bei den übrigen Beobachtungen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
261cdee2f2
commit
b1973c6890
@@ -516,6 +516,22 @@ struct PlayerView: View {
|
||||
)
|
||||
}
|
||||
|
||||
// **Bild-in-Bild von Hand.** Automatisch geht es bisher nur beim
|
||||
// Verlassen der App — und auf dem Mac gar nicht. Der Knopf
|
||||
// erscheint nur, wenn es wirklich ginge: bei VLC gibt es keine
|
||||
// `AVPlayerLayer`, und ohne die kann das System kein kleines Fenster
|
||||
// aufziehen.
|
||||
if model.canUsePictureInPicture {
|
||||
Button {
|
||||
model.togglePictureInPicture()
|
||||
} label: {
|
||||
Image(systemName: model.isPictureInPictureActive ? "pip.exit" : "pip.enter")
|
||||
.font(.title3)
|
||||
.padding(FlixySpacing.snug)
|
||||
}
|
||||
.accessibilityLabel(Text("player.pictureInPicture"))
|
||||
}
|
||||
|
||||
if model.engine?.supportsAirPlay == true {
|
||||
AirPlayButton(tint: accent)
|
||||
.frame(width: 28, height: 28)
|
||||
|
||||
Reference in New Issue
Block a user