SwiftUI「Volume」の音量調整をMPVolumeView化、valueChangedをCoodinator実装
SwiftUI「Volume」の音量調整をMPVolumeView化
valueChangedをCoodinator実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | import MediaPlayer import SwiftUI struct UIKitMPVolumeView : UIViewRepresentable { typealias UIViewType = MPVolumeView @Binding var volume : Float let view : MPVolumeView = MPVolumeView () func makeUIView ( context : Context ) - > MPVolumeView { view . setVolumeThumbImage ( UIImage ( named : "volume" ), for : . normal ) if let uislider = getUISlider () { volume = uislider . value uislider . addTarget ( context . coordinator , action : # selector ( Coordinator . updateVolume ( sender :)), for : . valueChanged ) } return view } func updateUIView ( _ uiView : MPVolumeView , context : Context ) { } func makeCoordinator () - > Coordinator { Coordinator ( self ) } func getVolume () - > Float { var volume : Float = 0.0 if let uislider = getUISlider () { print ( uislider . value ) volume = uislider . value } return volume } func getUISlider () - > UISlider ? { var uislider : UISlider ? = nil for subview in view . subviews { if let slider = subview as ? UISlider { uislider = slider } } return uislider } class Coordinator { var parent : UIKitMPVolumeView init ( _ parent : UIKitMPVolumeView ) { self . parent = parent } @objc func updateVolume ( sender : UISlider ) { print (# function ) parent . volume = sender . value print ( parent . volume ) } } } |
Git Hub
https://github.com/cloudsquare22/VolumeSwiftUI