PublishTakePhotoController.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. //
  2. // PublishTakePhotoController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by Christopher on 2019/6/18.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import JXSegmentedView
  11. import AliyunVideoSDKPro
  12. enum FlashType : Int {
  13. case close = 0
  14. case open = 1
  15. case auto = 2
  16. }
  17. class PublishTakePhotoController: BaseViewController {
  18. typealias DismissClosure = () -> Void
  19. var dismissClosure: DismissClosure?
  20. var curFlashType : FlashType! = .close
  21. override func viewDidLoad() {
  22. super.viewDidLoad()
  23. setupViews()
  24. setupLayouts()
  25. }
  26. deinit {
  27. // 控制器销毁时,销毁recorder
  28. recorder.destroy()
  29. }
  30. override func setupViews() {
  31. navigationBar.isHidden = true
  32. view.addSubview(backButton)
  33. view.addSubview(reverseButton)
  34. view.addSubview(flashButton)
  35. view.addSubview(photoButton)
  36. }
  37. override func setupLayouts() {
  38. backButton.snp.makeConstraints { (make) in
  39. make.top.equalTo(kSafeStatusBarHeight+3)
  40. make.left.equalTo(5)
  41. make.width.equalTo(40)
  42. make.height.equalTo(40)
  43. }
  44. reverseButton.snp.makeConstraints { (make) in
  45. make.top.equalTo(86)
  46. make.right.equalTo(-12)
  47. make.width.equalTo(40)
  48. make.height.equalTo(44)
  49. }
  50. reverseButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 6)
  51. flashButton.snp.makeConstraints { (make) in
  52. make.top.equalTo(reverseButton.snp_bottom).offset(20)
  53. make.centerX.equalTo(reverseButton.snp_centerX)
  54. make.width.equalTo(40)
  55. make.height.equalTo(46)
  56. }
  57. flashButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
  58. photoButton.snp.makeConstraints { (make) in
  59. make.bottom.equalTo(-kSafeTabBarHeight-68)
  60. make.centerX.equalToSuperview()
  61. make.size.equalTo(79)
  62. }
  63. }
  64. private lazy var recorder: AliyunIRecorder = {
  65. let recorder = AliyunIRecorder.init(delegate: self as? AliyunIRecorderDelegate, videoSize: CGSize(width: 720, height: 1280))
  66. recorder?.preview = self.view;
  67. return recorder!
  68. }()
  69. private lazy var backButton: UIButton = {
  70. let backButton = UIButton(type: UIButton.ButtonType.custom)
  71. backButton.setImage(kImage(name: "navbar_back_white"), for: UIControl.State.normal)
  72. backButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  73. if let dismissClosure = self?.dismissClosure {
  74. dismissClosure()
  75. }
  76. }).disposed(by: disposeBag)
  77. return backButton
  78. }()
  79. private lazy var reverseButton: UIButton = {
  80. let reverseButton = UIButton(type: UIButton.ButtonType.custom)
  81. reverseButton.setImage(kImage(name: "video_ico_overturn"), for: UIControl.State.normal)
  82. reverseButton.setTitle("翻转", for: UIControl.State.normal)
  83. reverseButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  84. reverseButton.titleLabel?.font = kRegularFont12
  85. reverseButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  86. self?.recorder.switchCameraPosition()
  87. }).disposed(by: disposeBag)
  88. return reverseButton
  89. }()
  90. private lazy var flashButton: UIButton = {
  91. let flashButton = UIButton(type: UIButton.ButtonType.custom)
  92. switch curFlashType {
  93. case .open?:
  94. flashButton.setImage(kImage(name: "video_ico_flashlight"), for: UIControl.State.normal)
  95. case .auto?:
  96. flashButton.setImage(kImage(name: "video_ico_flashlight_auto"), for: UIControl.State.normal)
  97. default:
  98. flashButton.setImage(kImage(name: "video_ico_flashlight_close"), for: UIControl.State.normal)
  99. }
  100. flashButton.setTitle("闪光灯", for: UIControl.State.normal)
  101. flashButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  102. flashButton.titleLabel?.font = kRegularFont12
  103. flashButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  104. switch self?.curFlashType {
  105. case .open?:
  106. self?.curFlashType = FlashType.auto
  107. flashButton.setImage(kImage(name: "video_ico_flashlight_auto"), for: UIControl.State.normal)
  108. self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.auto)
  109. case .auto?:
  110. self?.curFlashType = FlashType.close
  111. flashButton.setImage(kImage(name: "video_ico_flashlight_close"), for: UIControl.State.normal)
  112. self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.off)
  113. default:
  114. self?.curFlashType = FlashType.open
  115. flashButton.setImage(kImage(name: "video_ico_flashlight"), for: UIControl.State.normal)
  116. self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.on)
  117. }
  118. }).disposed(by: disposeBag)
  119. return flashButton
  120. }()
  121. private lazy var photoButton: UIButton = {
  122. let photoButton = UIButton(type: UIButton.ButtonType.custom)
  123. photoButton.setImage(kImage(name: "video_btn_shoot"), for: UIControl.State.normal)
  124. photoButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  125. self?.recorder.takePhoto({ (image, rawImage) in
  126. let confirmVc = PublishConfirmPhotoController()
  127. confirmVc.photoImg = image
  128. self?.present(confirmVc, animated: true, completion: nil)
  129. })
  130. }).disposed(by: disposeBag)
  131. return photoButton
  132. }()
  133. }
  134. extension PublishTakePhotoController : JXSegmentedListContainerViewListDelegate {
  135. func listView() -> UIView {
  136. return view
  137. }
  138. func listDidAppear() {
  139. recorder.startPreview()
  140. }
  141. func listDidDisappear() {
  142. recorder.stopPreview()
  143. }
  144. }