123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- //
- // PublishTakePhotoController.swift
- // RainbowPlanet
- //
- // Created by Christopher on 2019/6/18.
- // Copyright © 2019 RainbowPlanet. All rights reserved.
- //
- import UIKit
- 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?
-
- typealias PubImgTransClosure = (_ selectedAssetArray: Array<UIImage>) -> Void
- var pubImgTransClosure: PubImgTransClosure?
-
- var curFlashType : FlashType! = .close
-
- override func viewDidLoad() {
- super.viewDidLoad()
- setupViews()
- setupLayouts()
- }
-
- deinit {
- // 控制器销毁时,销毁recorder
- recorder.destroy()
- }
-
- override func setupViews() {
- navigationBar.isHidden = true
-
- view.addSubview(backButton)
- view.addSubview(reverseButton)
- view.addSubview(flashButton)
- view.addSubview(photoButton)
-
- }
-
- override func setupLayouts() {
- backButton.snp.makeConstraints { (make) in
- make.top.equalTo(kSafeStatusBarHeight+3)
- 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)
-
- 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
- // 图片为异步获取,需回到主线程进行跳转
- DispatchQueue.main.async {
- self?.jumpToConfirmController(image!)
- }
- })
- }).disposed(by: disposeBag)
- return photoButton
- }()
-
- func jumpToConfirmController(_ image: UIImage) {
- let confirmVc = PublishConfirmPhotoController()
- confirmVc.photoImg = image
- confirmVc.pubImgClosure = {
- [weak self] (imageArray) in
- if let pubImgTransClosure = self?.pubImgTransClosure {
- pubImgTransClosure(imageArray)
- }
- }
- self.present(confirmVc, animated: true, completion: nil)
- }
-
- }
- extension PublishTakePhotoController : JXSegmentedListContainerViewListDelegate {
- func listView() -> UIView {
- return view
- }
- func listDidAppear() {
- recorder.startPreview()
- }
- func listDidDisappear() {
- recorder.stopPreview()
- }
- }
|