|
@@ -9,120 +9,290 @@
|
|
|
import UIKit
|
|
|
import RxSwift
|
|
|
import RxCocoa
|
|
|
+import JXSegmentedView
|
|
|
+
|
|
|
+enum BtnActionType {
|
|
|
+ case back // 返回
|
|
|
+ case reverse // 翻转
|
|
|
+ case music // 音乐
|
|
|
+ case filter // 滤镜
|
|
|
+ case delete // 回删
|
|
|
+ case confirm // 确定
|
|
|
+}
|
|
|
|
|
|
class PublishVideoView: BaseView {
|
|
|
|
|
|
- typealias AllSelectBlock = (_ isAllSelected: Int) -> Void
|
|
|
- var allSelectBlock : AllSelectBlock?
|
|
|
-
|
|
|
- typealias OrderPayBlock = () -> Void
|
|
|
- var orderPayBlock : OrderPayBlock?
|
|
|
-
|
|
|
- var isAllSelected: Int? {
|
|
|
- didSet {
|
|
|
- // 选中状态
|
|
|
- let selStatus = isAllSelected == 1 ? true : false
|
|
|
- allSelectBtn.isSelected = selStatus
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ typealias BtnClickClosure = (_ btnType: BtnActionType) -> Void
|
|
|
+ var btnClickClosure : BtnClickClosure?
|
|
|
|
|
|
+ typealias VideoClosure = (_ isRecording: Int) -> Void
|
|
|
+ var videoClosure : VideoClosure?
|
|
|
|
|
|
override func setupViews() {
|
|
|
self.backgroundColor = kffffffColor
|
|
|
- addSubview(allSelectBtn)
|
|
|
- addSubview(accountBtn)
|
|
|
- addSubview(priceLabel)
|
|
|
- addSubview(prePriceLabel)
|
|
|
- addSubview(previewView)
|
|
|
|
|
|
+ addSubview(backButton)
|
|
|
+ addSubview(recordButton)
|
|
|
+ addSubview(segmentedView)
|
|
|
+
|
|
|
+ addSubview(controlBackView)
|
|
|
+ controlBackView.addSubview(reverseButton)
|
|
|
+ controlBackView.addSubview(musicButton)
|
|
|
+ controlBackView.addSubview(filterButton)
|
|
|
+
|
|
|
+ addSubview(selBackView)
|
|
|
+ selBackView.addSubview(confirmButton)
|
|
|
+ selBackView.addSubview(delButton)
|
|
|
+
|
|
|
+ addSubview(previewView)
|
|
|
insertSubview(previewView, at: 0)
|
|
|
}
|
|
|
|
|
|
override func setupLayouts() {
|
|
|
- allSelectBtn.snp.makeConstraints { (make) in
|
|
|
- make.left.equalToSuperview().offset(10)
|
|
|
- make.centerY.equalToSuperview()
|
|
|
- make.height.equalTo(30)
|
|
|
- make.width.equalTo(54)
|
|
|
+
|
|
|
+ backButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.equalTo(55)
|
|
|
+ make.left.equalTo(5)
|
|
|
+ make.width.equalTo(40)
|
|
|
+ make.height.equalTo(40)
|
|
|
}
|
|
|
- allSelectBtn.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 4)
|
|
|
|
|
|
- accountBtn.snp.makeConstraints { (make) in
|
|
|
- make.right.equalToSuperview().offset(-14)
|
|
|
- make.centerY.equalToSuperview()
|
|
|
+ recordButton.snp.makeConstraints { (make) in
|
|
|
+ make.bottom.equalTo(-56)
|
|
|
+ make.centerX.equalToSuperview()
|
|
|
make.width.equalTo(100)
|
|
|
- make.height.equalTo(37)
|
|
|
+ make.height.equalTo(100)
|
|
|
+ }
|
|
|
+
|
|
|
+ segmentedView.snp.makeConstraints { (make) in
|
|
|
+ make.height.equalTo(40)
|
|
|
+ make.left.equalTo(14)
|
|
|
+ make.right.equalTo(-14)
|
|
|
+ make.bottom.equalTo(recordButton.snp_top).offset(-21)
|
|
|
}
|
|
|
|
|
|
- priceLabel.snp.makeConstraints { (make) in
|
|
|
- make.centerY.equalToSuperview()
|
|
|
- make.right.equalTo(accountBtn.snp_left).offset(-12)
|
|
|
- make.height.equalTo(25)
|
|
|
+ /***** 翻转、音乐、滤镜 *****/
|
|
|
+ controlBackView.snp.makeConstraints { (make) in
|
|
|
+ make.top.equalTo(64)
|
|
|
+ make.right.equalTo(-15)
|
|
|
+ make.width.equalTo(44)
|
|
|
}
|
|
|
|
|
|
- prePriceLabel.snp.makeConstraints { (make) in
|
|
|
- make.centerY.equalToSuperview()
|
|
|
- make.right.equalTo(priceLabel.snp_left).offset(-1)
|
|
|
+ reverseButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.left.right.equalToSuperview()
|
|
|
+ make.height.equalTo(46)
|
|
|
}
|
|
|
+ reverseButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
|
|
|
|
|
|
+ musicButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.equalTo(reverseButton.snp_bottom).offset(20)
|
|
|
+ make.left.right.equalToSuperview()
|
|
|
+ make.height.equalTo(46)
|
|
|
+ }
|
|
|
+ musicButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
|
|
|
+
|
|
|
+ filterButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.equalTo(musicButton.snp_bottom).offset(20)
|
|
|
+ make.left.right.equalToSuperview()
|
|
|
+ make.height.equalTo(46)
|
|
|
+ make.bottom.equalToSuperview()
|
|
|
+ }
|
|
|
+ filterButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
|
|
|
+
|
|
|
+ /***** 回删、确定 *****/
|
|
|
+ selBackView.snp.makeConstraints { (make) in
|
|
|
+ make.bottom.equalTo(-83)
|
|
|
+ make.right.equalTo(-24*kScaleWidth)
|
|
|
+ make.height.equalTo(50)
|
|
|
+ }
|
|
|
+
|
|
|
+ confirmButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.bottom.right.equalToSuperview()
|
|
|
+ make.width.equalTo(30)
|
|
|
+ }
|
|
|
+ confirmButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
|
|
|
+
|
|
|
+ delButton.snp.makeConstraints { (make) in
|
|
|
+ make.right.equalTo(confirmButton.snp_left).offset(-30*kScaleWidth)
|
|
|
+ make.top.bottom.equalToSuperview()
|
|
|
+ make.width.equalTo(30)
|
|
|
+ make.left.equalToSuperview()
|
|
|
+ }
|
|
|
+ delButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
|
|
|
+
|
|
|
+ /***** 预览视图 *****/
|
|
|
previewView.snp.makeConstraints { (make) in
|
|
|
make.edges.equalToSuperview()
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- private lazy var allSelectBtn: UIButton = {
|
|
|
- let allSelectBtn = UIButton(type: UIButton.ButtonType.custom)
|
|
|
- allSelectBtn.setTitle("全选", for: UIControl.State.normal)
|
|
|
- allSelectBtn.setTitleColor(k333333Color, for: UIControl.State.normal)
|
|
|
- allSelectBtn.setTitleColor(k666666Color, for: UIControl.State.selected)
|
|
|
- allSelectBtn.setImage(kImage(name: "common_uncheck_icon"), for: UIControl.State.normal)
|
|
|
- allSelectBtn.setImage(kImage(name: "common_check_icon"), for: UIControl.State.selected)
|
|
|
- allSelectBtn.titleLabel?.font = kScaleRegularFont16
|
|
|
- allSelectBtn.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
- allSelectBtn.isSelected = !allSelectBtn.isSelected
|
|
|
- if let allSelectBlock = self?.allSelectBlock {
|
|
|
- let isAllSel: Int = allSelectBtn.isSelected == true ? 1 : 0
|
|
|
- allSelectBlock(isAllSel)
|
|
|
+ // MARK: - 创建视图控件
|
|
|
+ //1.初始化JXSegmentedViewx
|
|
|
+ lazy var segmentedView: JXSegmentedView = {
|
|
|
+ let segmentedView = JXSegmentedView()
|
|
|
+ segmentedView.delegate = self
|
|
|
+ segmentedView.dataSource = segmentedDataSource
|
|
|
+ segmentedView.selectItemAt(index: 2)
|
|
|
+ segmentedView.defaultSelectedIndex = 2
|
|
|
+ segmentedView.backgroundColor = kRGBAColor(r: 0, g: 0, b: 0, a: 0.2)
|
|
|
+ segmentedView.cornerRadius = 20
|
|
|
+ segmentedView.masksToBounds = true
|
|
|
+ return segmentedView
|
|
|
+ }()
|
|
|
+
|
|
|
+ //2.初始化dataSource
|
|
|
+ private lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
|
|
|
+ let segmentedDataSource = JXSegmentedTitleDataSource()
|
|
|
+ segmentedDataSource.isTitleColorGradientEnabled = true
|
|
|
+ segmentedDataSource.isItemSpacingAverageEnabled = true
|
|
|
+ segmentedDataSource.isTitleZoomEnabled = true
|
|
|
+ segmentedDataSource.titleNormalColor = kffffffColor
|
|
|
+ segmentedDataSource.titleSelectedColor = k333333Color
|
|
|
+ segmentedDataSource.titleNormalFont = kRegularFont14!
|
|
|
+ segmentedDataSource.titleSelectedFont = kBoldFont22
|
|
|
+ segmentedDataSource.titles = ["极慢","慢","标准","快","极快"]
|
|
|
+ //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
|
|
|
+ segmentedDataSource.reloadData(selectedIndex: 2)
|
|
|
+
|
|
|
+ return segmentedDataSource
|
|
|
+ }()
|
|
|
+
|
|
|
+ //3.初始化指示器indicator
|
|
|
+ private lazy var indicator: JXSegmentedIndicatorBackgroundView = {
|
|
|
+ let indicator = JXSegmentedIndicatorBackgroundView()
|
|
|
+// indicator.indicatorColors = [k62CC74Color,.white,.white]
|
|
|
+ indicator.indicatorHeight = 40
|
|
|
+ return indicator
|
|
|
+ }()
|
|
|
+
|
|
|
+ lazy var backButton: UIButton = {
|
|
|
+ let backButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ backButton.setImage(kImage(name: "video_btn_close_white"), for: UIControl.State.normal)
|
|
|
+ backButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ if let btnClickClosure = self?.btnClickClosure {
|
|
|
+ btnClickClosure(BtnActionType.back)
|
|
|
+ }
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return backButton
|
|
|
+ }()
|
|
|
+
|
|
|
+ // MARK:放置"翻转、音乐、滤镜"のView
|
|
|
+ lazy var controlBackView: UIView = {
|
|
|
+ let controlBackView = UIView()
|
|
|
+ return controlBackView
|
|
|
+ }()
|
|
|
+
|
|
|
+ private lazy var reverseButton: UIButton = {
|
|
|
+ let reverseButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ reverseButton.setImage(kImage(name: "video_ico_overturn"), for: UIControl.State.normal)
|
|
|
+ reverseButton.setTitle("翻转", for: UIControl.State.normal)
|
|
|
+ reverseButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
|
|
|
+ reverseButton.titleLabel?.font = kRegularFont12
|
|
|
+ reverseButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ if let btnClickClosure = self?.btnClickClosure {
|
|
|
+ btnClickClosure(BtnActionType.reverse)
|
|
|
}
|
|
|
}).disposed(by: disposeBag)
|
|
|
- return allSelectBtn
|
|
|
+ return reverseButton
|
|
|
}()
|
|
|
|
|
|
- private lazy var accountBtn: UIButton = {
|
|
|
- let accountBtn = UIButton(type: UIButton.ButtonType.custom)
|
|
|
- accountBtn.setTitle("结算(0)", for: UIControl.State.normal)
|
|
|
- accountBtn.titleLabel?.font = kScaleRegularFont15
|
|
|
- accountBtn.cornerRadius = 18
|
|
|
- accountBtn.masksToBounds = true
|
|
|
- accountBtn.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
- if let orderPayBlock = self?.orderPayBlock {
|
|
|
- orderPayBlock()
|
|
|
+ private lazy var musicButton: UIButton = {
|
|
|
+ let musicButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ musicButton.setImage(kImage(name: "video_ico_music"), for: UIControl.State.normal)
|
|
|
+ musicButton.setTitle("音乐", for: UIControl.State.normal)
|
|
|
+ musicButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
|
|
|
+ musicButton.titleLabel?.font = kRegularFont12
|
|
|
+ musicButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ if let btnClickClosure = self?.btnClickClosure {
|
|
|
+ btnClickClosure(BtnActionType.music)
|
|
|
}
|
|
|
}).disposed(by: disposeBag)
|
|
|
- return accountBtn
|
|
|
+ return musicButton
|
|
|
}()
|
|
|
|
|
|
- private lazy var priceLabel: UILabel = {
|
|
|
- let priceLabel = UILabel()
|
|
|
- priceLabel.textColor = kFE352BColor
|
|
|
- priceLabel.font = kScaleBoldFont18
|
|
|
- return priceLabel
|
|
|
+ private lazy var filterButton: UIButton = {
|
|
|
+ let filterButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ filterButton.setImage(kImage(name: "video_ico_filter"), for: UIControl.State.normal)
|
|
|
+ filterButton.setTitle("滤镜", for: UIControl.State.normal)
|
|
|
+ filterButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
|
|
|
+ filterButton.titleLabel?.font = kRegularFont12
|
|
|
+ filterButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ if let btnClickClosure = self?.btnClickClosure {
|
|
|
+ btnClickClosure(BtnActionType.filter)
|
|
|
+ }
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return filterButton
|
|
|
+ }()
|
|
|
+
|
|
|
+ // MARK:放置"回删、确定"のView
|
|
|
+ lazy var selBackView: UIView = {
|
|
|
+ let selBackView = UIView()
|
|
|
+ return selBackView
|
|
|
}()
|
|
|
|
|
|
- private lazy var prePriceLabel: UILabel = {
|
|
|
- let prePriceLabel = UILabel()
|
|
|
- prePriceLabel.text = "合计"
|
|
|
- prePriceLabel.textColor = k333333Color
|
|
|
- prePriceLabel.font = kScaleRegularFont16
|
|
|
- return prePriceLabel
|
|
|
+ private lazy var delButton: UIButton = {
|
|
|
+ let delButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ delButton.setImage(kImage(name: "video_btn_delete"), for: UIControl.State.normal)
|
|
|
+ delButton.setTitle("回删", for: UIControl.State.normal)
|
|
|
+ delButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
|
|
|
+ delButton.titleLabel?.font = kRegularFont12
|
|
|
+ delButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ if let btnClickClosure = self?.btnClickClosure {
|
|
|
+ btnClickClosure(BtnActionType.delete)
|
|
|
+ }
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return delButton
|
|
|
}()
|
|
|
|
|
|
- // 预览View
|
|
|
+ private lazy var confirmButton: UIButton = {
|
|
|
+ let confirmButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ confirmButton.setImage(kImage(name: "video_btn_submit"), for: UIControl.State.normal)
|
|
|
+ confirmButton.setTitle("确定", for: UIControl.State.normal)
|
|
|
+ confirmButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
|
|
|
+ confirmButton.titleLabel?.font = kRegularFont12
|
|
|
+ confirmButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ if let btnClickClosure = self?.btnClickClosure {
|
|
|
+ btnClickClosure(BtnActionType.confirm)
|
|
|
+ }
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return confirmButton
|
|
|
+ }()
|
|
|
+
|
|
|
+ // MARK:录制のButton
|
|
|
+ private lazy var recordButton: UIButton = {
|
|
|
+ let recordButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ recordButton.setImage(kImage(name: "video_btn_shoot"), for: UIControl.State.normal)
|
|
|
+ recordButton.setImage(kImage(name: "video_btn_pause"), for: UIControl.State.selected)
|
|
|
+ recordButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ recordButton.isSelected = !recordButton.isSelected
|
|
|
+ if let videoClosure = self?.videoClosure {
|
|
|
+ let isRecording: Int = recordButton.isSelected == true ? 1 : 0
|
|
|
+ videoClosure(isRecording)
|
|
|
+ }
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+
|
|
|
+ return recordButton
|
|
|
+ }()
|
|
|
+
|
|
|
+
|
|
|
+ // MARK:预览View
|
|
|
lazy var previewView: UIView = {
|
|
|
let previewView = UIView()
|
|
|
return previewView
|
|
|
}()
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+extension PublishVideoView : JXSegmentedViewDelegate {
|
|
|
+
|
|
|
+ // 点击选中的情况才会调用该方法
|
|
|
+ func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
|
|
|
+ print("----选中\(index)")
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 是否允许点击选中目标index的item
|
|
|
+ func segmentedView(_ segmentedView: JXSegmentedView, canClickItemAt index: Int) -> Bool {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+}
|
|
|
+
|