PublishTakePhotoController.swift 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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. typealias PubImgTransClosure = (_ selectedAssetArray: Array<UIImage>) -> Void
  21. var pubImgTransClosure: PubImgTransClosure?
  22. var curFlashType : FlashType! = .close
  23. override func viewDidLoad() {
  24. super.viewDidLoad()
  25. setupViews()
  26. setupLayouts()
  27. }
  28. deinit {
  29. // 控制器销毁时,销毁recorder
  30. recorder.destroy()
  31. }
  32. override func setupViews() {
  33. navigationBar.isHidden = true
  34. view.addSubview(backButton)
  35. view.addSubview(reverseButton)
  36. view.addSubview(flashButton)
  37. view.addSubview(photoButton)
  38. }
  39. override func setupLayouts() {
  40. backButton.snp.makeConstraints { (make) in
  41. make.top.equalTo(kSafeStatusBarHeight+3)
  42. make.left.equalTo(5)
  43. make.width.equalTo(40)
  44. make.height.equalTo(40)
  45. }
  46. reverseButton.snp.makeConstraints { (make) in
  47. make.top.equalTo(86)
  48. make.right.equalTo(-12)
  49. make.width.equalTo(40)
  50. make.height.equalTo(44)
  51. }
  52. reverseButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 6)
  53. flashButton.snp.makeConstraints { (make) in
  54. make.top.equalTo(reverseButton.snp_bottom).offset(20)
  55. make.centerX.equalTo(reverseButton.snp_centerX)
  56. make.width.equalTo(40)
  57. make.height.equalTo(46)
  58. }
  59. flashButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
  60. photoButton.snp.makeConstraints { (make) in
  61. make.bottom.equalTo(-kSafeTabBarHeight-68)
  62. make.centerX.equalToSuperview()
  63. make.size.equalTo(79)
  64. }
  65. }
  66. private lazy var recorder: AliyunIRecorder = {
  67. let recorder = AliyunIRecorder.init(delegate: self as? AliyunIRecorderDelegate, videoSize: CGSize(width: 720, height: 1280))
  68. recorder?.preview = self.view;
  69. return recorder!
  70. }()
  71. private lazy var backButton: UIButton = {
  72. let backButton = UIButton(type: UIButton.ButtonType.custom)
  73. backButton.setImage(kImage(name: "navbar_back_white"), for: UIControl.State.normal)
  74. backButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  75. if let dismissClosure = self?.dismissClosure {
  76. dismissClosure()
  77. }
  78. }).disposed(by: disposeBag)
  79. return backButton
  80. }()
  81. private lazy var reverseButton: UIButton = {
  82. let reverseButton = UIButton(type: UIButton.ButtonType.custom)
  83. reverseButton.setImage(kImage(name: "video_ico_overturn"), for: UIControl.State.normal)
  84. reverseButton.setTitle("翻转", for: UIControl.State.normal)
  85. reverseButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  86. reverseButton.titleLabel?.font = kRegularFont12
  87. reverseButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  88. self?.recorder.switchCameraPosition()
  89. }).disposed(by: disposeBag)
  90. return reverseButton
  91. }()
  92. private lazy var flashButton: UIButton = {
  93. let flashButton = UIButton(type: UIButton.ButtonType.custom)
  94. switch curFlashType {
  95. case .open?:
  96. flashButton.setImage(kImage(name: "video_ico_flashlight"), for: UIControl.State.normal)
  97. case .auto?:
  98. flashButton.setImage(kImage(name: "video_ico_flashlight_auto"), for: UIControl.State.normal)
  99. default:
  100. flashButton.setImage(kImage(name: "video_ico_flashlight_close"), for: UIControl.State.normal)
  101. }
  102. flashButton.setTitle("闪光灯", for: UIControl.State.normal)
  103. flashButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  104. flashButton.titleLabel?.font = kRegularFont12
  105. flashButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  106. switch self?.curFlashType {
  107. case .open?:
  108. self?.curFlashType = FlashType.auto
  109. flashButton.setImage(kImage(name: "video_ico_flashlight_auto"), for: UIControl.State.normal)
  110. self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.auto)
  111. case .auto?:
  112. self?.curFlashType = FlashType.close
  113. flashButton.setImage(kImage(name: "video_ico_flashlight_close"), for: UIControl.State.normal)
  114. self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.off)
  115. default:
  116. self?.curFlashType = FlashType.open
  117. flashButton.setImage(kImage(name: "video_ico_flashlight"), for: UIControl.State.normal)
  118. self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.on)
  119. }
  120. }).disposed(by: disposeBag)
  121. return flashButton
  122. }()
  123. private lazy var photoButton: UIButton = {
  124. let photoButton = UIButton(type: UIButton.ButtonType.custom)
  125. photoButton.setImage(kImage(name: "video_btn_shoot"), for: UIControl.State.normal)
  126. photoButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  127. self?.recorder.takePhoto({ (image, rawImage) in
  128. // 图片为异步获取,需回到主线程进行跳转
  129. DispatchQueue.main.async {
  130. self?.jumpToConfirmController(image!)
  131. }
  132. })
  133. }).disposed(by: disposeBag)
  134. return photoButton
  135. }()
  136. func jumpToConfirmController(_ image: UIImage) {
  137. let confirmVc = PublishConfirmPhotoController()
  138. confirmVc.photoImg = image
  139. confirmVc.pubImgClosure = {
  140. [weak self] (imageArray) in
  141. if let pubImgTransClosure = self?.pubImgTransClosure {
  142. pubImgTransClosure(imageArray)
  143. }
  144. }
  145. self.present(confirmVc, animated: true, completion: nil)
  146. }
  147. }
  148. extension PublishTakePhotoController : JXSegmentedListContainerViewListDelegate {
  149. func listView() -> UIView {
  150. return view
  151. }
  152. func listDidAppear() {
  153. recorder.startPreview()
  154. }
  155. func listDidDisappear() {
  156. recorder.stopPreview()
  157. }
  158. }