import AVKit import SwiftUI #if canImport(UIKit) import UIKit #else import AppKit #endif /// Der Knopf, der die Empfängerliste öffnet. /// /// Kein eigener Knopf mit eigener Liste: `AVRoutePickerView` ist die Stelle, /// die das System dafür vorsieht, und sie kennt Geräte, die eine App nie /// aufzählen könnte — Apple TVs, AirPlay-Lautsprecher, HomePods im Verbund. /// Sie nachzubauen hieße, eine unvollständige Liste zu zeigen. #if canImport(UIKit) struct AirPlayButton: UIViewRepresentable { let tint: Color func makeUIView(context: Context) -> AVRoutePickerView { let view = AVRoutePickerView() view.tintColor = .white view.activeTintColor = UIColor(tint) // Bild vor Ton: bei einem Film soll die Liste die Fernseher zuerst // zeigen, nicht die Lautsprecher. view.prioritizesVideoDevices = true view.setContentHuggingPriority(.required, for: .horizontal) return view } func updateUIView(_ view: AVRoutePickerView, context: Context) { view.activeTintColor = UIColor(tint) } } #else struct AirPlayButton: NSViewRepresentable { let tint: Color func makeNSView(context: Context) -> AVRoutePickerView { let view = AVRoutePickerView() view.isRoutePickerButtonBordered = false view.setRoutePickerButtonColor(.white, for: .normal) view.setRoutePickerButtonColor(NSColor(tint), for: .active) return view } func updateNSView(_ view: AVRoutePickerView, context: Context) { view.setRoutePickerButtonColor(NSColor(tint), for: .active) } } #endif