Blame view

App/camera/ALCameraLib/Utilities/VolumeControl.swift 1.64 KB
1341bf603   Trịnh Văn Quân   version 1.1
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
  //
  //  VolumeControl.swift
  //  ALCameraViewController
  //
  //  Created by Alex Littlejohn on 2016/03/26.
  //  Copyright © 2016 zero. All rights reserved.
  //
  
  import UIKit
  import MediaPlayer
  
  typealias VolumeChangeAction = (Float) -> Void
  
  public class VolumeControl {
      
      let changeKey = "AVSystemController_SystemVolumeDidChangeNotification"
      
      lazy var volumeView: MPVolumeView = {
          let view = MPVolumeView()
          view.frame = CGRect(x: 0, y: 0, width: 1, height: 1)
          view.alpha = 0.01
          return view
      }()
      
      var onVolumeChange: VolumeChangeAction?
      
      init(view: UIView, onVolumeChange: VolumeChangeAction?) {
          
          self.onVolumeChange = onVolumeChange
          configureInView(view)
          
          do {
              try AVAudioSession.sharedInstance().setActive(true)
              NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged), name: NSNotification.Name(rawValue: changeKey), object: nil)
          } catch {
          }
          
  
      }
      
      deinit {
          try! AVAudioSession.sharedInstance().setActive(false)
          NotificationCenter.default.removeObserver(self)
          onVolumeChange = nil
          volumeView.removeFromSuperview()
      }
      
      func configureInView(_ view: UIView) {
          view.addSubview(volumeView)
          view.sendSubview(toBack: volumeView)
      }
      
      @objc func volumeChanged() {
          guard let slider = volumeView.subviews.filter({ $0 is UISlider }).first as? UISlider else { return }
          let volume = AVAudioSession.sharedInstance().outputVolume
          slider.setValue(volume, animated: false)
          onVolumeChange?(volume)
      }
  }