| 
					
				 | 
			
			
				@@ -46,6 +46,8 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //add by ak 是否是再创作模式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     var isReCreate:Bool = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //最后一个选择的模式 BTN 用于还原选中状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var lastEditModelBtn:UIButton? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 下一步 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lazy var nextBtn: UIButton = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let nextBtn = UIButton(type: .custom) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -70,10 +72,12 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         playerView.playerEmptyView.isHidden = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return playerView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /// 节奏选择视图 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lazy var sustomSwitchView: PQCustomSwitchView = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let sustomSwitchView = PQCustomSwitchView(frame: CGRect(x: (view.frame.width - cDefaultMargin * 28) / 2, y: view.frame.height - cSafeAreaHeight - cDefaultMargin * 3 - cDefaultMargin * 3, width: cDefaultMargin * 28, height: 35), titles: ["快节奏", "适中", "慢节奏"], defaultIndex: stuckPointMusicData?.speed ?? 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let sustomSwitchView = PQCustomSwitchView(frame: CGRect(x:16, y: 0, width:180, height: 30), titles: ["快节奏", "适中", "慢节奏"], defaultIndex: stuckPointMusicData?.speed ?? 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sustomSwitchView.switchChangeHandle = { [weak self] sender in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 改变速率 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self?.stuckPointMusicData?.speed = sender.tag 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -145,25 +149,139 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 埋点上报 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if type == 1 || type == 2 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 点击上报:拖动拖拽条(左/右部分) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 点击上报:拖动拖拽条(左/右部分)r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: type == 1 ? .ot_click_dragFront : .ot_click_dragBehind, pageSource: .sp_stuck_previewSyncedUp, extParams: ["targetTime": type == 1 ? startTime * 1000 : endTime * 1000], remindmsg: "点击上报:拖动拖拽条(左/右部分)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return stuckPointCuttingView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /// 卡点时长显示视图 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    lazy var timeRemindLab: UILabel = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let timeRemindLab = UILabel(frame: CGRect(x: 0, y: stuckPointCuttingView.frame.minY - cDefaultMargin * 4 - cDefaultMargin * 3, width: view.frame.width, height: cDefaultMargin * 4)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        timeRemindLab.backgroundColor = UIColor.hexColor(hexadecimal: "#262626") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        timeRemindLab.textAlignment = .center 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        timeRemindLab.font = UIFont.systemFont(ofSize: 12) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        timeRemindLab.textColor = UIColor.hexColor(hexadecimal: "#999999") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let total: Float64 = ((stuckPointMusicData?.endTime ?? Float64(stuckPointMusicData?.duration ?? "0") ?? 0) - (stuckPointMusicData?.startTime ?? 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        timeRemindLab.text = "现卡点时长\(total.formatDurationToHMS()) / 原视频总时长\(selectedTotalDuration.formatDurationToHMS())" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return timeRemindLab 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 卡点模式标题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var pointEditRemindLab: UILabel = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let pointEditRemindLab = UILabel() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditRemindLab.backgroundColor = .clear 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditRemindLab.textAlignment = .left 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditRemindLab.font = UIFont.boldSystemFont(ofSize: 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditRemindLab.textColor = .black 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditRemindLab.text = "卡点模式" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pointEditRemindLab 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 卡点模式标题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var sppedTitleLab: UILabel = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let sppedTitleLab = UILabel() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sppedTitleLab.backgroundColor = .clear 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sppedTitleLab.textAlignment = .left 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sppedTitleLab.font = UIFont.boldSystemFont(ofSize: 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sppedTitleLab.textColor = .black 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sppedTitleLab.text = "节奏变化" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return sppedTitleLab 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 卡点模式下方操作区背景 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var pointEditBGView: UIView = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let pointEditBGView = UIView.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.backgroundColor = .clear 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pointEditBGView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //卡点编辑 btn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var pointEditerBtn: UIButton = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let pointEdterBtn = UIButton(type: .custom) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEdterBtn.setImage(UIImage().BF_Image(named: "pointEditerBtn_n"), for: .normal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEdterBtn.setImage(UIImage().BF_Image(named: "pointEditerBtn_h"), for: .selected) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEdterBtn.addTarget(self, action: #selector(pointEditerBtnClick(sender:)), for: .touchUpInside) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEdterBtn.isSelected = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEdterBtn.adjustsImageWhenHighlighted = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pointEdterBtn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //音乐编辑 btn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var musicEditerBtn: UIButton = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let musicEditerBtn = UIButton(type: .custom) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicEditerBtn.setImage(UIImage().BF_Image(named: "musicEditerBtn_n"), for: .normal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicEditerBtn.setImage(UIImage().BF_Image(named: "musicEditerBtn_h"), for: .selected) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicEditerBtn.addTarget(self, action: #selector(musicEditerBtnClick(sender:)), for: .touchUpInside) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicEditerBtn.adjustsImageWhenHighlighted = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return musicEditerBtn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //快慢速卡点模式 btn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var speedStuckBtn: UIButton = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let speedStuckBtn = UIButton(type: .custom) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedStuckBtn.setBackgroundImage(UIImage().BF_Image(named: "speedstuck_n"), for: .normal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedStuckBtn.setBackgroundImage(UIImage().BF_Image(named: "speedstuck_h"), for: .selected) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedStuckBtn.addTarget(self, action: #selector(editModelClick(sender:)), for: .touchUpInside) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedStuckBtn.isSelected = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lastEditModelBtn = speedStuckBtn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedStuckBtn.tag = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedStuckBtn.adjustsImageWhenHighlighted = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return speedStuckBtn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //跳转卡点模式 btn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var jumpPointBtn: UIButton = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let jumpPointBtn = UIButton(type: .custom) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jumpPointBtn.setImage(UIImage().BF_Image(named: "jumpPoint_n"), for: .normal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jumpPointBtn.setImage(UIImage().BF_Image(named: "jumpPoint_h"), for: .selected) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jumpPointBtn.tag = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jumpPointBtn.addTarget(self, action: #selector(editModelClick(sender:)), for: .touchUpInside) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jumpPointBtn.adjustsImageWhenHighlighted = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return jumpPointBtn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //仅配乐模式 btn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var onlyMusicBtn: UIButton = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let onlyMusicBtn = UIButton(type: .custom) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        onlyMusicBtn.setImage(UIImage().BF_Image(named: "onlyMusic_n"), for: .normal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        onlyMusicBtn.setImage(UIImage().BF_Image(named: "onlyMusic_h"), for: .selected) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        onlyMusicBtn.tag = 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        onlyMusicBtn.addTarget(self, action: #selector(editModelClick(sender:)), for: .touchUpInside) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        onlyMusicBtn.adjustsImageWhenHighlighted = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return onlyMusicBtn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //编辑模式的指示线 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy  var editModelLineView: UIView = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let editModelLineView = UIView.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        editModelLineView.backgroundColor = UIColor.hexColor(hexadecimal: "#EFEFEF") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return editModelLineView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //操作面板上的分割线 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy  var optionlineView: UIView = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let optionlineView = UIView.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        optionlineView.backgroundColor = UIColor.hexColor(hexadecimal: "#EFEFEF") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return optionlineView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var speedSettingView:PQSpeedSettingView = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let speedSettingView = PQSpeedSettingView.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedSettingView.backgroundColor = .clear 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedSettingView.viewType = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedSettingView.selectSpeedCallBack = { [weak self] maxSpeed,minSpeed in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BFLog(message: "maxSpeed is\(maxSpeed) minSpeed \(minSpeed)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(maxSpeed == 0 && minSpeed == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                self?.customSpeedSettingView.isHidden = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return speedSettingView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //自定义速度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lazy var customSpeedSettingView:PQCustomSpeedSettingView = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let customSpeedSettingView = PQCustomSpeedSettingView.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        customSpeedSettingView.isHidden = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return customSpeedSettingView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /// 音乐标题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lazy var musicNameView: UIView = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let musicNameView = UIView() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -178,8 +296,6 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         musicImageView.frame = CGRect(x: musicNameView.frame.height / 2 - 5, y: (musicNameView.frame.height - 22) / 2, width: 22, height: 22) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         musicNameView.addSubview(musicImageView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         musicNameLab.frame.origin.x = musicImageView.frame.maxX + 5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let ges = UITapGestureRecognizer(target: self, action: #selector(musicNameClick)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        musicNameView.addGestureRecognizer(ges) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return musicNameView 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -230,14 +346,55 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 点击上报:返回按钮 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_click_back, pageSource: .sp_stuck_previewSyncedUp, extParams: nil, remindmsg: "卡点视频数据上报-(点击上报:返回按钮)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @objc func musicNameClick() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        let musicVc = navigationController?.viewControllers.first(where: { vc in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            vc is PQStuckPointMusicController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        if musicVc != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            navigationController?.popToViewController(musicVc!, animated: true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //卡点编辑 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @objc func pointEditerBtnClick(sender: UIButton) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(sender.isSelected){return} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sender.isSelected = !sender.isSelected 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicEditerBtn.isSelected = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //音乐编辑 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @objc func musicEditerBtnClick(sender: UIButton) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(sender.isSelected){return} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sender.isSelected = !sender.isSelected 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditerBtn.isSelected = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //三种模式修改 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @objc func editModelClick(sender:UIButton){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(sender.isSelected){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BFLog(message:"已经是选中状态") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lastEditModelBtn?.isSelected = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sender.isSelected = !sender.isSelected 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lastEditModelBtn = sender 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BFLog(message: "sender tag is \(sender.tag)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(sender.tag == 1){//快慢速卡点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            speedSettingView.viewType = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            speedSettingView.snp.remakeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.right.equalToSuperview() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.top.equalTo(editModelLineView.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.height.equalTo(44) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else if(sender.tag == 2){//跳越卡点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            speedSettingView.viewType = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            speedSettingView.snp.remakeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.right.equalToSuperview() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.top.equalTo(editModelLineView.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                make.height.equalTo(30) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else if(sender.tag == 3){//仅音乐 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     override func viewWillDisappear(_ animated: Bool) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -252,6 +409,7 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         leftButton(image: "icon_detail_back", tintColor: PQBFConfig.shared.styleTitleColor) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         navHeadImageView?.addSubview(nextBtn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         navHeadImageView?.addSubview(musicNameView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 添加子视图 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         addSubViews() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 导出相册视频 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -269,14 +427,125 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         view.addSubview(playerView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        view.addSubview(sustomSwitchView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        view.addSubview(stuckPointCuttingView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        view.addSubview(timeRemindLab) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 添加一个背景区分不同色值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let backView: UIView = UIView() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        backView.backgroundColor = PQBFConfig.shared.styleBackGroundColor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        view.insertSubview(backView, aboveSubview: navHeadImageView!) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        backView.frame = CGRect(x: 0, y: navHeadImageView?.frame.height ?? 0, width: cScreenWidth, height: (stuckPointCuttingView.frame.minY - cDefaultMargin * 3) - (navHeadImageView?.frame.height ?? 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        view.addSubview(pointEditBGView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        view.addSubview(optionlineView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        view.addSubview(pointEditerBtn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        view.addSubview(musicEditerBtn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        view.addSubview(customSpeedSettingView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(pointEditRemindLab) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(sppedTitleLab) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(speedStuckBtn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(jumpPointBtn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(onlyMusicBtn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(editModelLineView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(speedSettingView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.addSubview(sustomSwitchView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        view.addSubview(stuckPointCuttingView) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditerBtn.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview().offset(100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.bottom.equalToSuperview().offset(-(14 + cAKSafeAreaHeight)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(24) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(24) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicEditerBtn.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.right.equalToSuperview().offset(-100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalTo(pointEditerBtn.snp_top) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(24) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(24) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditBGView.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.right.equalTo(view) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.bottom.equalTo(pointEditerBtn.snp_top).offset(-7) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(290) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        optionlineView.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.right.equalToSuperview() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.bottom.equalTo(pointEditBGView.snp_bottom).offset(-1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pointEditRemindLab.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedStuckBtn.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalTo(pointEditRemindLab.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jumpPointBtn.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalTo(speedStuckBtn.snp_right).offset(10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalTo(pointEditRemindLab.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        onlyMusicBtn.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalTo(jumpPointBtn.snp_right).offset(10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalTo(pointEditRemindLab.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(64) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        editModelLineView.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.right.equalToSuperview() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.bottom.equalTo(onlyMusicBtn.snp_bottom).offset(17) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedSettingView.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.right.equalToSuperview() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalTo(editModelLineView.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(44) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sppedTitleLab.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalToSuperview().offset(213) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sustomSwitchView.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview().offset(16) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalTo(sppedTitleLab.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(30) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(180) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        speedSettingView.snp.makeConstraints { make in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.left.equalToSuperview() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.top.equalTo(sppedTitleLab.snp_bottom).offset(8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.height.equalTo(354) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            make.width.equalTo(cScreenWidth) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @objc func nextBtnClick(sender _: UIButton) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -336,7 +605,7 @@ class PQStuckPointEditerController: PQBaseViewController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     func settingPlayerView() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 1,设置播放器的显示区域 和画布大小 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //  - 按第一个素材尺寸自适应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let playerShowHeight = (stuckPointCuttingView.frame.minY - cDefaultMargin * 3) - (navHeadImageView?.frame.maxY ?? 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let playerShowHeight = pointEditBGView.frame.minY - (navHeadImageView?.frame.maxY ?? 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var showRect: CGRect = PQPlayerViewModel.getShowCanvasRect(editProjectModel: projectModel, showType: 1, playerViewHeight: playerShowHeight) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if showRect.size.width == showRect.size.height { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if cScreenWidth > playerShowHeight { 
			 |