|
@@ -11,11 +11,23 @@ import RxSwift
|
|
|
import JXSegmentedView
|
|
|
import AliyunVideoSDKPro
|
|
|
|
|
|
+enum FlashType : Int {
|
|
|
+ case close = 0
|
|
|
+ case open = 1
|
|
|
+ case auto = 2
|
|
|
+}
|
|
|
+
|
|
|
class PublishTakePhotoController: BaseViewController {
|
|
|
|
|
|
+ typealias DismissClosure = () -> Void
|
|
|
+ var dismissClosure: DismissClosure?
|
|
|
+
|
|
|
+ var curFlashType : FlashType! = .close
|
|
|
+
|
|
|
override func viewDidLoad() {
|
|
|
super.viewDidLoad()
|
|
|
setupViews()
|
|
|
+ setupLayouts()
|
|
|
}
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
@@ -25,25 +37,122 @@ class PublishTakePhotoController: BaseViewController {
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
|
navigationBar.isHidden = false
|
|
|
recorder.destroy()
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
override func setupViews() {
|
|
|
-
|
|
|
+ view.addSubview(backButton)
|
|
|
+ view.addSubview(reverseButton)
|
|
|
+ view.addSubview(flashButton)
|
|
|
+ view.addSubview(photoButton)
|
|
|
|
|
|
}
|
|
|
|
|
|
- private lazy var recorder: AliyunIRecorder = {
|
|
|
+ override func setupLayouts() {
|
|
|
+ backButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.equalTo(23)
|
|
|
+ make.left.equalTo(5)
|
|
|
+ make.width.equalTo(40)
|
|
|
+ make.height.equalTo(40)
|
|
|
+ }
|
|
|
|
|
|
+ reverseButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.equalTo(86)
|
|
|
+ make.right.equalTo(-12)
|
|
|
+ make.width.equalTo(40)
|
|
|
+ make.height.equalTo(44)
|
|
|
+ }
|
|
|
+ reverseButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 6)
|
|
|
|
|
|
- let recorder = AliyunIRecorder.init(delegate: self as? AliyunIRecorderDelegate, videoSize: CGSize(width: 720, height: 1280))
|
|
|
+ flashButton.snp.makeConstraints { (make) in
|
|
|
+ make.top.equalTo(reverseButton.snp_bottom).offset(20)
|
|
|
+ make.centerX.equalTo(reverseButton.snp_centerX)
|
|
|
+ make.width.equalTo(40)
|
|
|
+ make.height.equalTo(46)
|
|
|
+ }
|
|
|
+ flashButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.top, imageTitleSpace: 4)
|
|
|
|
|
|
- // 预览视图,必须设置
|
|
|
+ photoButton.snp.makeConstraints { (make) in
|
|
|
+ make.bottom.equalTo(-kSafeTabBarHeight-68)
|
|
|
+ make.centerX.equalToSuperview()
|
|
|
+ make.size.equalTo(79)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private lazy var recorder: AliyunIRecorder = {
|
|
|
+ let recorder = AliyunIRecorder.init(delegate: self as? AliyunIRecorderDelegate, videoSize: CGSize(width: 720, height: 1280))
|
|
|
recorder?.preview = self.view;
|
|
|
-
|
|
|
-
|
|
|
return recorder!
|
|
|
}()
|
|
|
|
|
|
+ private lazy var backButton: UIButton = {
|
|
|
+ let backButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ backButton.setImage(kImage(name: "navbar_back_white"), for: UIControl.State.normal)
|
|
|
+ backButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ if let dismissClosure = self?.dismissClosure {
|
|
|
+ dismissClosure()
|
|
|
+ }
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return backButton
|
|
|
+ }()
|
|
|
+
|
|
|
+ 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
|
|
|
+ self?.recorder.switchCameraPosition()
|
|
|
+
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return reverseButton
|
|
|
+ }()
|
|
|
+
|
|
|
+ private lazy var flashButton: UIButton = {
|
|
|
+ let flashButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ switch curFlashType {
|
|
|
+ case .open?:
|
|
|
+ flashButton.setImage(kImage(name: "video_ico_flashlight"), for: UIControl.State.normal)
|
|
|
+ case .auto?:
|
|
|
+ flashButton.setImage(kImage(name: "video_ico_flashlight_auto"), for: UIControl.State.normal)
|
|
|
+ default:
|
|
|
+ flashButton.setImage(kImage(name: "video_ico_flashlight_close"), for: UIControl.State.normal)
|
|
|
+ }
|
|
|
+ flashButton.setTitle("闪光灯", for: UIControl.State.normal)
|
|
|
+ flashButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
|
|
|
+ flashButton.titleLabel?.font = kRegularFont12
|
|
|
+ flashButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ switch self?.curFlashType {
|
|
|
+ case .open?:
|
|
|
+ self?.curFlashType = FlashType.auto
|
|
|
+ flashButton.setImage(kImage(name: "video_ico_flashlight_auto"), for: UIControl.State.normal)
|
|
|
+ self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.auto)
|
|
|
+ case .auto?:
|
|
|
+ self?.curFlashType = FlashType.close
|
|
|
+ flashButton.setImage(kImage(name: "video_ico_flashlight_close"), for: UIControl.State.normal)
|
|
|
+ self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.off)
|
|
|
+ default:
|
|
|
+ self?.curFlashType = FlashType.open
|
|
|
+ flashButton.setImage(kImage(name: "video_ico_flashlight"), for: UIControl.State.normal)
|
|
|
+ self?.recorder.switchTorch(with: AliyunIRecorderTorchMode.on)
|
|
|
+ }
|
|
|
+
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return flashButton
|
|
|
+ }()
|
|
|
+
|
|
|
+ private lazy var photoButton: UIButton = {
|
|
|
+ let photoButton = UIButton(type: UIButton.ButtonType.custom)
|
|
|
+ photoButton.setImage(kImage(name: "video_btn_shoot"), for: UIControl.State.normal)
|
|
|
+ photoButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
+ self?.recorder.takePhoto({ (image, rawImage) in
|
|
|
+ print("----\n")
|
|
|
+ print(image as Any)
|
|
|
+ })
|
|
|
+ }).disposed(by: disposeBag)
|
|
|
+ return photoButton
|
|
|
+ }()
|
|
|
+
|
|
|
}
|
|
|
|
|
|
extension PublishTakePhotoController : JXSegmentedListContainerViewListDelegate {
|