Quellcode durchsuchen

BFFramework清理

huzhiqiang vor 3 Jahren
Ursprung
Commit
99b56b054a

+ 0 - 0
BFFramework/Classes/BFModules/BFCustomViews/controllers/.gitkeep


+ 0 - 0
BFFramework/Classes/BFModules/BFDBManager/.gitkeep


+ 0 - 0
BFFramework/Classes/BFModules/BFDebug/.gitkeep


+ 0 - 0
BFFramework/Classes/BFModules/BFMacro/.gitkeep


+ 0 - 0
BFFramework/Classes/BFModules/BFNetworkManger/.gitkeep


+ 1 - 1
BFFramework/Classes/BFModules/BFUtility/PQSingletoVideoPlayer.swift

@@ -276,7 +276,7 @@ extension PQSingletoVideoPlayer: TXVodPlayListener {
             }
         case PLAY_ERR_HEVC_DECODE_FAIL.rawValue, PLAY_ERR_HLS_KEY.rawValue, PLAY_ERR_GET_PLAYINFO_FAIL.rawValue, PLAY_WARNING_VIDEO_DECODE_FAIL.rawValue, PLAY_WARNING_AUDIO_DECODE_FAIL.rawValue: // H265解码失败,HLS解码key获取失败,获取点播文件信息失败,当前视频解码失败,当前音频解码失败
             if playStatusBloc != nil {
-                playStatusBloc!(.PQVIDEO_PLAY_STATUS_FAUILE)
+                playStatusBloc!(PQVIDEO_PLAY_STATUS.PQVIDEO_PLAY_STATUS_FAUILE)
             }
             if !isPlayerError, playVideoData != nil {
                 isPlayerError = true

+ 0 - 203
BFFramework/Classes/Base/Controller/PQBaseViewController.swift

@@ -1,203 +0,0 @@
-//
-//  PQBaseViewController.swift
-//  PQSpeed
-//
-//  Created by SanW on 2020/5/25.
-//  Copyright © 2020 BytesFlow. All rights reserved.
-//
-
-// import MediaPlayer
-import Alamofire
-import UIKit
-open class PQBaseViewController: UIViewController, UIGestureRecognizerDelegate {
-    // 侧滑拦截返回
-    public var popGestureHandle: (() -> Void)?
-    public var naviTitle: String? // 标题
-    public var rightButton: UIButton? // 右边按钮
-    public var backButton: UIButton? // 左边按钮
-    public var navTitleLabel: UILabel? // 标题
-    public var navHeadImageView: UIImageView? // 导航条
-    public var lineView: UIView? // 导航分隔线
-    public var isHiddenStatus: Bool = false { // 更新状态栏
-        didSet {
-            setNeedsStatusBarAppearanceUpdate()
-        }
-    }
-
-    /// <#Description#>
-    public var isPresent: Bool {
-        var isPresent = true
-        let viewcontrollers = navigationController?.viewControllers
-        if (viewcontrollers?.count ?? 0) > 1 {
-            if viewcontrollers?[(viewcontrollers?.count ?? 1) - 1] == self {
-                isPresent = false
-            }
-        }
-        return isPresent
-    }
-
-    public lazy var manager: NetworkReachabilityManager? = {
-        let manager = NetworkReachabilityManager(host: "www.baidu.com")
-        manager?.listener = { status in
-            if status == .reachable(.wwan) || status == .reachable(.ethernetOrWiFi) {}
-        }
-        return manager
-    }()
-
-    override open func viewDidLoad() {
-        super.viewDidLoad()
-        navigationController?.isNavigationBarHidden = true
-        view.backgroundColor = PQBFConfig.shared.styleBackGroundColor
-        navHeadImageView = UIImageView(image: UIImage())
-        navHeadImageView?.isUserInteractionEnabled = true
-        navHeadImageView?.backgroundColor = PQBFConfig.shared.styleBackGroundColor
-        navHeadImageView?.frame = CGRect(x: 0, y: 0, width: cScreenWidth, height: cDevice_iPhoneNavBarAndStatusBarHei)
-        view.addSubview(navHeadImageView!)
-
-        lineView = UIView(frame: CGRect(x: 0, y: (navHeadImageView?.frame.maxY ?? cDevice_iPhoneNavBarAndStatusBarHei) - 0.5, width: cScreenWidth, height: 0.5))
-        lineView?.backgroundColor = PQBFConfig.shared.styleBackGroundColor
-        view.addSubview(lineView!)
-        UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
-        automaticallyAdjustsScrollViewInsets = false
-        navigationController?.interactivePopGestureRecognizer?.delegate = self
-        fd_prefersNavigationBarHidden = true
-    }
-
-    public func hiddenNavigation() {
-        navHeadImageView?.isHidden = true
-        lineView?.isHidden = true
-    }
-
-    public func showNavigation() {
-        if navHeadImageView != nil {
-            navHeadImageView?.isHidden = false
-            lineView?.isHidden = false
-            view.bringSubviewToFront(navHeadImageView!)
-        }
-    }
-
-    open func leftBackButton() {
-        leftButton(image: "icon_detail_back")
-    }
-
-    public func leftButton(image: String?, tintColor: UIColor? = nil) {
-        let leftButton = UIButton(type: .custom)
-        leftButton.frame = CGRect(x: 0, y: cDevice_iPhoneStatusBarHei, width: cDefaultMargin * 4, height: cDefaultMargin * 4)
-        leftButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: -5, right: 0)
-        if tintColor != nil {
-            leftButton.tintColor = tintColor
-            leftButton.setImage(UIImage().BF_Image(named: image ?? "icon_detail_back").withRenderingMode(.alwaysTemplate), for: .normal)
-        } else {
-            leftButton.setImage(UIImage().BF_Image(named: image ?? "icon_detail_back"), for: .normal)
-        }
-        leftButton.addTarget(self, action: #selector(backBtnClick), for: .touchUpInside)
-        navHeadImageView?.addSubview(leftButton)
-        backButton = leftButton
-    }
-
-    public func rightButtonItem(image: String?, title: String?) {
-        let rightButtonItem = UIButton(type: .custom)
-        var rightW: CGFloat = cDefaultMargin
-        if title != nil, title?.count ?? 0 > 0 {
-            rightW = rightW + sizeWithText(text: title ?? "", font: UIFont.systemFont(ofSize: 16), size: CGSize(width: CGFloat.greatestFiniteMagnitude, height: cDefaultMargin * 4)).width
-            rightButtonItem.setTitle(title, for: .normal)
-            rightButtonItem.setTitleColor(UIColor.hexColor(hexadecimal: "#242F44"), for: .normal)
-            rightButtonItem.titleLabel?.font = UIFont.systemFont(ofSize: 16)
-        }
-        if image != nil, image?.count ?? 0 > 0 {
-            rightW = rightW + cDefaultMargin * 4
-            rightButtonItem.setImage(UIImage(named: image ?? ""), for: .normal)
-            rightButtonItem.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: (title != nil && title?.count ?? 0 > 0) ? 0 : -5, right: 0)
-        }
-        rightButtonItem.adjustsImageWhenHighlighted = false
-        rightButtonItem.frame = CGRect(x: cScreenWidth - rightW, y: cDevice_iPhoneStatusBarHei, width: rightW, height: cDefaultMargin * 4)
-        rightButtonItem.addTarget(self, action: #selector(rightBtnClick(sender:)), for: .touchUpInside)
-        rightButtonItem.contentHorizontalAlignment = .center
-        navHeadImageView?.addSubview(rightButtonItem)
-        rightButton = rightButtonItem
-    }
-
-    public func setTitle(title: String?, color: UIColor = UIColor.white) {
-        naviTitle = title
-        if navTitleLabel == nil {
-            let titleLabel = UILabel(frame: CGRect(x: cDefaultMargin * 5, y: cDevice_iPhoneStatusBarHei, width: cScreenWidth - 100, height: cDefaultMargin * 4))
-            titleLabel.textColor = color
-            titleLabel.textAlignment = .center
-            navTitleLabel = titleLabel
-            navHeadImageView?.addSubview(titleLabel)
-        }
-        navTitleLabel?.text = title
-    }
-
-    @objc open func rightBtnClick(sender _: UIButton) {}
-
-    @objc open func backBtnClick() {
-        if isPresent {
-            dismiss(animated: true, completion: nil)
-        } else {
-            navigationController?.popViewController(animated: true)
-        }
-    }
-
-    override open func viewDidAppear(_ animated: Bool) {
-        super.viewDidAppear(animated)
-    }
-
-    override open func viewWillDisappear(_ animated: Bool) {
-        super.viewWillDisappear(animated)
-        PQLoadingHUB.shared.dismissHUB()
-    }
-
-    override open func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
-
-        if view.viewWithTag(cGuideTag) != nil {
-            view.viewWithTag(cGuideTag)?.removeFromSuperview()
-        }
-    }
-
-    deinit {
-        PQNotification.removeObserver(self)
-        BFLog(1, message: "\(String(describing: type(of: self)))被销毁 release")
-    }
-
-    override open var preferredStatusBarStyle: UIStatusBarStyle {
-        if PQBFConfig.shared.statusBarStyle == .dark {
-            if #available(iOS 13.0, *) {
-                return .darkContent
-            } else {
-                return .default
-            }
-        } else {
-            return .lightContent
-        }
-    }
-
-    override open var prefersStatusBarHidden: Bool {
-        return isHiddenStatus
-    }
-
-    /// 禁止滑动返回
-    /// - Returns: <#description#>
-    public func disablePopGesture() -> PQBaseViewController {
-        let traget = navigationController?.interactivePopGestureRecognizer?.delegate
-        let pan = UIPanGestureRecognizer(target: traget, action: #selector(popGesture(panGes:)))
-        view.addGestureRecognizer(pan)
-        return self
-    }
-
-    /// 拦截侧滑手势
-    /// - Returns: <#description#>
-    @objc private  func popGesture(panGes: UIPanGestureRecognizer) {
-        if panGes.state == .ended, popGestureHandle != nil {
-            popGestureHandle!()
-        }
-    }
-
-    open func gestureRecognizer(_: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
-        if touch.view is UISlider {
-            return false
-        }
-        return true
-    }
-}

+ 0 - 280
BFFramework/Classes/Base/Controller/PQPhotoAlbumController.swift

@@ -1,280 +0,0 @@
-//
-//  PQPhotoAlbumController.swift
-//  PQSpeed
-//
-//  Created by SanW on 2020/8/31.
-//  Copyright © 2020 BytesFlow. All rights reserved.
-//
-
-import Photos
-import UIKit
-/// 相册集
-open class PQPhotoAlbumController: PQBaseViewController {
-    public  var selectedHandle: ((_ selectedData: PQUploadModel?) -> Void)? // 选中/取消选中的回调
-    public var isTopShow: Bool = false // 是否显示在顶部
-
-    public var categoryH: CGFloat = cDefaultMargin * 26  // 相簿高度
-    public var albaumsData: [PQUploadModel] = Array<PQUploadModel>.init()
-    public let itemSize = CGSize(width: ((cScreenWidth - cDefaultMargin) / 3) * UIScreen.main.scale, height: ((cScreenWidth - cDefaultMargin) / 3) * UIScreen.main.scale)
-    var catagerySelectedIndex: IndexPath = IndexPath(item: 0, section: 0) // 更多图库选择
-    lazy  public var imageManager: PHCachingImageManager = {
-        PHCachingImageManager()
-    }()
-
-    lazy public  var albaumCollectionView: UICollectionView = {
-        let layout = UICollectionViewFlowLayout()
-        layout.sectionInset = UIEdgeInsets.zero
-        layout.itemSize = CGSize(width: view.frame.width, height: cDefaultMargin * 8 )
-        layout.minimumLineSpacing = 0
-        layout.minimumInteritemSpacing = 0
-        let albaumCollectionView = UICollectionView(frame: CGRect(x: 0, y: isTopShow ? 0 : (albaumView.frame.height - categoryH), width: albaumView.frame.width, height: isTopShow ? 0 : categoryH - 300), collectionViewLayout: layout)
-        albaumCollectionView.showsVerticalScrollIndicator = false
-        albaumCollectionView.register(PQAssetCategoryCell.self, forCellWithReuseIdentifier: "PQAssetCategoryCell")
-        albaumCollectionView.delegate = self
-        albaumCollectionView.dataSource = self
-        if #available(iOS 11.0, *) {
-            albaumCollectionView.contentInsetAdjustmentBehavior = .never
-        } else {
-            automaticallyAdjustsScrollViewInsets = false
-        }
-        albaumCollectionView.backgroundColor = UIColor.white
-        return albaumCollectionView
-    }()
-
-    lazy  public var emptyRemindView: PQEmptyRemindView = {
-        let remindView = PQEmptyRemindView(frame: albaumCollectionView.bounds)
-        remindView.isHidden = true
-        albaumCollectionView.addSubview(remindView)
-        remindView.backgroundColor = PQBFConfig.shared.styleBackGroundColor
-        remindView.fullRefreshBloc = { [weak self] _, _ in
-            if self?.emptyRemindView.refreshBtn.currentTitle == "授予权限" {
-                openAppSetting()
-            } else if self?.emptyRemindView.refreshBtn.currentTitle == "刷新" {
-                self?.albaumsData.removeAll()
-                self?.loadPhotoData()
-            }
-        }
-        remindView.remindLab.textColor = UIColor.hexColor(hexadecimal: "#999999")
-        remindView.refreshBtn.setTitle("授予权限", for: .normal)
-        let anthorEmptyData = PQEmptyModel()
-        anthorEmptyData.title = "挑选相册素材"
-        anthorEmptyData.summary = "要挑选相册素材,请先授予相册使用权限"
-        anthorEmptyData.emptyImage = "icon_authorError"
-        anthorEmptyData.isRefreshHidden = false
-        anthorEmptyData.refreshBgColor = UIColor.hexColor(hexadecimal: PQBFConfig.shared.styleColor.rawValue)
-        remindView.emptyData = anthorEmptyData
-        return remindView
-    }()
-
-    lazy  public var albaumView: UIView = {
-        let albaumView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
-        let ges = UITapGestureRecognizer(target: self, action: #selector(gesTagClick))
-        albaumView.addGestureRecognizer(ges)
-        return albaumView
-    }()
-
-    open override func viewDidLoad() {
-        super.viewDidLoad()
-        
-        // Do any additional setup after loading the view.
-        view.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.7)
-        hiddenNavigation()
-        loadPhotoData()
-    }
-
-    open override func viewWillAppear(_ animated: Bool) {
-        super.viewWillAppear(animated)
-        PHPhotoLibrary.shared().register(self)
-    }
-
-    open override func viewWillDisappear(_ animated: Bool) {
-        super.viewWillDisappear(animated)
-        PHPhotoLibrary.shared().unregisterChangeObserver(self)
-    }
-}
-
-extension PQPhotoAlbumController {
-    /// 修改view frame
-    /// - Parameter frame: <#frame description#>
-    /// - Returns: <#description#>
-    public func updateViewFrame(frame: CGRect) {
-        view.frame = frame
-        view.isHidden = true
-        view.addSubview(albaumView)
-        view.addSubview(albaumCollectionView)
-    }
-
-    func loadPhotoData() {
-        DispatchQueue.global().async { [weak self] in
-            let allPhotos = PHAsset.fetchAssets(with: creaFetchOptions)
-            if allPhotos.count > 0 {
-                let tempData = PQUploadModel()
-                tempData.title = "全部"
-                tempData.categoryList = allPhotos
-                self?.albaumsData.insert(tempData, at: 0)
-                self?.updateItems(indexPath: IndexPath(item: 0, section: 0))
-            }
-            DispatchQueue.main.async { [weak self] in
-                self?.emptyRemindView.isHidden = allPhotos.count > 0
-            }
-            let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: nil)
-            smartAlbums.enumerateObjects { [weak self] assCollection, _, _ in
-                if assCollection.localizedTitle != "最近删除" {
-                    self?.convertCollection(collection: assCollection)
-                }
-            }
-            let userCollections = PHCollectionList.fetchTopLevelUserCollections(with: nil)
-            userCollections.enumerateObjects { [weak self] assCollection, index, point in
-                BFLog(message: "userCollections == \(assCollection),index = \(index),point = \(point)")
-                if assCollection is PHAssetCollection {
-                    if assCollection.localizedTitle != "最近删除" {
-                        self?.convertCollection(collection: assCollection as? PHAssetCollection)
-                    }
-                }
-            }
-        }
-    }
-
-    // 转化处理获取到的相簿
-   public func convertCollection(collection: PHAssetCollection?) {
-        if collection == nil {
-            return
-        }
-        DispatchQueue.global().async { [weak self] in
-            var options: PHFetchOptions = creaFetchOptions
-            if collection?.localizedTitle == "最近项目" || collection?.localizedTitle == "最近添加" {
-                options = modiFetchOptions
-            }
-            let assetsFetchResult = PHAsset.fetchAssets(in: collection!, options: options)
-            if assetsFetchResult.count > 0 {
-                let tempData = PQUploadModel()
-                tempData.assetCollection = collection
-                tempData.title = collection?.localizedTitle
-                tempData.categoryList = assetsFetchResult
-                if tempData.categoryList.count > 0 {
-                    if tempData.title == "视频" {
-                        self?.albaumsData.insert(tempData, at: 1)
-                        self?.updateItems(indexPath: IndexPath(item: 1, section: 0))
-                    } else {
-                        self?.albaumsData.append(tempData)
-                        self?.updateItems(indexPath: IndexPath(item: (self?.albaumsData.count ?? 1) - 1, section: 0))
-                    }
-                }
-                BFLog(message: "assetsFetchResult = \(assetsFetchResult)")
-            }
-        }
-    }
-
-    /// 更新数据源
-    /// - Parameter indexPath: <#indexPath description#>
-    /// - Returns: <#description#>
-    public  func updateItems(indexPath _: IndexPath) {
-        DispatchQueue.main.async { [weak self] in
-            self?.albaumCollectionView.reloadData()
-//            UIView.performWithoutAnimation {[weak self] in
-//                self?.albaumCollectionView.performBatchUpdates({
-//                    self?.albaumCollectionView.insertItems(at: [indexPath])
-//                }) {(isSuccess) in
-//
-//                }
-//            }
-        }
-    }
-
-    /// 点击隐藏view
-    /// - Returns: <#description#>
-    @objc  public  func gesTagClick() {
-        if selectedHandle != nil {
-            selectedHandle!(nil)
-        }
-        albaumCollectionView.reloadData()
-        dismissCategoryView()
-    }
-
-    @objc  public func dismissCategoryView() {
-        if isTopShow {
-            UIView.animate(withDuration: 0.3, animations: {
-                self.albaumCollectionView.frame = CGRect(x: 0, y: 0, width: cScreenWidth, height: 0)
-                self.albaumView.alpha = 0
-            }) { _ in
-                self.albaumView.isHidden = true
-                self.view.isHidden = true
-            }
-        } else {
-            albaumCollectionView.dismissViewAnimate { [weak self] _ in
-                self?.view.isHidden = true
-            }
-        }
-    }
-
-    @objc  public func showCategoryView() {
-        if isTopShow {
-            view.isHidden = false
-            albaumView.isHidden = false
-            albaumView.alpha = 0
-//            view.bringSubviewToFront(albaumView)
-            UIView.animate(withDuration: 0.3, animations: {
-                self.albaumCollectionView.frame = CGRect(x: 0, y: 0, width: cScreenWidth, height: self.categoryH)
-                self.albaumView.alpha = 1
-            }) { _ in
-            }
-            albaumCollectionView.reloadData()
-        } else {
-            view.isHidden = false
-            albaumCollectionView.showViewAnimate()
-        }
-    }
-}
-
-extension PQPhotoAlbumController: UICollectionViewDelegate, UICollectionViewDataSource, UIScrollViewDelegate {
-    public func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int {
-        return albaumsData.count
-    }
-
-    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-        let cell = PQAssetCategoryCell.assetCategoryCell(collectionView: collectionView, indexPath: indexPath)
-        let itemData = albaumsData[indexPath.item]
-        let asset = itemData.categoryList.object(at: 0)
-        cell.representedAssetIdentifier = asset.localIdentifier
-        if itemData.image == nil {
-            imageManager.requestImage(for: asset, targetSize: itemSize, contentMode: .aspectFill, options: nil) { image, info in
-                if info?.keys.contains("PHImageResultIsDegradedKey") ?? false, "\(info?["PHImageResultIsDegradedKey"] ?? "0")" == "0", cell.representedAssetIdentifier == asset.localIdentifier {
-                    itemData.image = image
-                    cell.uploadData = itemData
-                }
-            }
-        } else {
-            cell.uploadData = itemData
-        }
-        cell.isSelected = indexPath == catagerySelectedIndex
-        return cell
-    }
-
-    public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-        if selectedHandle != nil {
-            selectedHandle!(albaumsData[indexPath.item])
-        }
-        catagerySelectedIndex = indexPath
-        collectionView.reloadData()
-        dismissCategoryView()
-    }
-
-    public func scrollViewDidScroll(_ scrollView: UIScrollView) {
-        if (!isTopShow && (scrollView.contentOffset.y < -cDefaultMargin * 7)) || (isTopShow && scrollView.contentOffset.y > ((scrollView.contentSize.height - scrollView.frame.height) + cDefaultMargin * 10)) {
-            if selectedHandle != nil {
-                selectedHandle!(nil)
-            }
-            dismissCategoryView()
-        }
-    }
-}
-
-extension PQPhotoAlbumController: PHPhotoLibraryChangeObserver {
-    public func photoLibraryDidChange(_: PHChange) {
-        DispatchQueue.main.sync {
-            // Check each of the three top-level fetches for changes.
-            albaumsData.removeAll()
-            loadPhotoData()
-        }
-    }
-}

+ 0 - 570
BFFramework/Classes/Base/Controller/PQPhotoMaterialController.swift

@@ -1,570 +0,0 @@
-//
-//  PQPhotoMaterialController.swift
-//  PQSpeed
-//
-//  Created by SanW on 2021/4/26.
-//  Copyright © 2021 BytesFlow. All rights reserved.
-//
-
-import Photos
-import UIKit
-
-class PQPhotoMaterialController: PQBaseViewController {
-    // 是否显示素材标识
-    var isShowMediaTag: Bool = true
-    // 是否是已经添加过的素材
-    var isAdded: Bool = false
-    // 默认图片时长
-    var imageDuration: Float64 = 2.0
-    // 已选图片时长
-    var selectedImageDataCount: Int = 0
-    var itemSpacing: CGFloat = cDefaultMargin / 2 // 间隔
-    var itemSize = CGSize(width: (cScreenWidth - cDefaultMargin) / 3, height: (cScreenWidth - cDefaultMargin) / 3) // cell 大小
-    var previousPreheatRect = CGRect.zero
-
-    var allPhotos: PHFetchResult<PHAsset> = PHFetchResult<PHAsset>.init() // 所有的图片
-    var photoData: [PQEditVisionTrackMaterialsModel] = Array<PQEditVisionTrackMaterialsModel>.init() // 相册数据
-    // 选中的相册数据
-    var selectedPhotoData: [PQEditVisionTrackMaterialsModel] = Array<PQEditVisionTrackMaterialsModel>.init()
-    // 选中的总时长
-    var selectedTotalDuration: Float64 = 0
-
-    var selectedMaterialHandle: ((_ currentMaterialData: PQEditVisionTrackMaterialsModel?, _ selectedPhotoData: [PQEditVisionTrackMaterialsModel], _ selectedTotalDuration: Float64, _ imageCount: Int) -> Void)? // 选中/取消选中的回调
-    var detailMaterialHandle: ((_ indexPath: IndexPath, _ currentMaterialData: PQEditVisionTrackMaterialsModel?) -> Void)? // 点击详情
-    /// 滑动的回调
-    var scrollViewDidScroll: ((_ contentOffset: CGPoint) -> Void)?
-    /// 空白页面点击的回调
-    var emptyRefreshHandle: ((_ msgType: material_msgType) -> Void)?
-    var msgType: material_msgType = .all { // 默认类型
-        didSet {
-            photoData.removeAll()
-            allPhotos = PHFetchResult<PHAsset>.init()
-            photoCollectionView.setContentOffset(CGPoint.zero, animated: false)
-            photoCollectionView.reloadData()
-            loadLocalData()
-        }
-    }
-
-    var assetCollection: PHAssetCollection? // 相簿
-    lazy var imageManager: PHCachingImageManager = { // 图库缓存管理
-        (PHCachingImageManager.default() as? PHCachingImageManager) ?? PHCachingImageManager()
-    }()
-
-    lazy var photoFlowLayout: UICollectionViewFlowLayout = {
-        let photoFlowLayout = UICollectionViewFlowLayout()
-        photoFlowLayout.sectionInset = UIEdgeInsets.zero
-        photoFlowLayout.minimumLineSpacing = itemSpacing
-        photoFlowLayout.minimumInteritemSpacing = itemSpacing
-        photoFlowLayout.scrollDirection = .vertical
-        photoFlowLayout.itemSize = itemSize
-        return photoFlowLayout
-    }()
-
-    lazy var photoCollectionView: UICollectionView = {
-        let photoCollectionView = UICollectionView(frame: CGRect(x: itemSpacing, y: 0, width: view.frame.width, height: view.frame.height), collectionViewLayout: photoFlowLayout)
-        photoCollectionView.register(PQChoseMaterialCell.self, forCellWithReuseIdentifier: String(describing: PQChoseMaterialCell.self))
-        photoCollectionView.showsVerticalScrollIndicator = false
-        photoCollectionView.showsHorizontalScrollIndicator = false
-        photoCollectionView.delegate = self
-        photoCollectionView.dataSource = self
-        photoCollectionView.backgroundColor = UIColor.clear
-        if #available(iOS 11.0, *) {
-            photoCollectionView.contentInsetAdjustmentBehavior = .never
-        } else {
-            automaticallyAdjustsScrollViewInsets = false
-        }
-        return photoCollectionView
-    }()
-
-    var anthorEmptyData: PQEmptyModel = {
-        let anthorEmptyData = PQEmptyModel()
-        anthorEmptyData.title = "挑选相册素材"
-        anthorEmptyData.summary = "要挑选相册素材,请先授予相册使用权限"
-        anthorEmptyData.emptyImage = "icon_authorError"
-        anthorEmptyData.isRefreshHidden = false
-        anthorEmptyData.refreshBgColor = UIColor.hexColor(hexadecimal: PQBFConfig.shared.styleColor.rawValue)
-        return anthorEmptyData
-    }()
-
-    var emptyData: PQEmptyModel = {
-        let emptyData = PQEmptyModel()
-        emptyData.title = "此相册中什么都没有"
-        emptyData.isRefreshHidden = false
-        emptyData.refreshTitle = NSMutableAttributedString(string: "刷新")
-        emptyData.refreshBgColor = UIColor.hexColor(hexadecimal: PQBFConfig.shared.styleColor.rawValue)
-        emptyData.emptyImage = "material_empty"
-        return emptyData
-    }()
-
-    lazy var emptyRemindView: PQEmptyRemindView = {
-        let remindView = PQEmptyRemindView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
-        remindView.isHidden = true
-        photoCollectionView.addSubview(remindView)
-        remindView.backgroundColor = PQBFConfig.shared.styleBackGroundColor
-        remindView.fullRefreshBloc = { [weak self] _, _ in
-            if self?.emptyRemindView.refreshBtn.currentTitle == "授予权限" {
-                openAppSetting()
-            } else if self?.emptyRemindView.refreshBtn.currentAttributedTitle == NSMutableAttributedString(string: "刷新") {
-                self?.loadLocalData()
-            } else if self?.emptyRefreshHandle != nil {
-                self?.emptyRefreshHandle!(self?.msgType ?? .all)
-            }
-        }
-        remindView.remindLab.textColor = UIColor.hexColor(hexadecimal: "#999999")
-        remindView.refreshBtn.addCorner(corner: 4)
-        return remindView
-    }()
-
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        view.addSubview(photoCollectionView)
-        hiddenNavigation()
-        view.backgroundColor = PQBFConfig.shared.styleBackGroundColor
-    }
-
-    /// <#Description#>
-    /// - Returns: <#description#>
-    func loadLocalData() {
-        let authStatus = PHPhotoLibrary.authorizationStatus()
-        if authStatus == .notDetermined {
-            // 第一次触发授权 alert
-            PHPhotoLibrary.requestAuthorization { [weak self] (status: PHAuthorizationStatus) -> Void in
-                if status == .authorized {
-                    if (self?.allPhotos == nil) || (self?.allPhotos.count ?? 0) <= 0 {
-                        self?.loadPhotoData()
-                    }
-                }
-                DispatchQueue.main.async { [weak self] in
-                    self?.showEmpthView()
-                }
-            }
-        } else if authStatus == .authorized {
-            BFLog(message: "授权成功,开始请求相册数据-\(allPhotos)")
-//            if allPhotos.count <= 0 {
-            loadPhotoData()
-//            }
-        } else {
-            showEmpthView()
-        }
-        PHPhotoLibrary.shared().register(self)
-    }
-
-    /// 加载图库数据
-    /// - Returns: <#description#>
-    func loadPhotoData() {
-        DispatchQueue.main.async { [weak self] in
-            PQLoadingHUB.shared.showHUB(superView: self!.view, isVerticality: false)
-        }
-        DispatchQueue.global().async { [weak self] in
-            self?.allPhotos = self?.assetCollection != nil ? PHAsset.fetchAssets(in: (self?.assetCollection)!, options: self?.fetchOptions()) : PHAsset.fetchAssets(with: self?.fetchOptions())
-            DispatchQueue.main.async { [weak self] in
-                if self?.view != nil {
-                    PQLoadingHUB.shared.dismissHUB(superView: self!.view)
-                }
-                self?.photoCollectionView.reloadData()
-                self?.showEmpthView()
-//                self?.updateCachedAssets()
-            }
-        }
-    }
-
-    /// 获取option
-    /// - Returns: <#description#>
-    func fetchOptions() -> PHFetchOptions {
-        if msgType != .all {
-            let fetchOptions = PHFetchOptions()
-            fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
-            fetchOptions.predicate = NSPredicate(format: "mediaType = %d", msgType == .video ? PHAssetMediaType.video.rawValue : PHAssetMediaType.image.rawValue)
-            return fetchOptions
-        } else {
-            return creaFetchOptions
-        }
-    }
-
-    /// 展示空页面
-    func showEmpthView() {
-        emptyRemindView.isHidden = allPhotos.count > 0
-        if !emptyRemindView.isHidden {
-            let authStatus = PHPhotoLibrary.authorizationStatus()
-            if authStatus == .denied {
-                emptyRemindView.emptyData = anthorEmptyData
-                emptyRemindView.refreshBtn.setTitle("授予权限", for: .normal)
-            } else {
-                switch msgType {
-                case .video:
-                    emptyData.title = "此相册中没有视频"
-                    emptyData.emptyImage = "stuckPoint_video_empty"
-                    emptyData.refreshTitle = NSMutableAttributedString(string: "去选照片")
-                case .image:
-                    emptyData.title = "此相册中没有照片"
-                    emptyData.emptyImage = "stuckPoint_image_empty"
-                    emptyData.refreshTitle = NSMutableAttributedString(string: "去选视频")
-                default:
-                    emptyData.title = "此相册中什么都没有"
-                    emptyData.emptyImage = "material_empty"
-                    emptyData.refreshTitle = NSMutableAttributedString(string: "刷新")
-                }
-                emptyData.summary = nil
-                emptyRemindView.emptyData = emptyData
-            }
-        }
-    }
-
-    /// 更新frame
-    /// - Parameter newFrame: <#newFrame description#>
-    /// - Returns: <#description#>
-    func updateFrame(newFrame: CGRect, isAnimate: Bool = false, isScroll _: Bool = false) {
-        if isAnimate {
-            UIView.animate(withDuration: 0.5, delay: 0, options: .allowUserInteraction) { [weak self] in
-                // 调整位置
-                self?.view.frame = newFrame
-                self?.photoCollectionView.frame = self?.view.bounds ?? CGRect.zero
-                self?.emptyRemindView.frame = self?.photoCollectionView.bounds ?? CGRect.zero
-            } completion: { _ in
-            }
-        } else {
-            view.frame = newFrame
-            photoCollectionView.frame = view.bounds
-            emptyRemindView.frame = photoCollectionView.bounds
-        }
-    }
-}
-
-extension PQPhotoMaterialController: UICollectionViewDelegate, UICollectionViewDataSource, UIScrollViewDelegate {
-    func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int {
-        return allPhotos.count
-    }
-
-    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-        let cell = PQChoseMaterialCell.choseMaterialCell(collectionView: collectionView, indexPath: indexPath)
-        cell.isShowMediaTag = isShowMediaTag
-        cell.isAdded = isAdded
-        if photoData.count <= indexPath.item {
-            let itemData: PQEditVisionTrackMaterialsModel!
-            let asset = allPhotos.object(at: indexPath.item)
-            let selectedItem = selectedPhotoData.first { (item) -> Bool in
-                item.asset == asset
-            }
-            if selectedItem != nil {
-                itemData = selectedItem
-            } else {
-                itemData = PQEditVisionTrackMaterialsModel()
-                itemData.downloadState = .compelte
-                itemData.asset = asset
-                itemData.height = Float(itemData.asset?.pixelHeight ?? 0)
-                itemData.width = Float(itemData.asset?.pixelWidth ?? 0)
-                itemData.type = asset.mediaType == .image ? StickerType.IMAGE.rawValue : StickerType.VIDEO.rawValue
-                itemData.volumeGain = asset.mediaType == .image ? 0 : 100
-                itemData.duration = asset.mediaType == .image ? imageDuration : asset.duration
-                itemData.out = itemData.duration
-            }
-            photoData.append(itemData)
-        }
-        if photoData.count > indexPath.item {
-            let itemData = photoData[indexPath.item]
-            cell.materialData = itemData
-            cell.representedAssetIdentifier = itemData.asset?.localIdentifier
-            if itemData.coverImageUI == nil, itemData.asset != nil {
-                imageManager.requestImage(for: itemData.asset!, targetSize: itemSize, contentMode: .aspectFill, options: nil) { image, info in
-                    if info?.keys.contains("PHImageResultIsDegradedKey") ?? false, "\(info?["PHImageResultIsDegradedKey"] ?? "0")" == "0", cell.representedAssetIdentifier == itemData.asset?.localIdentifier {
-                        if image != nil {
-                            itemData.coverImageUI = image
-                            cell.materialImageView.image = image
-                        } else if image == nil, info?.keys.contains("PHImageResultIsInCloudKey") ?? false {
-                            let option = PHImageRequestOptions()
-                            option.isNetworkAccessAllowed = true
-                            option.resizeMode = .fast
-                            self.imageManager.requestImageData(for: itemData.asset!, options: option) { data, _, _, _ in
-                                if data != nil {
-                                    let image = UIImage(data: data!)
-                                    itemData.coverImageUI = image
-                                    cell.materialImageView.image = image
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        } else {
-            cell.materialData = PQEditVisionTrackMaterialsModel()
-        }
-        cell.materialClicHandle = { [weak self] _, materialData in
-            if (self?.photoData.count ?? 0) > indexPath.item {
-                // 处理相册选择
-                self?.dealWithSelectedMaterial(indexPath: indexPath, materialData: materialData)
-            } else {
-//                collectionView.reloadData()
-            }
-        }
-        return cell
-    }
-
-    func collectionView(_: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-        if photoData.count <= indexPath.item {
-//            collectionView.reloadData()
-            return
-        }
-        if detailMaterialHandle != nil {
-            detailMaterialHandle!(indexPath, photoData[indexPath.item])
-        }
-    }
-
-    func collectionView(_: UICollectionView, willDisplay _: UICollectionViewCell, forItemAt _: IndexPath) {
-        if !isAdded, !isShowMediaTag {
-//            // 卡点音乐素材选择曝光上报
-//            PQEventTrackViewModel.baseReportUpload(businessType: .bt_windowView, objectType: .ot_view_selectSyncedUpMaterial, pageSource: .sp_stuck_selectMaterial, extParams: nil, remindmsg: "卡点音乐素材选择曝光上报")
-        }
-    }
-
-    /// 点击选择的回调
-    /// - Parameter materialData: <#materialData description#>
-    /// - Returns: description
-    func dealWithSelectedMaterial(indexPath: IndexPath?, materialData: PQEditVisionTrackMaterialsModel?) {
-        let ratio = (materialData?.width ?? 0) / (materialData?.height ?? 1)
-        if ratio < 0.4 || ratio > 4.2 {
-            cShowHUB(superView: nil, msg: "暂不支持该比例的素材")
-            return
-        }
-        //add by ak 131072 是快慢速视频类型
-        if materialData?.asset?.mediaType == .video && ((materialData?.asset?.pixelWidth ?? 0) > 3000 || (materialData?.asset?.pixelHeight ?? 0) > 3000 || materialData?.asset?.mediaSubtypes.rawValue == 131072) {
-            cShowHUB(superView: nil, msg: "暂不支持该类型素材")
-            return
-        }
-        if materialData != nil, indexPath != nil {
-            materialData?.isSelected = !(materialData?.isSelected ?? false)
-            if materialData?.isSelected ?? false {
-                selectedPhotoData.append(materialData!)
-                if materialData?.type == StickerType.IMAGE.rawValue {
-                    selectedImageDataCount = selectedImageDataCount + 1
-                }
-                materialData?.selectedIndex = selectedPhotoData.count
-                if materialData?.asset != nil && materialData?.asset?.mediaType != .video && (materialData?.coverImageUI == nil || (materialData?.locationPath.count ?? 0) <= 0) {
-                    PQPHAssetVideoParaseUtil.requestAssetOringinImage(asset: (materialData?.asset)!) { [weak self] _, data, image, _ in
-                        if image == nil {
-                            BFLog(message: "图片数据为空!!!!!")
-                        }
-                        // 1,图片,gif的原文件数据,和视频的封面
-                        var newImage: UIImage?
-                        if image != nil {
-                            newImage = UIImage.nx_fixOrientation(image, isFront: false).nx_scaleWithMaxLength(maxLength: 1920)
-                        }
-                        materialData?.coverImageUI = newImage
-                        materialData?.originalData = data
-                        let timeInterval: TimeInterval = Date().timeIntervalSince1970
-                        let imageCacheName = "images_\(timeInterval)"
-                        let imageCachePath = downloadImagesDirectory + imageCacheName
-                        if !directoryIsExists(dicPath: downloadImagesDirectory) {
-                            BFLog(message: "文件夹不存在 \(downloadImagesDirectory)")
-                            createDirectory(path: downloadImagesDirectory)
-                        }
-                        // 创建目录
-                        if newImage != nil {
-                            try? newImage?.pngData()?.write(to: URL(fileURLWithPath: imageCachePath))
-                        } else {
-                            try? data?.write(to: URL(fileURLWithPath: imageCachePath))
-                        }
-                        if materialData?.asset?.mediaType != .video, newImage != nil || data != nil {
-                            materialData?.locationPath = imageCachePath.replacingOccurrences(of: documensDirectory, with: "")
-                        }
-                        materialData?.width = Float(materialData?.asset?.pixelWidth ?? 0)
-                        materialData?.height = Float(materialData?.asset?.pixelHeight ?? 0)
-                        if self?.selectedMaterialHandle != nil {
-                            self?.selectedTotalDuration = (self?.selectedTotalDuration ?? 0) + (materialData?.duration ?? 0.0)
-                            if indexPath != nil {
-                                self?.photoCollectionView.reloadItems(at: [indexPath!])
-                            }
-                            // 处理已选择的数据
-                            self?.dealWithSelectedData(materialData: materialData)
-                        }
-                    }
-                } else {
-                    selectedTotalDuration = selectedTotalDuration + (materialData?.duration ?? 0.0)
-                    if indexPath != nil {
-                        photoCollectionView.reloadItems(at: [indexPath!])
-                    }
-                    // 处理已选择的数据
-                    dealWithSelectedData(materialData: materialData)
-                }
-            } else {
-                // 处理取消选择数据
-                deSeletedMaterialData(materialData: materialData)
-            }
-        }
-    }
-
-    /// 处理取消选择数据
-    /// - Parameter materialData: <#materialData description#>
-    /// - Returns: <#description#>
-    func deSeletedMaterialData(materialData: PQEditVisionTrackMaterialsModel?) {
-        selectedPhotoData.removeAll(where: { (item) -> Bool in
-            item.asset == materialData?.asset
-        })
-        for item in photoData {
-            if item.isSelected, item.selectedIndex > (materialData?.selectedIndex ?? 1) {
-                item.selectedIndex = item.selectedIndex - 1
-            }
-        }
-        if materialData?.type == StickerType.IMAGE.rawValue {
-            selectedImageDataCount = selectedImageDataCount - 1
-        }
-        selectedTotalDuration = selectedTotalDuration - (materialData?.duration ?? 0.0)
-        photoCollectionView.reloadData()
-        // 处理已选择的数据
-        dealWithSelectedData(materialData: materialData)
-    }
-
-    /// 处理已选择的数据
-    /// - Parameters:
-    ///   - indexPath: <#indexPath description#>
-    ///   - materialData: <#materialData description#>
-    /// - Returns: <#description#>
-    func dealWithSelectedData(materialData: PQEditVisionTrackMaterialsModel?) {
-//        if materialData?.asset != nil && materialData?.asset?.mediaType == .video && (materialData?.locationPath == nil || (materialData?.locationPath.count ?? 0) <= 0) {
-//            PQPHAssetVideoParaseUtil.parasToAVAsset(phAsset: (materialData?.asset)!) { [weak self] avAsset, _, _, _ in
-//                if avAsset is AVURLAsset {
-//                    materialData?.locationPath = (avAsset as? AVURLAsset)?.url.absoluteString.replacingOccurrences(of: "file:///", with: "") ?? ""
-//                    if self?.selectedMaterialHandle != nil {
-//                        DispatchQueue.main.async {
-//                            self?.selectedMaterialHandle!(materialData, self?.selectedPhotoData ?? [], self?.selectedTotalDuration ?? 0)
-//                        }
-//                    }
-//                } else if self?.selectedMaterialHandle != nil {
-//                    DispatchQueue.main.async {
-//                        self?.selectedMaterialHandle!(materialData, self?.selectedPhotoData ?? [], self?.selectedTotalDuration ?? 0)
-//                    }
-//                }
-//            }
-//        } else
-        if selectedMaterialHandle != nil {
-            selectedMaterialHandle!(materialData, selectedPhotoData, selectedTotalDuration, selectedImageDataCount)
-        }
-    }
-
-    /// <#Description#>
-    /// - Parameter scrollView: <#scrollView description#>
-    func scrollViewDidScroll(_ scrollView: UIScrollView) {
-        if scrollViewDidScroll != nil {
-            scrollViewDidScroll!(scrollView.contentOffset)
-        }
-    }
-
-    /// 更新数据
-    /// - Parameter isMaterialSelected:
-    /// - Parameter materialData: <#materialData description#>
-    /// - Returns: <#description#>
-    func updateMaterials(isSelected: Bool, materialData: PQEditVisionTrackMaterialsModel?) {
-        let photoIndexPath = selectedPhotoData.firstIndex { (item) -> Bool in
-            materialData?.asset == item.asset
-        }
-        materialData?.isSelected = isSelected
-        if isSelected {
-            if photoIndexPath == nil {
-                selectedPhotoData.append(materialData!)
-            }
-            materialData?.selectedIndex = selectedPhotoData.count
-            selectedTotalDuration = selectedTotalDuration + (materialData?.duration ?? 0.0)
-        } else if photoIndexPath != nil {
-            selectedPhotoData.remove(at: photoIndexPath ?? 0)
-            for item in selectedPhotoData {
-                if item.isSelected, item.selectedIndex > (materialData?.selectedIndex ?? 1) {
-                    item.selectedIndex = item.selectedIndex - 1
-                }
-            }
-            selectedTotalDuration = selectedTotalDuration - (materialData?.duration ?? 0.0)
-        }
-        photoCollectionView.reloadData()
-        if selectedMaterialHandle != nil {
-            selectedMaterialHandle!(materialData, selectedPhotoData, selectedTotalDuration, selectedImageDataCount)
-        }
-    }
-}
-
-extension PQPhotoMaterialController: PHPhotoLibraryChangeObserver {
-    func photoLibraryDidChange(_ changeInstance: PHChange) {
-        DispatchQueue.main.sync {
-            // Check each of the three top-level fetches for changes.
-            guard let collectionChanges = changeInstance.changeDetails(for: allPhotos)
-            else {
-                return
-            }
-            if !collectionChanges.hasIncrementalChanges || collectionChanges.hasMoves {
-                return
-            }
-            // Update the cached fetch result.
-            allPhotos = collectionChanges.fetchResultAfterChanges
-            photoData.removeAll()
-            photoCollectionView.reloadData()
-//            photoCollectionView.setContentOffset(CGPoint.zero, animated: false)
-        }
-    }
-
-    private func resetCachedAssets() {
-        imageManager.stopCachingImagesForAllAssets()
-        previousPreheatRect = .zero
-    }
-
-    private func updateCachedAssets() {
-        if allPhotos.count <= 0 {
-            return
-        }
-        guard isViewLoaded, view.window != nil else { return }
-        let visibleRect = CGRect(origin: photoCollectionView.contentOffset, size: photoCollectionView.bounds.size)
-        let preheatRect = visibleRect.insetBy(dx: 0, dy: -0.5 * visibleRect.height)
-        let delta = abs(preheatRect.midY - previousPreheatRect.midY)
-        guard delta > view.bounds.height / 3 else { return }
-        let (addedRects, removedRects) = differencesBetweenRects(previousPreheatRect, preheatRect)
-        let addedAssets: [PHAsset]? = addedRects
-            .flatMap { rect in photoCollectionView.indexPathsForElements(in: rect) }
-            .map { indexPath in
-                if indexPath.item < allPhotos.count {
-                    return allPhotos.object(at: indexPath.item)
-                } else {
-                    return PHAsset()
-                }
-            }
-        let removedAssets: [PHAsset]? = removedRects
-            .flatMap { rect in photoCollectionView.indexPathsForElements(in: rect) }
-            .map { indexPath in
-                if indexPath.item < allPhotos.count {
-                    return allPhotos.object(at: indexPath.item)
-                } else {
-                    return PHAsset()
-                }
-            }
-        if addedAssets != nil, (addedAssets?.count ?? 0) > 0 {
-            imageManager.startCachingImages(for: addedAssets!,
-                                            targetSize: itemSize, contentMode: .aspectFill, options: nil)
-        }
-        if removedAssets != nil, (removedAssets?.count ?? 0) > 0 {
-            imageManager.stopCachingImages(for: removedAssets!,
-                                           targetSize: itemSize, contentMode: .aspectFill, options: nil)
-        }
-        previousPreheatRect = preheatRect
-    }
-
-    private func differencesBetweenRects(_ old: CGRect, _ new: CGRect) -> (added: [CGRect], removed: [CGRect]) {
-        if old.intersects(new) {
-            var added = [CGRect]()
-            if new.maxY > old.maxY {
-                added += [CGRect(x: new.origin.x, y: old.maxY,
-                                 width: new.width, height: new.maxY - old.maxY)]
-            }
-            if old.minY > new.minY {
-                added += [CGRect(x: new.origin.x, y: new.minY,
-                                 width: new.width, height: old.minY - new.minY)]
-            }
-            var removed = [CGRect]()
-            if new.maxY < old.maxY {
-                removed += [CGRect(x: new.origin.x, y: new.maxY,
-                                   width: new.width, height: old.maxY - new.maxY)]
-            }
-            if old.minY < new.minY {
-                removed += [CGRect(x: new.origin.x, y: old.minY,
-                                   width: new.width, height: new.minY - old.minY)]
-            }
-            return (added, removed)
-        } else {
-            return ([new], [old])
-        }
-    }
-}

+ 1 - 1
BFFramework/Classes/Base/View/PQSectionHeadView.swift

@@ -93,7 +93,7 @@ public class PQSectionHeadView: UIView {
             make.centerY.equalToSuperview()
             make.right.equalToSuperview().offset(-cDefaultMargin)
         }
-        clearBtn.imagePosition(at: .right, space: 0)
+        clearBtn.imagePosition(at: PQButtonImageEdgeInsetsStyle.right, space: 0)
     }
 
     @objc public  func btnClick(sender: UIButton) {

+ 0 - 0
BFFramework/Classes/Categorys/.gitkeep


+ 0 - 0
BFFramework/Classes/Enums/.gitkeep


+ 0 - 869
BFFramework/Classes/Enums/Enums.swift

@@ -1,869 +0,0 @@
-//
-//  public  enum s.swift
-//  PQSpeed
-//
-//  Created by lieyunye on 2020/5/29.
-//  Copyright © 2020 BytesFlow. All rights reserved.
-//
-
-import Foundation
-
-// MARK: - 视频播放页面类型
-
-/// 视频播放页面类型
-public  enum  PQVIDEOPAGETYPE {
-    case PQVIDEOPAGETYPE_Normal // 默认-单个视频详情
-    case PQVIDEOPAGETYPE_RECOMM // 默认-推荐
-    case PQVIDEOPAGETYPE_ATTEN // 关注
-    case PQVIDEOPAGETYPE_DETAIL // 用户发布视频详情
-    case PQVIDEOPAGETYPE_LIKEDETAIL // 我的喜欢视频详情
-    case PQVIDEOPAGETYPE_ATTUSERDETAIL // 关注用户详情
-    case PQVIDEOPAGETYPE_SEARCHDETAIL // 搜索详情
-    case PQVIDEOPAGETYPE_HOTVIDEODETAIL // 热门视频详情
-    case PQVIDEOPAGETYPE_GUIDEVIDEODETAIL // 引导视频详情
-    case PQVIDEOPAGETYPE_SINGLEVIDEODETAIL // 单个视频详情
-    case PQVIDEOPAGETYPE_RECREATDETAIL // 再创作详情页
-}
-
-// MARK: - 视频播放状态
-
-/// 视频播放状态
-public  enum  PQVIDEO_PLAY_STATUS {
-    case PQVIDEO_PLAY_STATUS_LOADING // 加载中
-    case PQVIDEO_PLAY_STATUS_BEGIN // 开始播放
-    case PQVIDEO_PLAY_STATUS_END // 播放结束
-    case PQVIDEO_PLAY_STATUS_DISCONNECT // 重连失败
-    case PQVIDEO_PLAY_STATUS_NOT_FOUND // 播放文件不存在
-    case PQVIDEO_PLAY_STATUS_RECONNECT // 重连连接
-}
-
-// MARK: - 页面场景
-
-/// 页面场景
-public  enum  PAGESOURCE: String {
-    /*************** 视频相关pageSource ***************/
-    case sp_category = "shanyinApp-category" //   首页-单列
-    case sp_category_recommend = "shanyinApp-category_recommend" // 由首页单列右划
-    case sp_categoryDouble = "shanyinApp-categoryDouble" // 首页-双列
-    case sp_videoDetail = "shanyinApp-videoDetail" // 视频详情页
-    case sp_videoDetail_search = "shanyinApp-videoDetail_search" //    由搜索结果列表进入
-    case sp_videoDetail_search_recommend = "shanyinApp-videoDetail_search_recommend" // 由搜索结果列表进入
-    case sp_videoDetail_upload = "shanyinApp-videoDetail_upload" //     由我的tab中“作品”列表进入
-    case sp_videoDetail_upload_recommend = "shanyinApp-videoDetail_upload_recommend" // 、由我的tab中“作品”列表进入
-    case sp_videoDetail_favorite = "shanyinApp-videoDetail_favorite" // 由我的喜欢列表进入
-    case sp_videoDetail_share = "shanyinApp-videoDetail_share" // 由我的分享列表进入
-    case sp_videoDetail_favorite_recommend = "shanyinApp-videoDetail_favorite_recommend" // 由我的喜欢列表推荐
-    case sp_userHomePage = "shanyinApp-userHomePage" // 用户个人主页
-    case sp_videoDetail_userHomePage = "shanyinApp-videoDetail_userHomePage" // 由用户个人主页进入
-    case sp_videoDetail_userHomePage_recommend = "shanyinApp-videoDetail_userHomePage_recommend" // 由用户个人主页进入
-    case sp_recommendBottom = "shanyinApp-recommendBottom" //    底部展示的3个相关推荐视频
-    case sp_follow = "shanyinApp-follow" // 关注tab
-    case sp_follow_recommend = "shanyinApp-follow_recommend" // 由关注列表右划
-    case sp_followSingle = "shanyinApp-followSingle" // 关注tab点击顶部个人头像进入某个人的关注
-    case sp_followSingle_recommend = "shanyinApp-followSingle_recommend" // 关注tab点击顶部个人头像进入某个人的关注
-//    case sp_mine = "shanyinApp-mine" // 我的tab
-    case sp_search = "shanyinApp-search" // 搜索页
-    case sp_uploadVideo = "shanyinApp-uploadVideo" // 视频制作入口
-
-    /*************** 活动相关pageSource ***************/
-    case sp_activity_entranceButton = "shanyinApp_playActivity_entranceButton" // 活动活动入口按键
-    case sp_activity_invite = "shanyinApp_playActivity_invite" // H5页面内邀请好友按键
-    case sp_activity_threeDot = "shanyinApp_playActivity_threeDot" // APP右上角…按键
-    case sp_activity_shareFriend = "shanyinApp_playActivity_shareFriend" // 进一步点击分享好友
-    case sp_activity_shareMoment = "shanyinApp_playActivity_shareMoment" // 进一步点击分享朋友圈
-    case sp_activity_openH5 = "shanyinApp_playActivity_completeOpenH5" // 当天完成活动的弹窗->去查看
-    case sp_activity_openH5AndPayment = "shanyinApp_playActivity_completeOpenH5AndPayment" // 当天完成活动的弹窗->报名明日
-    case sp_activity_failOpenH5 = "shanyinApp_playActivity_missionFailWindowOpenH5" // 未成功弹窗->继续活动
-    case sp_activity_success_share = "shanyinApp_playActivity_missionSuccessWindow_share" // 成功弹窗->分享给好友炫耀下
-    case sp_activity_entrance_close = "shanyinApp_playActivity_entrance_close" // 活动入口弹窗->关闭按钮
-    case sp_activity_entranceWindow = "shanyinApp_playActivity_entranceWindow" // 活动入口弹窗
-    case sp_activity_successWindow = "shanyinApp_playActivity_missionSuccessWindow" // 成功弹窗
-    case sp_activity_failWindow = "shanyinApp_playActivity_missionFailWindow" // 未成功弹窗
-    case sp_activity_completeWindow = "shanyinApp_playActivity_missionCompleteWindow" //  当天完成活动的弹窗
-
-    /*************** 上传相关pageSource ***************/
-    case sp_upload_videoSelect = "shanyinApp-upload_videoSelect" //  选视频-进入页面事件
-    case sp_upload_coverSelect = "shanyinApp-upload_coverSelect" //  选封面-进入页面事件
-    case sp_upload_videoPublish = "shanyinApp-upload_videoPublish" //  发布-进入页面事件
-
-    /*************** tab点击相关pageSource ***************/
-    case sp_categoryTabButton = "shanyinApp-categoryTabButton" //  首页tab
-    case sp_followTabButton = "shanyinApp-followTabButton" //  关注tab
-    case sp_uploadTabButton = "shanyinApp-uploadTabButton" //  上传tab
-    case sp_mineTabButton = "shanyinApp-mineTabButton" //  我的tab
-    case sp_msg_tabBtn = "shanyinApp_msgTabButton" //  消息tab
-
-    /*************** 发布pageSource ***************/
-    case sp_videoMaking = "shanyinApp-videoMaking" // 视频创作
-    case sp_videoCompose_guid = "shanyinApp-videoCompose_guid" // 预览页面
-    case sp_videoCompose_edit = "shanyinApp-videoCompose_edit" // 编辑页面
-    case sp_videoCompose_overview = "shanyinApp-videoCompose_overview" // 总览页面
-    case sp_videoCompose_composition = "shanyinApp-videoCompose_composition" // 合成页面
-    case sp_material_search = "vlog-pages/user-videos-share" // 素材搜索上报
-
-    /*************** 消息pageSource ***************/
-    case sp_msg_shareSpace = "shanyinApp-message" // 分享空间
-    case sp_msg_shareSpace_detail = "shanyinApp-message_shareSpace" // 分享空间详情
-    case sp_msg_share = "shanyinApp-message_share" // 分享
-    case sp_msg_like = "shanyinApp-message_like" // 喜欢
-    case sp_msg_fans = "shanyinApp-message_fans" // 粉丝
-    case sp_msg_push = "shanyinApp-message_push" // 通知
-
-    /*************** 草稿箱相关pageSource ***************/
-    case sp_draft_projectList = "shanyinApp-projectList" // 草稿箱列表
-    case sp_reproduce_childList = "shanyinApp-reproduceCollection_child" // 再制作子列表页面
-    case sp_reproduce_fatherList = "shanyinApp-reproduceCollection_father" // 再制作父列表页面
-    case sp_reproduce_chilDetailList = "shanyinApp-videoDetail_reproduceCollection_child" // 再制作子列表页面
-    case sp_reproduce_fatherDetailList = "shanyinApp-videoDetail_reproduceCollection_father" // 再制作父列表页面
-    // add by ak
-    case sp_speedApp_upload2Compose = "shanyinApp-upload2Compose" // 上传转创作
-
-    /*************** 卡点视频相关pageSource ***************/
-    case sp_stuck_selectMaterial = "shanyinApp-selectSyncedUpMaterial" // 卡点视频素材选择页
-    case sp_stuck_selectSynceedUpMusic = "shanyinApp-selectSynceedUpMusic" // 卡点视频音乐选择页
-    case sp_stuck_previewSyncedUp = "shanyinApp_previewSyncedUp" // 预览页面曝光上报
-    case sp_stuck_searchSyncedUpMusic = "shanyinApp_searchSyncedUpMusic" // 音乐素材搜索页
-    case sp_stuck_publishSyncedUp = "shanyinApp_publishSyncedUp" // 合成发布页
-    
-    //点击上报:首页点击底部“我的”页面入口
-    case sp_shanyinApp_main = "shanyinApp-main"
-    //页面曝光上报:“我的”页面曝光
-    case sp_shanyinApp_mine = "shanyinApp-mine"
-  
-
-}
- 
-/// objectType
-public  enum  objectType: String {
-    /*************** tab点击相关pageSource ***************/
-
-    case ot_home_tabBtn = "shanyinApp-categoryTabButton" //  首页tab
-    case ot_follow_tabBtn = "shanyinApp-followTabButton" //  关注tab
-    case ot_up_tabBtn = "shanyinApp-uploadTabButton" //  上传tab
-    case ot_mine_tabBtn = "shanyinApp-mineTabButton" //  我的tab
-    case ot_public_tabBtn = "shanyinApp-publicTabButton" //  发布tab
-    case ot_msg_tabBtn = "shanyinApp_msgTabButton" //  消息tab
-
-    /*************** 上传相关objectType ***************/
-    case ot_up_backBtn = "shanyinApp-uploadBackButton" // 点击左下角叉子
-    case ot_up_nextBtn = "shanyinApp-uploadNextButton" // 点击右下角下一步
-    case ot_up_coverBtn = "shanyinApp-uploadCoverButton" // 点击上传封面
-    case ot_up_pickCoverBtn = "shanyinApp-pickCoverButton" // 点击截取封面
-    case ot_up_publishBtn = "shanyinApp-videoPublishButton" // 点击发布
-    case ot_up_changeCoverBtn = "shanyinApp-changeCoverButton" // 点击选封面返回
-    case ot_up_start = "shanyinApp-uploadStart" // 上传开始事件
-    case ot_up_fail = "shanyinApp-uploadFail" // 上传中断/失败事件
-    case ot_up_restart = "shanyinApp-uploadRestart" // 上传重试事件
-    case ot_up_success = "shanyinApp-uploadSuccess" // 上传完成
-    case ot_up_publishSuccess = "shanyinApp-videoPublishSuccess" // 发布完成
-    case ot_up_viewPopup_guideUsersToShare = "shanyinApp_viewPopup_guideUsersToShare_pubishVideo" // 发布成功弹出分享界面
-    case ot_up_clickWechatMoments_guideUsersToShare = "shanyinApp_clickWechatMoments_guideUsersToShare_pubishVideo" // 分享介面点击微信朋友圈
-    case ot_up_clickWechat_guideUsersToShare = "shanyinApp_clickWechat_guideUsersToShare_pubishVideo"
-    case ot_selectVideoProductionMode = "shanyinApp_viewWindow_selectVideoProductionMode"
-    // 分享界面点击微信好友
-    /*************** 创作工具相关objectType ***************/
-    case ot_makevideo_video = "video" // 视频
-    case ot_makevideo_gif = "gif" // 动态图
-    case ot_makevideo_jpg = "jpg" // 图片
-    case ot_enterComposeToolButton = "shanyinApp_enterComposeToolButton" // 点击上传tab后-点击发布视频 add by ak & 视频合成入口
-    case ot_enterVideoUploadButton = "shanyinApp_enterVideoUploadButton" // 点击上传tab后-点击上传视频
-    case ot_videoCompose_overviewButton = "shanyinApp_videoCompose_overviewButton" // 点击总览
-    case ot_videoCompose_videoCompositeButton = "shanyinApp_videoCompose_videoCompositeButton" // 点击去发布
-    case ot_videoCompose_videoPublish = "shanyinApp_videoPublishButton" // 发布视频
-    case ot_speedApp_searchButton = "shanyinApp_searchButton" // 发布视频
-    case ot_pageView = "pageView" // 页面访问
-    //
-    // 图文入口
-    case ot_speedApp_clickButton_imageAndTextGenerateVideo = "shanyinApp_clickButton_imageAndTextGenerateVideo"
-    // 电子相册
-    case ot_speedApp_clickButton_electronicAlbum = "shanyinApp_clickButton_electronicAlbum"
-    /*************** 消息相关objectType ***************/
-    case ot_msg_fansMsgButton = "shanyinApp_msgTab_fansMsgButton" //  粉丝消息入口
-    case ot_msg_likeMsgButton = "shanyinApp_msgTab_likeMsgButton" //  喜欢消息入口
-    case ot_msg_shareMsgButton = "shanyinApp_msgTab_shareMsgButton" //  分享消息入口
-    case ot_msg_commentMsgButton = "shanyinApp_msgTab_commentMsgButton" //  评论消息入口
-    case ot_msg_systemMsgButton = "shanyinApp_msgTab_systemMsgButton" //  通知消息入口
-
-    /*************** 消息详情相关objectType ***************/
-    case ot_msg_shareSpaceViewTab = "shanyinApp_message_shareSpace_viewTab" // 分享空间详情页观看
-    case ot_msg_shareSpaceLikeTab = "shanyinApp_message_shareSpace_likeTab" // 分享空间详情页喜欢
-    case ot_msg_shareSpaceCommentTab = "shanyinApp_message_shareSpace_commentTab" // 分享空间详情页评论
-    case ot_msg_shareSpaceShareTab = "shanyinApp_message_shareSpace_shareTab" // 分享空间详情页分享
-
-    /*************** 草稿箱相关objectType ***************/
-    case ot_draft_clicktButton = "shanyinApp_clickOpenProjectListButton" // 草稿箱点击入口
-    case ot_draft_editProject = "shanyinApp_editProject" // - 点击 Project Item(草稿箱中的每个项目)
-    case ot_draft_viewProject = "shanyinApp_viewProject" // - 看到 Project Item(草稿箱中的每个项目)
-    case ot_draft_clickEditProject = "shanyinApp_clickEditProject" // - 点击 Project Item 弹出菜单的「编辑」按钮
-    case ot_draft_clickPublishProject = "shanyinApp_clickPublishProject" // - 点击 Project Item 弹出菜单的「去发布」按钮
-    case ot_draft_clickRenameProject = "shanyinApp_clickRenameProject" // - 点击 Project Item 弹出菜单的「重命名」按钮
-    case ot_draft_clickCopyProject = "shanyinApp_clickCopyProject" // - 点击 Project Item 弹出菜单的「复制」按钮
-    case ot_draft_clickDeleteProject = "shanyinApp_clickDeleteProject" // - 点击 Project Item 弹出菜单的「删除」按钮
-    case ot_draft_uploadMaterial = "shanyinApp_uploadMaterial" // - 素材开始上传事件
-    case ot_draft_uploadMatrialSuccess = "shanyinApp_uploadMatrialSuccess" // - 素材上传成功事件
-    case ot_draft_downloadMaterial = "shanyinApp_downloadMaterial" // - 素材开始下载事件
-    case ot_draft_downloadMaterialSuccess = "shanyinApp_downloadMaterialSuccess" // - 素材下载成功事件
-    case ot_videoCompose_mux_complete = "shanyinApp_videoCompose_mux_complete" // 创作工具「合成成功」添加上报参数
-
-    case ot_reproduce_collectionClicButton = "shanyinApp_clickReproduceButton_collection" // - 再创作集合页的「再创作按钮」
-    case ot_reproduce_clickButton = "shanyinApp_clickReProduceButton" // 再创作按钮(右上角)点击上报
-    case ot_reproduce_collectionBar = "shanyinApp_clickReproduceCollectionBar" // 再创作按钮(左下角)点击上报
-    case ot_reproduce_collectionVideo = "shanyinApp_clickReproduceCollectionVideo" // 再创作集合页的「视频」点击上报
-    case ot_reproduce_sameSourceButton = "shanyinApp_viewSameSourceButton" // 再创作查看同款来源按钮
-    case ot_reproduce_saveProjectToDraftBox = "shanyinApp-saveProjectToDraftBox" // 创作工具「保存项目成功」添加上报参数
-    // add by ak
-    case speedApp_viewWindow_upload2Compose // 「上传转创作」:窗口曝光
-    case speedApp_clickButton_upload2Compose_addMusic // 「上传转创作」:加音乐 - 按钮点击
-    case speedApp_clickButton_upload2Compose_addText // 「上传转创作」:加语音 - 按钮点击
-    case speedApp_clickButton_upload2Compose_addVoice // 「上传转创作」:加语音 - 按钮点击
-    case speedApp_clickButton_upload2Compose_addCompose // 上传转创作」:加多段拼接 - 按钮点击
-    case speedApp_clickButton_upload2Compose_processingVideo // 「上传转创作」:加工视频 - 按钮点击
-    case speedApp_clickButton_upload2Compose_publish // 「上传转创作」:直接发布 - 按钮点击
-    case speedApp_viewButton_uploadCoverButton // 「发布页」:修改封面 - 按钮曝光
-    case speedApp_viewButton_uploadCoverTipButton // 修改封面提示 - 按钮曝光
-    case speedApp_clickButton_uploadCoverButton // 「发布页」:修改封面 - 按钮点击
-    case speedApp_clickButton_uploadCoverTipButton
-
-    case speedApp_viewButton_addMusic // 「创作工具页」:添加音乐 - 按钮曝光
-    case speedApp_clickButton_addMusic // 「创作工具页」:添加音乐 - 按钮点击
-    case speedApp_viewButton_addMusicTip // 创作工具页」:添加音乐提示 - 按钮曝光
-    case speedApp_clickButton_addMusicTip // 「创作工具页」:添加音乐提示 - 按钮点击
-
-    /*************** 卡点视频相关objectType ***************/
-    case ot_view_selectSyncedUpMaterial = "shanyinApp_viewWindow_selectSyncedUpMaterial" // 曝光上报:卡点视频素材选择页
-    case ot_click_confirmMaterial = "shanyinApp_clickButton_confirmSyncedUpMaterial" // 点击上报:卡点视频素材确认按钮
-    case ot_click_back = "shanyinApp_clickButton_back" // 点击上报:返回按钮
-    case ot_view_selectSyncedUpMusic = "shanyinApp_viewWindow_selectSyncedUpMusic" // 曝光上报:卡点视频音乐选择页
-    case ot_view_syncedUpMusic = "shanyinApp_viewButton_syncedUpMusic" // 曝光上报:音乐素材曝光
-    case ot_click_auditionMusic = "shanyinApp_clickButton_auditionMusic" // 点击上报:音乐素材试听
-    case ot_click_chooseMusic = "shanyinApp_clickButton_chooseMusic" // 点击上报:选择音乐素材
-    case ot_click_chooseMusicCategory = "shanyinApp_clickButton_chooseMusicCategory" // 点击上报:选择音乐分类
-    case ot_click_chooseMusicCategoryTag = "shanyinApp_clickButton_chooseMusicCategoryTag" // 点击上报:选择音乐分类下的 TAG
-    case ot_view_previewSyncedUp = "shanyinApp_viewWindow_previewSyncedUp" // 曝光上报:预览页面曝光上报
-    case ot_click_selectMusic = "shanyinApp_clickButton_selectMusic" // 点击上报:重新选择音乐
-    case ot_click_selectRhythm = "shanyinApp_clickButton_selectRhythm" // 点击上报:选择节奏
-    case ot_click_dragFront = "shanyinApp_clickButton_dragFront" // 点击上报:拖动拖拽条(左部分)
-    case ot_click_dragBehind = "shanyinApp_clickButton_dragBehind" // 点击上报:拖动拖拽条(右部分)
-    case ot_click_commit = "shanyinApp_clickButton_commit" // 点击上报:去合成
-    case ot_view_searchSyncedUpMusic = "shanyinApp_viewWindow_searchSyncedUpMusic" // 曝光上报:音乐素材搜索页
-    case ot_click_searchSyncedUpMusic = "shanyinApp_clickButton_searchSyncedUpMusic" // 点击上报:用户在搜索框输入文字然后按回车
-    case ot_view_searchMusic = "shanyinApp_viewButton_searchMusic" // 曝光上报:搜索结果音乐素材曝光
-    case ot_click_auditionSearchMusic = "shanyinApp_clickButton_auditionSearchMusic" // 点击上报:试听音乐素材
-    case ot_click_chooseSearchMusic = "shanyinApp_clickButton_chooseSearchMusic" // 点击上报:选择音乐素材
-    case ot_view_publishSyncedUp = "shanyinApp_viewWindow_publishSyncedUp" // 曝光上报:窗口曝光
-    case ot_click_shareWechat = "shanyinApp_clickButton_shareWechat" // 点击上报:分享微信
-    case ot_click_shareWechatMoment = "shanyinApp_clickButton_shareWechatMoment" // 点击上报:分享朋友圈
-    case ot_click_finished = "shanyinApp_clickButton_finished" // 点击上报:完成
-    
-    
-    //闪音点击上报:首页点击底部+
-    case ot_shanyinApp_clickButton_syncedUpMusic = "shanyinApp_clickButton_syncedUpMusic"
-
-    //视频播放点击
-    case ot_shanyinApp_clickButton_syncedUpMusicRecreate = "shanyinApp_clickButton_syncedUpMusicRecreate"
-    case ot_shanyinApp_viewButton_syncedUpMusicRecreate = "shanyinApp_viewButton_syncedUpMusicRecreate"
-    //点击上报:首页点击底部“我的”页面入口
-    case ot_shanyinApp_clickButton_mineTab = "shanyinApp_clickButton_mineTab"
-    //页面曝光上报:“我的”页面曝光
-    case ot_shanyinApp_viewPage_mineTab = "shanyinApp_viewPage_mineTab"
-    
-    //编辑标题和封面
-    case ot_shanyinApp_clickButton_changeTitle = "shanyinApp_clickButton_changeTitle"
-    case ot_shanyinApp_clickButton_changeCover = "shanyinApp_clickButton_changeCover"
-  
-    //1.2.0版本快慢速
-    //点击快慢速
-    case ot_shanyinApp_musicVideoPreview_selectPatternSpeed = "shanyinApp_musicVideoPreview_selectPatternSpeed"
-    //点击跳跃卡点
-    case ot_shanyinApp_musicVideoPreview_selectPatternMusicVideo = "shanyinApp_musicVideoPreview_selectPatternMusicVideo"
-    //点击仅音乐
-    case ot_shanyinApp_musicVideoPreview_selectPatternBgm = "shanyinApp_musicVideoPreview_selectPatternBgm"
-    
-    //音乐库相统计
-    //- 音乐tab点击数
-    case ot_shanyinApp_musicVideoPreview_musicTab = "shanyinApp_musicVideoPreview_musicTab"
-    //- 剪辑tab点击
-    case ot_shanyinApp_musicVideoPreview_videoTab = "shanyinApp_musicVideoPreview_videoTab"
-    //- 音乐素材曝光数
-    case ot_shanyinApp_musicVideoPreview_musicView = "shanyinApp_musicVideoPreview_musicView"
-    //- 音乐试听数
-    case ot_shanyinApp_musicVideoPreview_musicCategorySelect = "shanyinApp_musicVideoPreview_musicCategorySelect"
-    //- 音乐使用数
-    case ot_shanyinApp_musicVideoPreview_musicSelect = "shanyinApp_musicVideoPreview_musicSelect"
-    //- 音乐选框移动数(与原推荐位置不一致)
-    case ot_shanyinApp_musicVideoPreview_musicPeriodSelect = "shanyinApp_musicVideoPreview_musicPeriodSelect"
-    //- 搜索页面曝光
-    case ot_shanyinApp_musicVideoPreview_musicSearch = "shanyinApp_musicVideoPreview_musicSearch"
-    
-    //- 音乐试听数
-    case ot_shanyinApp_musicVideoPreview_musicSearchAudition = "shanyinApp_musicVideoPreview_musicSearchAudition"
-    //- 音乐使用数
-    case ot_shanyinApp_musicVideoPreview_musicSearchSelect = "shanyinApp_musicVideoPreview_musicSearchSelect"
-    
-    //快慢速模式
-    //  - 抛留比例按钮切换点击数
-    case ot_shanyinApp_musicVideoPreview_selectSpeed = "shanyinApp_musicVideoPreview_selectSpeed"
-    //  - 自定义抛留比按钮点击数
-    case ot_shanyinApp_musicVideoPreview_customizeSpeed = "shanyinApp_musicVideoPreview_customizeSpeed"
-    //  - 选择节奏
-    case ot_shanyinApp_musicVideoPreview_selectSpeedRhythm = "shanyinApp_musicVideoPreview_selectSpeedRhythm"
-    
-    // 跳跃卡点模式
-    //  - 抛留比例按钮切换点击数
-    case ot_shanyinApp_musicVideoPreview_selectRatio = "shanyinApp_musicVideoPreview_selectRatio"
-    //  - 自定义抛留比按钮点击数
-    case ot_shanyinApp_musicVideoPreview_customizeRatio = "shanyinApp_musicVideoPreview_customizeRatio"
-    //  - 选择节奏
-    case ot_shanyinApp_musicVideoPreview_selectMusicVideoRhythm = "shanyinApp_musicVideoPreview_selectMusicVideoRhythm"
-   
- 
-    // 仅配乐模式
-    // 循环比例按钮切换点击数
-    case ot_shanyinApp_musicVideoPreview_selectRepeatTimes = "shanyinApp_musicVideoPreview_selectRepeatTimes"
-    //  - 自定义抛留比按钮点击数
-    case ot_shanyinApp_musicVideoPreview_customizeRepeatTimes = "shanyinApp_musicVideoPreview_customizeRepeatTimes"
-    //  - 选择节奏
-    case ot_shanyinApp_musicVideoPreview_selectMusicVideoRepeatRhythm = "shanyinApp_musicVideoPreview_selectMusicVideoRepeatRhythm"
-    
-    
-
-
-}
-
-// MARK: - 视频上报类型
-
-/// 视频上报类型
-public  enum  businessType: String {
-    /*************** 视频相关businessType ***************/
-    case bt_videoView = "videoView" //  视频展示到屏幕,在此APP中 首页中:视频展示但未播放时,用于后端算法相关逻辑 相关推荐:在播放中下部展示出相关推荐的3个视频时,上报这3个视频的videoView。同一次播放下不重复上报3个推荐视频的videoView
-    case bt_videoPreView = "videoPreView"
-    case bt_videoPlaySlow = "videoPlaySlow"
-    case bt_videoPlayError = "videoPlayError" // 播放失败
-    case bt_aliasBindingError = "aliasBindingError" // 绑定别名失败
-    case bt_videoPlaySuccessTime = "videoPlaySuccessTime" // 加载时长
-    case bt_videoPlayException = "videoPlayException"
-    case bt_videoPlay_normal = "videoPlay"
-    public  enum  bt_videoPlay: String {
-        case bt_videoPlay_userSlideSingle = "userSlideSingle" // 用户在沉浸态下滑动切换视频(极速版、爱电影)
-        case bt_videoPlay_userClickCover = "userClickCover" // 用户点击封面播放
-        case bt_videoPlay_userSlideList = "userSlideList" // 用户在列表中滑动停止导致的播放
-        case bt_videoPlay_autoNext = "autoNext" // 自动播放下一个视频
-        case bt_videoPlay_autoStart = "autoStart" // 1、启动后自动播第一个视频 2、播放器出问题导致重新播放 3、别的页面返回之前的页面播放
-    }
-
-    case bt_videoShareH5 = "videoShareH5" // 点击分享朋友圈按键
-    case bt_videoShareFriend = "videoShareFriend" // 点击分享好友按键
-    case bt_videoSemiRealPlay = "videoSemiRealPlay" // 视频播放到10s时上报
-    case bt_videoRealPlay = "videoRealPlay" // 视频播放到20s或播放到总时长30%,哪个先到为准
-    case bt_videoPlaySuccess = "videoPlaySuccess" // 视频缓冲完成开始播放
-    case bt_videoPlayEnd = "videoPlayEnd" // 视频播放到总时长100%
-    case bt_videoFavorite = "videoFavorite" // 视频喜欢的上报
-    case bt_videoEnterUser = "videoEnterUserHomepage" // 在视频页点击 Up 主头像进入个人主页
-    case bt_videoSwipeRight = "videoSwipeRight" // 右滑查看视频的相关推荐
-    case bt_videoEnterRecom = "videoEnterRecomendation" // 点击视频的相关推荐
-
-    /*************** 活动相关businessType ***************/
-    case bt_buttonClick = "buttonClick" // 按键点击
-    case bt_buttonView = "buttonView" // 按键曝光
-    case bt_windowView = "windowView" // 弹窗曝光
-    case bt_autoJump = "autoJump" // 自动跳转
-    case bt_pageView = "pageView" // 页面访问
-
-    /*************** 供给稳定性相关businessType ***************/
-    case bt_fetchSlow = "FetchSlow" // 拉取卡顿率
-    case bt_fetchFail = "FetchFail" // 拉取失败率
-    case bt_fetchDuration = "FetchDuration" // 拉取时长
-    case bt_dnsParseCostTime = "dnsParseCostTime" // DNS上报 "speed.piaoquantv.com", "rescdn.yishihui.com"
-
-    /*************** 上传相关businessType ***************/
-    case bt_up_process = "videoUploadProcess" // 上传开始事件
-    case bt_publish_error = "publishError" // 发布失败
-    case bt_publish_success = "publishSuccess" // 发布成功
-
-    /*************** 创作工具相关businessType ***************/
-    case bt_makeVideos = "makeVideos" // 创作视频
-    case bt_materialView = "materialView" // 素材曝光
-    case bt_materialUse = "materialUse" // 用户选取
-    case bt_materialCompose = "materialCompose" // 素材合成
-
-    /*************** 消息相关businessType ***************/
-    case bt_draft_downloadMaterialSuccess = "downloadMaterialSuccess" // 素材下载成功事件
-    case bt_draft_downloadMaterial = "downloadMaterial" // - 素材开始下载事件
-    case bt_draft_uploadMaterialSuccess = "uploadMaterialSuccess" // - 素材上传成功事件
-    case bt_draft_uploadMaterial = "uploadMaterial" // - 素材开始上传事件
-    case bt_videoCompose_muxAction = "muxAction" // 创作工具「合成成功」添加上报参数
-
-    /*************** 广告相关businessType ***************/
-    case bt_ad_request = "adRequest" // 客户端请求广告
-    case bt_ad_loaded = "adLoaded" // 客户端广告加载成功
-    case bt_ad_view = "adView" // 广告展示到屏幕
-    case bt_ad_click = "adClick" // 广告被点击
-    case bt_ad_loadedError = "adLoadedError" // 客户端广告加载失败-非需求
-    case bt_ad_close = "adClose" // 广告被关闭-非需求
-    case bt_ad_configRequest = "adConfigRequest" // 客户端请求广告配置
-    case bt_ad_configLoaded = "adConfigLoaded" // 客户端请求广告配置成功
-}
-
-// MARK: - autoType 自动动作的类型
-
-/// autoType 自动动作的类型
-public  enum  autoType: Int {
-    case AUTO_TYPE_SCROLL_VERTICAL_DOWN = 11 // 用户手动下划触发播放(播上一个视频)
-    case AUTO_TYPE_SCROLL_VERTICAL_UP = 12 // 用户手动上划触发播放(播下一个视频)
-    case AUTO_TYPE_SCROLL_HORIZON_RIGHT = 13 // 用户手动右划触发播放
-    case AUTO_TYPE_SCROLL_HORIZON_LEFT = 14 // 用户手动左划触发播放
-    case AUTO_TYPE_ENTER_DETAIL = 15 // 用户手动点击(进详情页)触发播放
-    case AUTO_TYPE_ENTER_APP = 21 // 打开APP自动播放的第一个
-    case AUTO_TYPE_NEXT_AFTER_COMPLETE = 22 // 用户播放完一个视频后自动触发播放相关推荐视频
-    case AUTO_TYPE_BACKEND_RESUME = 23 // 后台唤醒app,如果播放器挂了,重新播放、在别的页面播放过视频再回来之前的页面播放
-    case AUTO_TYPE_REFRESH_LIST = 24 // 首页下拉刷新,自动播的第一个
-    case AUTO_TYPE_CLICK_RECOMMEND = 25 // 点击推荐视频播放
-    case AUTO_TYPE_CLICK_DOUBLE = 26 // 双列点击视频进入单列播放
-}
-
-// MARK: - 消息动作:表示该条日志属于某条消息生命周期的哪个漏斗环节
-
-/// 消息动作:表示该条日志属于某条消息生命周期的哪个漏斗环节
-public  enum  actionType: String {
-    case at_msg_backendReturn = "backendReturn" // 后端将消息返回给客户端
-    case at_msg_frontendPull = "frontendPull" // 客户端获取到
-    case at_msg_view = "view" // 在客户端消息被滑动展示在屏幕上
-    case at_msg_click = "click" // 用户点击消息
-}
-
-// MARK: - 消息类型
-
-/// 消息类型
-public  enum  messageType: Int {
-    case mt_nomal = 0 // 未知消息
-    case mt_fans = 1 // 粉丝消息
-    case mt_like = 2 // 喜欢/赞
-    case mt_share = 3 // 分享消息
-    case mt_comment = 4 // 评论消息
-    case mt_notification = 5 // 通知消息
-    case mt_share_dynamics = 6 // 分享动态消息
-    /*** 自定义添加不涉及正式消息类型 ***/
-    case mt_badgeNumber = 1001 // 显示消息个数cell
-}
-
-/// 分享空间二级界面数据请求类型  1,观看 2,分享,3,喜欢 4, 评论
-public  enum  sharePageType: Int {
-    case share_page_play = 1 // 分享空间-播放列表
-    case share_page_share = 2 // 分享空间-分享列表
-    case share_page_favorite = 3 // 分享空间-收藏列表
-    case share_page_commnet = 4 // 分享空间-评论列表
-}
-
-// MARK: - 消息子类型
-
-/// 消息子类型
-public  enum  messageSubType: Int {
-    case mtsub_nomal = 0 // 未知消息
-    case mtsub_fansAtt = 101 // 粉丝-关注
-    case mtsub_fansSbs = 102 // 粉丝-订阅
-    case mtsub_likeColl = 201 // 喜欢-收藏视频
-    case mtsube_likePrai = 202 // 喜欢-评论点赞
-    case mtsub_shareWechat = 301 // 分享-微信会话
-    case mtsub_shareFriend = 302 // 分享-微信朋友圈
-    case mtsub_comment = 401 // 评论一级评论
-    case mtsub_commentSub = 402 // 评论二级评论
-    case mtsub_pushSucc = 501 // 通知-发布成功
-    case mtsub_pushNoPass = 502 // 通知-审核不通过
-    case mtsub_pushFixing = 503 // 通知-审核待修改
-    case mtsub_pushTransFail = 504 // 通知-转码失败
-    case mtsub_pushVideoRecom = 505 // 通知视频推荐
-    case mtsub_pushAccForbi = 506 // 通知-账号封禁
-    case mtsub_pushAccUnban = 507 // 通知-账号解封
-    case mtsub_pushIncStart = 508 // 通知-激励开始
-    case mtsub_pushIncEnd = 509 // 通知-激励结束
-    case mtsub_pushIncRupt = 510 // 通知-激励中断
-    case mtsub_shareSpace = 601 // 分享空间-分享
-    case mtsub_shareSpLike = 602 // 分享空间-喜欢
-    case mtsub_shareSpComm = 603 // 分享空间-评论
-    case mtsub_shareSpPlay = 604 // 分享空间-播放
-    case mtsub_shareSpMerge = 605 // 分享空间-外层合并消息(与业务逻辑无关,埋点上报使用)
-}
-
-// MARK: - 埋点上报消息类型(暂未统一)
-
-/// 埋点上报消息类型(暂未统一)
-public  enum  messagePointType: Int {
-    case mt_point_nomal = 0 // 未知消息
-    case mt_point_fans = 1 // 粉丝消息
-    case mt_point_praise = 2 // 赞
-    case mt_point_barrage = 3 // 弹幕消息
-    case mt_point_comment = 4 // 评论消息
-    case mt_point_share = 5 // 分享消息
-    case mt_point_collect = 6 // 收藏消息
-    case mt_point_notification = 7 // 通知消息
-    case mt_point_operative = 8 // 运营消息
-    case mt_point_dynamics = 1000 // 分享动态消息
-}
-
-// MARK: - 日志库类型
-
-/// 日志库类型
-public  enum  statisticsLogType: Int {
-    case st_log_type_abtestinfo = 10 // abtestinfo-Log ABTEST的 dlog Store
-    case st_log_type_operation = 20 // operation-Log 漏斗模型的相关上报
-    case st_log_type_simpleevent = 30 // simpleevent-Log 独立事件的相关上报
-    case st_log_type_frontend = 40 // frontend-Log 前端调试日志
-    case st_log_type_pLayaction = 50 // pLayaction-Log 播放行为日志上报
-    case st_log_type_useractive = 60 // useractive-Log 用户活跃日志上报
-    case st_log_type_videoPlayTracking = 70 // video-play-tracking 视频播放行为跟踪
-    case st_log_type_proauceSearch = 80 // proauce-search-log 素材搜索日志上报
-    case st_log_type_videoCompose = 90 // video-compose-log 创作工具素材搜索日志上报
-    case st_log_type_location = 100 // user-location-log 位置信息日志上报
-    case st_log_type_videoProduction = 110 // video-production-log 创作工具埋点日志上报
-    case st_log_type_adAction = 120 // ad-action-log 广告埋点日志上报
-}
-
-// MARK: - 冷启动方式
-
-/// coldLaunchType // 冷启动方式。若为热启动,则不用上报该字段
-public  enum  coldLaunchType: String {
-    case coldLaunchType_userActiveOpen = "userActiveOpen" // 用户主动打开
-    case coldLaunchType_appRecall = "appRecall" // 其它APP唤起,包括H5应用宝唤起
-    case coldLaunchType_pushRecall = "pushRecall" // 推送唤起
-}
-
-// MARK: - 上报日志类型
-
-/// 上报日志类型
-public  enum  reportLogType {
-    case reportLogType_view // 显示页面
-    case reportLogType_realPlay // 真实播放 视频播放到20s或播放到总时长30%,哪个先到为准
-    case reportLogType_play // 记录播放的视频
-    case reportLogType_Action // 上报视频动作记录
-    case reportLogType_Frontend // 通用上报
-}
-
-// MARK: - 底部tab
-
-/// 底部tab
-public  enum  TAB_PAGETYPE: String {
-    case TAB_PAGETYPE_NORMAL = "nomalTab" // 默认
-    case TAB_PAGETYPE_RECOMM = "categoryTab" // 推荐
-    case TAB_PAGETYPE_ATTEN = "followTab" // 关注
-    case TAB_PAGETYPE_PUBLISH = "publishTab" // 发布
-    case TAB_PAGETYPE_MESSAGE = "messageTab" // 消息
-    case TAB_PAGETYPE_MINE = "mineTab" // 我的
-}
-
-// MARK: - 刷新控件类型
-
-/// 刷新控件类型
-public  enum  REFRESH_TYPE {
-    case REFRESH_TYPE_ALL // 推荐
-    case REFRESH_TYPE_HEADER // 头部
-    case REFRESH_TYPE_FOOTER // 尾部
-}
-
-// MARK: - 刷新控件类型
-
-/// 刷新控件类型
-public  enum  moveDirection {
-    case moveDirectionNormal
-    case moveDirectionUp
-    case moveDirectionDown
-    case moveDirectionRight
-    case moveDirectionLeft
-}
-
-// MARK: - 关注跟粉丝cell类型
-
-/// 关注跟粉丝cell类型
-public  enum  atttendAndFansCellType {
-    case cellType_attend // 关注
-    case cellType_fans // 粉丝
-    case cellType_banned // 黑名单
-}
-
-// MARK: - 视频全屏播放操作类型
-
-/// 视频全屏播放操作类型
-public  enum  fullScreenActionType {
-    case volume // 声音
-    case brightness // 亮度
-    case progress // 进度
-}
-
-// MARK: - 活动提示页类型
-
-/// 活动提示页类型
-public  enum  activityRemindType {
-    case nomal //
-    case newUser // 新用户专享
-    case yesterDay_finish // 昨日已完成
-    case yesterDay_unfinish // 昨日未完成
-    case today_finish // 今日任务已完成
-}
-
-// MARK: - 制作工具素材搜索msgType
-
-/// 制作工具素材搜索msgType
-public  enum  material_msgType: String {
-    case all = "ALL_SEARCH_EVENT" // 搜索所有
-    case image = "IMAGE_SEARCH_EVENT" // 图片搜索
-    case video = "VIDEO_SEARCH_EVENT" // 视频搜索
-    case gif = "GIF_SEARCH_EVENT" // 动图搜索
-    case recommend_image = "IMAGE_RECOMMEND_EVENT" // 图片推荐搜索
-    case recommend_video = "VIDEO_RECOMMEND_EVENT" // 视频推荐搜索
-    case recommend_gif = "GIF_RECOMMEND_EVENT" // 动图推荐搜索
-}
-
-// 画布类型
-public  enum  videoCanvasType: Int {
-    case origin = 1 // 原始
-    case nineToSixteen = 2 // 9:16
-    case oneToOne = 3 // 1:1
-    case sixteenToNine = 4 // 16:9
-}
-
-/// 贴纸类型
-public  enum  StickerType: String {
-    case UNKONW = "unknow"
-    case IMAGE = "image" // 图片
-    case VIDEO = "video" // 视频
-    case GIF = "gif" // gif动图
-    case VOICE = "voice" // 声音
-    case FILE = "file" // 文件
-    case SUBTITLE = "subtitle" // 字幕
-    /// 获取index
-    /// - Returns: description
-    public func index() -> Int {
-        var fileType: Int = 0
-        switch self {
-        case .IMAGE:
-            fileType = 1
-        case .VIDEO:
-            fileType = 2
-        case .VOICE:
-            fileType = 3
-        case .FILE:
-            fileType = 4
-        case .GIF:
-            fileType = 5
-        case .SUBTITLE:
-            fileType = 6
-        default:
-            fileType = 0
-        }
-        return fileType
-    }
-
-    /// 媒体类型
-    /// - Returns: <#description#>
-   public func mimeType() -> String {
-        var mimeType: String = "application/octet-stream"
-        switch self {
-        case .IMAGE:
-            mimeType = "image/jpeg"
-        case .VIDEO:
-            mimeType = "video/mpeg"
-        case .VOICE:
-            mimeType = "audio/mpeg"
-        case .FILE:
-            mimeType = "application/octet-stream"
-        case .GIF:
-            mimeType = "image/gif"
-        default:
-            mimeType = "application/octet-stream"
-        }
-        return mimeType
-    }
-
-   public func pathExtension() -> String {
-        var pathExtension: String = ""
-        switch self {
-        case .IMAGE:
-            pathExtension = "png"
-        case .VIDEO:
-            pathExtension = "mp4"
-        case .VOICE:
-            pathExtension = "mp3"
-        case .FILE:
-            pathExtension = ""
-        case .GIF:
-            pathExtension = "gif"
-        default:
-            break
-        }
-        return pathExtension
-    }
-}
-
-// MARK: - 贴纸裁剪方式
-
-/// 贴纸裁剪方式
-public  enum  stickerContentModeDef: Int {
-    case aspectFit = 0 // 自适应
-    case aspectFill = 1 // 铺满
-}
-
-/// 贴纸裁剪方式 add by ak v2
-public  enum  stickerContentMode: String {
-    case aspectFitStr = "complete" // 完整显示(有黑边)
-    case aspectFillStr = "full" // 铺满
-}
-
-// MARK: - 适配模式
-
-/// 适配模式
-public  enum  adapterModeDef: Int {
-    case speedyAuto = 0 // 快速自适应
-    case loopAuto = 1 // 自动循环
-    case crop = 2 // 定帧/裁剪
-}
-
-/// 适配模式 add by ak  v2
-public  enum  adapterMode: String {
-    case multiple // 快速自适应
-    case loopAuto = "loop" // 自动循环
-    case staticFrame // 定帧/裁剪
-}
-
-// MARK: - 上传视频类型
-
-/// 上传视频类型
-public  enum  videoUploadSourceType: String {
-    case videoUpload // 上传
-    case videoCompose // 合成制作
-    case videoUploadToCompose // 上传转合成制作
-}
-
-// MARK: - 进入创作工具入口
-
-/// 素材上传、保存、收藏相关
-public  enum  videoMakeEntranceType: String {
-    case entranceMineTabDraft = "draft_metab" // 我的Tab -> 草稿箱列表 -> 创作工具
-    case entrancePublicTabDraft = "draft_uploadpopup" // 发布Tab -> 草稿箱列表 -> 创作工具
-    case entrancePublicTabCompose = "composeVideo" // 发布Tab -> 视频合成 -> 创作工具
-    case entrancePublicTabImageText = "imageTextGenerate" // 发布Tab -> 图文生成视频 -> 创作工具
-    case entrancePublicTabAlbum = "electronicAlbum" // 发布Tab -> 电子相册 -> 创作工具
-    case entranceReproduction = "reproduction" // 视频详情 -> 做同款 -> 创作工具
-    case entrancePublicTabUpload = "upload" // 发布Tab -> 上传视频 -> 直接发布
-    // add by ak
-    case entranceUpload2compose = "upload2compose" // 发布Tab -> 上传视频 -> 加工视频 -> 创作工具
-    case entranceStuckPointPublic = "syncedUpVideo" // 卡点视频发布
-
-    // * 新添加-自定义
-    case entrancePublicTabAddMusic = "addMusic" // 发布Tab -> 上传视频 -> 加音乐 -> 创作工具
-    case entrancePublicTabAddSubtitle = "addSubtitle" // 发布Tab -> 上传视频 -> 加字幕 -> 创作工具
-    case entrancePublicTabAddVoice = "addVoice" // 发布Tab -> 上传视频 -> 加语音 -> 创作工具
-    case entrancePublicTabAddSection = "addSection" // 发布Tab -> 上传视频 -> 多段拼接 -> 创作工具
-}
-
-// MARK: - 段落类型
-
-/// 段落类型
-public  enum  sectionType: String {
-    case normal // 普通段
-    case global // 全局段
-}
-
-// MARK: - 音乐类型
-
-/// 音乐类型
-public  enum  VOICETYPT: String {
-    case PRODUCE = "produce" // 合成语音
-    case BGM = "bgm" // 背景音乐
-    case SPEECH = "speech" // 录音
-    case LOCAL = "local" // 导入文件
-}
-
-// MARK: - 输入框状态B
-
-/// 输入框状态
-public  enum  inputStatus {
-    case normal // 写故事,可智能配音,自动生成字幕
-    case inputing // 输入中
-    case recording // 语音识别成文字中…
-    case recordEmpty // 录音未识别到文字,点此输入
-    case recordError // 获取录音文字失败,请重试
-    case recordSuccess // 获取录音文字成功
-}
-
-// MARK: - 画面比例
-
-/// 画面比例
-public  enum  aspectRatio {
-    case origin(width: CGFloat, height: CGFloat) // 原始
-    case oneToOne // 1:1
-    case sixteenToNine // 16:9
-    case nineToSixteen // 9:16
-}
-
-// MARK: - 卡点视频音乐页面类型
-
-/// 卡点视频音乐页面类型
-public  enum  stuckPointMusicContentType {
-    case catagery
-    case serach
-    case page
-}
-
-// 视频发布来源场景 1:普通上传 2:创作工具,3:普通上传转创作工具,4:后台转换加工,5:卡点视频制作
-public  enum  videoFromScene: Int {
-    case UploadNormal = 1 // 普通上传
-    case UploadMakeVideo = 2 // 创作工具
-    case UploadNormalToMakeVideo = 3 // 普通上传转创作工具
-    case server = 4 // 后台转换加工
-    case stuckPoint = 5 // 卡点视频制作
-}
-
-// MARK: - 广告来源渠道
-
-/// 广告来源渠道
-public  enum  adChannel: String {
-    case wechat // 微信广告
-    case byteDouce = "pangle" // 穿山甲广告(字节跳动)
-    case pdd // 多多进宝广告(拼多多)
-    case gdt = "qq" // 腾讯优量汇
-}
-
-// MARK: - 广告类型
-
-/// 广告类型
-public  enum  adType: Int {
-    case banner = 1 // Banner 广告(即:固定位展示广告)
-    case drawVideo = 2 // 信息流视频广告
-    case preMovie = 3 // 贴片广告(场景举例:暂停贴片广告)
-    case tableScreen = 4 // 插屏广告(场景举例:退出全屏,弹出的插屏广告)
-    case splash = 5 // 开屏广告
-}
-
-// MARK: - 广告投放人群
-
-/// 广告投放人群
-public  enum  adCrowd: Int {
-    case highCrowd = 1 // 高分享人群
-    case mediumCrowd = 2 // 中分享人群
-    case lowCrowd = 3 // 低分享人群
-}
-
-// MARK: - 广告内部位置值
-
-/// 广告内部位置值
-public  enum  adPosition: String {
-    case splashAd // 票圈视频 App 闪屏页广告位
-    case videoFlowAd // 票圈视频 App 视频流广告位
-}
-
-
-// MARK: - 风格
-
-/// 风格
-public  enum  styleColor: String {
-    case nomal = "#F1034D"
-    case green = "#3DC1C1"
-    case red = "#EE0051"
-}
-
-// MARK: - statusBar
-
-/// statusBar
-public enum  statusBarStyle {
-    case light
-    case dark
-}

+ 3 - 2
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointMusicController.swift

@@ -30,7 +30,7 @@ class PQStuckPointMusicController: PQBaseViewController {
                 option.resizeMode = .none
                 option.deliveryMode = .highQualityFormat
                 let startTime = Date()
-                PHImageManager.default().requestImage(for: photo!,
+                PHImageManager.default().requestImage(for: photo,
                                                       targetSize: CGSize(width: 1920, height: 1920),
                                                       contentMode: .aspectFit,
                                                       options: option)
@@ -256,7 +256,8 @@ class PQStuckPointMusicController: PQBaseViewController {
         disablePopGesture().popGestureHandle = { [weak self] in
             self?.backBtnClick()
         }
-        leftButton(image: UIImage.init(named: "icon_detail_back"), tintColor: PQBFConfig.shared.styleTitleColor)
+        leftButton(image: UIImage(named: "icon_detail_back"), imageName:nil, tintColor: PQBFConfig.shared.styleTitleColor)
+        leftButton(image: "icon_detail_back", tintColor: PQBFConfig.shared.styleTitleColor)
         setTitle(title: "选择音乐主题", color: PQBFConfig.shared.styleTitleColor)
         view.addSubview(searchTF)
       

+ 1 - 1
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointPublicController.swift

@@ -450,7 +450,7 @@ class PQStuckPointPublicController: PQBaseViewController {
         // 注册上传成功的通知
         addNotification(self, selector: #selector(uploadSuccess(notify:)), name: cUploadSuccessKey, object: nil)
         PQNotification.addObserver(self, selector: #selector(didBecomeActiveNotification), name: UIApplication.didBecomeActiveNotification, object: nil)
-        leftButton(image: UIImage.init(named: "icon_detail_back"), tintColor: PQBFConfig.shared.styleTitleColor)
+        leftButton(image: UIImage(named: "icon_detail_back"), tintColor: PQBFConfig.shared.styleTitleColor)
         navHeadImageView?.backgroundColor = UIColor.clear
         lineView?.removeFromSuperview()
         view.addSubview(bgTopView)

+ 1 - 1
BFFramework/Classes/selectImage/PQUploadController.swift

@@ -252,7 +252,7 @@ class PQUploadController: PQBaseViewController {
         selecteBtn.setTitleColor(UIColor.black, for: .normal)
         selecteBtn.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium)
         selecteBtn.tag = 2
-        selecteBtn.imagePosition(at: .right, space: cDefaultMargin / 2)
+        selecteBtn.imagePosition(at: PQButtonImageEdgeInsetsStyle.right, space: cDefaultMargin / 2)
         selecteBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
         return selecteBtn
     }()

+ 1 - 1
Example/Podfile

@@ -3,7 +3,7 @@ install!'cocoapods',:deterministic_uuids=>false
 platform :ios, '10.0'
 
 target 'BFFramework_Example' do
-  source 'https://git.yishihui.com/wenweiwei/BFSpecs.git'
+  source 'https://git.yishihui.com/iOS/BFSpecs.git'
   source 'https://github.com/CocoaPods/Specs.git'
 #  pod 'BFCommonKit', :path => '/Users/sanw/Desktop/BytesFlow/Person/Projects/BFCommonKit/'
   pod 'BFFramework', :path => '../'