PublishViewController.swift 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. //
  2. // PublishViewController.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 JXSegmentedView
  10. class PublishViewController: BaseViewController {
  11. // 视频选择页参数配置类
  12. var mediaConfig: AliyunMediaConfig {
  13. //默认配置
  14. let mediaConfig = AliyunMediaConfig.default()
  15. mediaConfig?.minDuration = 2.0
  16. mediaConfig?.maxDuration = 10.0 * 60
  17. mediaConfig?.fps = 25
  18. mediaConfig?.gop = 5
  19. mediaConfig?.cutMode = AliyunMediaCutMode.scaleAspectFill
  20. mediaConfig?.videoOnly = false
  21. mediaConfig?.backgroundColor = UIColor.black
  22. return mediaConfig!
  23. }
  24. override func viewDidLoad() {
  25. super.viewDidLoad()
  26. setupViews()
  27. setupLayouts()
  28. setupData()
  29. }
  30. override func setupViews() {
  31. view.addSubview(listContainerView)
  32. view.addSubview(segmentedView)
  33. }
  34. override func setupLayouts() {
  35. listContainerView.snp.makeConstraints { (make) in
  36. make.top.left.right.equalToSuperview()
  37. make.bottom.equalToSuperview()
  38. }
  39. segmentedView.snp.makeConstraints { (make) in
  40. make.height.equalTo(48)
  41. make.left.equalTo(0)
  42. make.right.equalTo(0)
  43. make.bottom.equalTo(-kSafeTabBarHeight)
  44. }
  45. }
  46. override func setupData() {
  47. }
  48. //1.初始化JXSegmentedViewx
  49. private lazy var segmentedView: JXSegmentedView = {
  50. let segmentedView = JXSegmentedView()
  51. segmentedView.delegate = self
  52. segmentedView.dataSource = segmentedDataSource
  53. segmentedView.indicators = [indicator]
  54. segmentedView.contentScrollView = listContainerView.scrollView
  55. segmentedView.selectItemAt(index: 0)
  56. segmentedView.defaultSelectedIndex = 0
  57. return segmentedView
  58. }()
  59. //2.初始化dataSource
  60. private lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
  61. let segmentedDataSource = JXSegmentedTitleDataSource()
  62. segmentedDataSource.isTitleColorGradientEnabled = true
  63. segmentedDataSource.isItemSpacingAverageEnabled = true
  64. segmentedDataSource.isTitleZoomEnabled = true
  65. segmentedDataSource.titleNormalColor = kbbbbbbColor
  66. segmentedDataSource.titleSelectedColor = k333333Color
  67. segmentedDataSource.titleNormalFont = kRegularFont14!
  68. segmentedDataSource.titleSelectedFont = kBoldFont22
  69. segmentedDataSource.titles = ["相册","拍视频","拍照"]
  70. //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
  71. segmentedDataSource.reloadData(selectedIndex: 0)
  72. return segmentedDataSource
  73. }()
  74. //3.初始化指示器indicator
  75. private lazy var indicator: JXSegmentedIndicatorRainbowLineView = {
  76. let indicator = JXSegmentedIndicatorRainbowLineView()
  77. indicator.indicatorColors = [k62CC74Color,.white,.white]
  78. indicator.indicatorHeight = 3
  79. indicator.indicatorWidth = 20
  80. return indicator
  81. }()
  82. //4.初始化JXSegmentedListContainerView
  83. private lazy var listContainerView: JXSegmentedListContainerView = {
  84. let listContainerView = JXSegmentedListContainerView(dataSource: self)
  85. listContainerView.didAppearPercent = 0.01
  86. listContainerView.defaultSelectedIndex = 0
  87. listContainerView.scrollView.isScrollEnabled = false
  88. return listContainerView
  89. }()
  90. }
  91. extension PublishViewController : JXSegmentedViewDelegate {
  92. //点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,而不关心具体是点击还是滚动选中的情况。
  93. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  94. switch index {
  95. case 0:
  96. self.segmentedView.backgroundColor = .white
  97. case 1:
  98. self.segmentedView.backgroundColor = .clear
  99. case 2:
  100. self.segmentedView.backgroundColor = .clear
  101. default:
  102. break
  103. }
  104. }
  105. // 点击选中的情况才会调用该方法
  106. func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
  107. //传递didClickSelectedItemAt事件给listContainerView,必须调用!!!
  108. listContainerView.didClickSelectedItem(at: index)
  109. }
  110. // 滚动选中的情况才会调用该方法
  111. func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) {
  112. switch index {
  113. case 0:
  114. let segmentedTitleItemModel = JXSegmentedTitleItemModel()
  115. segmentedDataSource.refreshItemModel(segmentedView, currentSelectedItemModel: segmentedDataSource.dataSource[index], willSelectedItemModel: segmentedTitleItemModel, selectedType: JXSegmentedViewItemSelectedType.scroll)
  116. case 1:
  117. let segmentedTitleItemModel = JXSegmentedTitleItemModel()
  118. segmentedDataSource.refreshItemModel(segmentedView, currentSelectedItemModel: segmentedDataSource.dataSource[index], willSelectedItemModel: segmentedTitleItemModel, selectedType: JXSegmentedViewItemSelectedType.scroll)
  119. case 2:
  120. let segmentedTitleItemModel = JXSegmentedTitleItemModel()
  121. segmentedDataSource.refreshItemModel(segmentedView, currentSelectedItemModel: segmentedDataSource.dataSource[index], willSelectedItemModel: segmentedTitleItemModel, selectedType: JXSegmentedViewItemSelectedType.scroll)
  122. default:
  123. break
  124. }
  125. }
  126. // 正在滚动中的回调
  127. func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
  128. self.segmentedView.backgroundColor = .clear
  129. //传递scrolling事件给listContainerView,必须调用!!!
  130. listContainerView.segmentedViewScrolling(from: leftIndex, to: rightIndex, percent: percent, selectedIndex: segmentedView.selectedIndex)
  131. }
  132. /// 是否允许点击选中目标index的item
  133. func segmentedView(_ segmentedView: JXSegmentedView, canClickItemAt index: Int) -> Bool {
  134. return true
  135. }
  136. }
  137. extension PublishViewController :JXSegmentedListContainerViewDataSource {
  138. func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
  139. if let titleDataSource = segmentedView.dataSource as? JXSegmentedBaseDataSource {
  140. return titleDataSource.dataSource.count
  141. }
  142. return 0
  143. }
  144. func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
  145. switch index {
  146. case 0:
  147. let mediaVc = KSMediaPickerController(maxVideoItemCount: 1, maxPictureItemCount: 9)
  148. mediaVc.dismissClosure = {
  149. [weak self] in
  150. self?.dismiss(animated: true, completion: nil)
  151. }
  152. return mediaVc
  153. case 1:
  154. let videoVc = AliyunMagicCameraViewController()
  155. videoVc.quVideo = mediaConfig
  156. return videoVc
  157. // let videoVc = PublishVideoRecorderController()
  158. // videoVc.dismissClosure = {
  159. // [weak self] in
  160. // self?.dismiss(animated: true, completion: nil)
  161. // }
  162. // videoVc.editClosure = {
  163. // [weak self] in
  164. // let editVc = PublishEditController()
  165. // self?.navigationController?.pushViewController(editVc, animated: true)
  166. // }
  167. // videoVc.hideSegmentClosure = {
  168. // [weak self] (isHidden) in
  169. // self?.segmentedView.isHidden = isHidden
  170. // }
  171. // return videoVc
  172. default:
  173. let photoVc = PublishTakePhotoController()
  174. photoVc.dismissClosure = {
  175. [weak self] in
  176. self?.dismiss(animated: true, completion: nil)
  177. }
  178. return photoVc
  179. }
  180. }
  181. }