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

現在版の画面キャプチャ

Swift

Posted by shi-n