diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate
index 11bf857..1a6ff84 100644
Binary files a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate and b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index e76c3a8..55b0ef9 100644
--- a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -403,9 +403,9 @@
filePath = "SwiftProject/Project/Util/ZZHImageExtension.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "72"
- endingLineNumber = "72"
- landmarkName = "getRotateFrom()"
+ startingLineNumber = "79"
+ endingLineNumber = "79"
+ landmarkName = "getRotateFrom(_:)"
landmarkType = "7">
+
+
@@ -601,5 +616,37 @@
landmarkType = "7">
+
+
+
+
+
+
+
+
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Contents.json
new file mode 100644
index 0000000..a44b4a6
--- /dev/null
+++ b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Tuning@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Tuning@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Tuning@2x.png b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Tuning@2x.png
new file mode 100644
index 0000000..b5c375b
Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Tuning@2x.png differ
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Tuning@3x.png b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Tuning@3x.png
new file mode 100644
index 0000000..3fc9b43
Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_TuningBtn.imageset/Tuning@3x.png differ
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_refresh.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_refresh.imageset/Contents.json
new file mode 100644
index 0000000..b010611
--- /dev/null
+++ b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_refresh.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "filename" : "refresh (1).png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_refresh.imageset/refresh (1).png b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_refresh.imageset/refresh (1).png
new file mode 100644
index 0000000..ff404ab
Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_refresh.imageset/refresh (1).png differ
diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift
index dc640a4..cd90f36 100644
--- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift
@@ -42,11 +42,16 @@ class ZZHCustomPlayer: UIView {
var temScale:CGFloat = 1.0
var currentScale:CGFloat = 1.0//当前缩放值
var currentED:Int = 5//当前的瞳距
+ let userdefaultValueKey_scale = "userdefaultValueKey_scale"
+ let userdefaultValueKey_ed = "userdefaultValueKey_ed"
+
//ui
var playerLayerBgView:UIView?
var avPlayer:AVPlayer?
var avPlayerLayer:AVPlayerLayer?
var timeSlider:ZZHCustomSlider?
+ var edBtn:UIButton? //瞳距调节按钮
+
var prePlayingState:Bool = true {//标记 在滑块拖动前,player的播放状态,以便在拖动完毕之后回复播放状态
didSet {
if(prePlayingState){
@@ -82,6 +87,10 @@ class ZZHCustomPlayer: UIView {
deinit {
print("zzhcustomplayer deinit......")
+ UserDefaults.standard.setValue(currentScale, forKey: self.userdefaultValueKey_scale )
+ UserDefaults.standard.setValue(currentED, forKey: self.userdefaultValueKey_ed)
+ UserDefaults.standard.synchronize()
+
releaseVideoComposition()
assetReader?.cancelReading()
NotificationCenter.default.removeObserver(self)
@@ -94,6 +103,23 @@ class ZZHCustomPlayer: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
+ //提前初始化配置参数
+ if let defaultScale = UserDefaults.standard.value(forKey: userdefaultValueKey_scale) as? CGFloat {
+ currentScale = defaultScale
+ }
+ else {
+ UserDefaults.standard.setValue(currentScale, forKey: userdefaultValueKey_scale)
+ UserDefaults.standard.synchronize()
+ }
+
+ if let defaultED = UserDefaults.standard.value(forKey: userdefaultValueKey_ed) as? Int {
+ currentED = defaultED
+ }
+ else{
+ UserDefaults.standard.setValue(currentED, forKey: userdefaultValueKey_ed)
+ UserDefaults.standard.synchronize()
+ }
+
NotificationCenter.default.addObserver(self, selector: #selector(notification_PlayerEndTime(notification:)), name: AVPlayerItem.didPlayToEndTimeNotification, object: nil)
let playerWidth = KScreenWidth
@@ -137,10 +163,30 @@ class ZZHCustomPlayer: UIView {
self.addSubview(timeSlider!)
timeSlider!.snp.makeConstraints { make in
make.left.equalToSuperview().offset(24)
- make.right.equalToSuperview().offset(-24)
+// make.right.equalToSuperview().offset(-24)
make.bottom.equalToSuperview().offset(0)
make.height.equalTo(120)
}
+
+ edBtn = UIButton()
+ edBtn?.setImage(UIImage(named: "custom_TuningBtn"), for: .normal)
+ edBtn?.addTarget(self, action: #selector(showEDView(sender:)), for: .touchUpInside)
+ self.addSubview(edBtn!)
+ edBtn!.snp.makeConstraints { make in
+ make.centerY.equalTo(timeSlider!.snp.centerY)
+ make.width.height.equalTo(40)
+ make.right.equalToSuperview().offset(-24)
+ make.left.equalTo(timeSlider!.snp.right).offset(24)
+ }
+ }
+
+ //显示调节瞳距、缩放的界面
+ @objc func showEDView(sender:UIButton){
+ CustomParamBoardView.showBoard(scaleCallback: {[weak self] scale in
+ self?.currentScale = scale
+ }, edCallback: {[weak self] ed in
+ self?.currentED = ed
+ }, scale: currentScale, ed: currentED)
}
//通过slider进行seek播放时间点
diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift
index 1523c45..9727b62 100644
--- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift
@@ -56,7 +56,7 @@ extension ZZHCustomPlayer {
func convertFrame(request:AVAsynchronousCIImageFilteringRequest){
let compositionTime = request.compositionTime
- let end:CMTime = CMTimeMake(value: Int64(compositionTime.value+1), timescale: compositionTime.timescale)
+// let end:CMTime = CMTimeMake(value: Int64(compositionTime.value+1), timescale: compositionTime.timescale)
// let tr = CMTimeRange(start: compositionTime, end: end)
var ciImg:CIImage? = nil
@@ -72,7 +72,8 @@ extension ZZHCustomPlayer {
}
else {
ciImg = self.otherModeImgWithMode(mode: self.selectedIndex,compositionTime: compositionTime)
- guard let ciImg else {print("未合成成功.....,此处将进行重新构建assetoutput,然后再次重拾")
+ guard let ciImg else {
+ print("未合成成功.....,此处将进行重新构建assetoutput,然后再次重拾")
quickLoadAReaderWhenSeek(startCT: compositionTime)
ciImg = self.otherModeImgWithMode(mode: self.selectedIndex,compositionTime: compositionTime)
break
@@ -97,7 +98,7 @@ extension ZZHCustomPlayer {
}
var ciImg:CIImage? = nil
- var presentTime:CMTime? = nil
+// var presentTime:CMTime? = nil
switch mode {
case .crossedEyes://交叉眼
ciImg = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime,scale: currentScale,ed:currentED)
diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift
index a040a85..4a3a7db 100644
--- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift
@@ -13,6 +13,7 @@ class ZZHCustomSlider: UIView {
var sLabel:UILabel?
var eLabel:UILabel?
var timeSlider:CustomSlider?
+
var processChangeValueCallback:CustomSliderProcessChangeValueCallback?
var preValue:Float = 0.0 //更新进度前的value
var totalSec:Int = -1//代表视频总时长
@@ -29,7 +30,7 @@ class ZZHCustomSlider: UIView {
bgView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.centerY.equalToSuperview()
- make.height.equalTo(28)
+ make.height.equalTo(38)
}
timeSlider = CustomSlider()
@@ -47,7 +48,7 @@ class ZZHCustomSlider: UIView {
bgView.addSubview(eLabel!)
sLabel?.snp.makeConstraints({ make in
make.left.equalTo(timeSlider!.snp.left)
- make.top.equalTo(timeSlider!.snp.bottom).offset(10)
+ make.top.equalTo(timeSlider!.snp.bottom).offset(20)
make.bottom.equalToSuperview()
})
@@ -192,3 +193,380 @@ class CustomSlider: UISlider {
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//底部自定义的参数调节视图
+typealias CCSliderCallback = (_ value:Float,_ isMoving:Bool)->Void
+class CCSlider: UIView{
+ var preValue:Float = 0.0 //更新进度前的value
+ var callback:CCSliderCallback?
+ var slider:CustomSlider?
+ var sHeight:CGFloat = 0.0
+ override init(frame: CGRect) {
+ super.init(frame: frame)
+ slider = CustomSlider()
+ slider?.isUserInteractionEnabled = false
+ self.addSubview(slider!)
+ slider!.snp.makeConstraints { make in
+ make.left.top.right.bottom.equalToSuperview()
+ }
+ slider?.setThumbImage(UIImage(named: "slider_thumb"), for: .normal)
+ slider?.minimumTrackTintColor = .white
+ slider?.maximumTrackTintColor = UIColor(r: 20, g: 20, b: 20, a: 0.8)
+ }
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+
+
+ override func touchesMoved(_ touches: Set, with event: UIEvent?) {
+ super.touchesMoved(touches, with: event)
+ if slider!.isNormal == true {
+ slider!.isNormal = false
+ sHeight = self.height
+ self.updateSliderHeight(height: self.sHeight + 5)
+ }
+ let touch = touches.first
+ if let th = touch {
+ let touchPoint = th.location(in: self.slider!)
+
+ updateProcessValue(value: Float(touchPoint.x / self.slider!.frame.size.width),isMoving: true)
+ }
+ }
+
+ override func touchesEnded(_ touches: Set, with event: UIEvent?) {
+ super.touchesEnded(touches, with: event)
+ if slider!.isNormal == false {
+ slider!.isNormal = true
+ self.updateSliderHeight(height: self.sHeight)
+ }
+
+ updateProcessValue(value: preValue,isMoving: false)
+ }
+
+ override func touchesCancelled(_ touches: Set, with event: UIEvent?) {
+ if slider!.isNormal == false {
+ slider!.isNormal = true
+ self.updateSliderHeight(height: self.sHeight)
+ }
+ updateProcessValue(value: preValue,isMoving: false)
+ }
+
+
+ func updateSliderHeight(height:CGFloat) {
+ UIView.animate(withDuration: 0.25) {[weak self] in
+ self?.snp.updateConstraints {make in
+ make.height.equalTo(height)
+ }
+ self?.superview?.layoutIfNeeded()
+ } completion: { finish in
+
+ }
+ }
+
+ func updateProcessValue(value:Float,isMoving:Bool) {
+ self.slider!.value = value
+ guard let callback else {
+ return
+ }
+ var currentValue = max(0, min(value, 1))
+
+ preValue = currentValue
+ callback(preValue,isMoving)
+
+ }
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typealias CustomParamBoardViewScaleCallback = (_ scale:CGFloat)->Void
+typealias CustomParamBoardViewEDCallback = (_ ed:Int)->Void
+typealias CustomParamBoardViewResetCallback = ()->Void
+class CustomParamBoardView: UIView {
+
+ var scaleCallback:CustomParamBoardViewScaleCallback?
+ var edCallback:CustomParamBoardViewEDCallback?
+ var resetCallback:CustomParamBoardViewResetCallback?
+ var scaleSlider:CCSlider?
+ var scaleTitleLabel:UILabel?
+
+ var edSlider:CCSlider?
+ var edTitleLabel:UILabel?
+
+ let bgViewHeight = 400
+ lazy var bgView:UIView = {
+ let bg = UIView()
+ bg.backgroundColor = UIColor(r: 28, g: 28, b: 28, a: 1)
+ bg.layer.cornerRadius = 12
+ bg.layer.masksToBounds = true
+
+ let titleLabel = UILabel()
+ titleLabel.text = NSLocalizedString("v1.6_参数设置", comment: "")
+ titleLabel.textColor = .white
+ titleLabel.font = UIFont.boldSystemFont(ofSize: 16)
+ bg.addSubview(titleLabel)
+
+ titleLabel.snp.makeConstraints { make in
+ make.left.equalTo(20)
+ make.top.equalTo(12)
+ }
+
+ let resetBtn = UIButton()
+ bg.addSubview(resetBtn)
+ resetBtn.addTarget(self, action: #selector(resetParams(sender: )), for: .touchUpInside)
+ resetBtn.snp.makeConstraints { make in
+ make.width.height.equalTo(26)
+ make.centerY.equalTo(titleLabel.snp.centerY)
+ make.right.equalToSuperview().offset(-20)
+ }
+ resetBtn.setImage(UIImage(named: "custom_refresh"), for: .normal)
+ return bg
+ }()
+
+ let superBgView = UIView()
+
+ override init(frame: CGRect) {
+ super.init(frame: frame)
+ let tgrBgView = UIView()
+ self.addSubview(tgrBgView)
+ tgrBgView.snp.makeConstraints { make in
+ make.left.top.right.bottom.equalToSuperview()
+ }
+ self.addSubview(superBgView)
+ self.superBgView.snp.makeConstraints { make in
+ make.height.equalTo(170)
+ make.width.equalTo(330)
+ make.bottom.equalToSuperview().offset(bgViewHeight)
+ make.centerX.equalToSuperview()
+ }
+ self.superBgView.backgroundColor = .black
+// let blackBgView = UIView()
+// self.addSubview(blackBgView)
+
+
+ self.superBgView.addSubview(bgView)
+ bgView.snp.makeConstraints { make in
+ make.left.top.right.bottom.equalToSuperview()
+ }
+
+ scaleTitleLabel = UILabel()
+ superBgView.addSubview(scaleTitleLabel!)
+ scaleTitleLabel?.snp.makeConstraints { make in
+ make.left.equalToSuperview().offset(20)
+ make.top.equalToSuperview().offset(50)
+ }
+ scaleTitleLabel?.textColor = .white
+ scaleTitleLabel?.font = UIFont.systemFont(ofSize: 14)
+ scaleTitleLabel?.text = "缩放:100%"
+ scaleSlider = CCSlider(frame: .zero)
+ scaleSlider?.callback = {[weak self] (value,isMoving) in //scale不能小于0.5
+ if isMoving {
+ if(self?.scaleSlider?.tag == 0) {
+ self?.scaleSlider?.tag = 1
+ self?.hiddenOther(slider: self?.edSlider, titleLabel: self?.edTitleLabel)
+ }
+ }
+ else {
+ self?.scaleSlider?.tag = 0
+ self?.showAll()
+ }
+ self?.updateScaleTitleWithValue(value:value)
+
+
+ }
+ superBgView.addSubview(scaleSlider!)
+ scaleSlider!.snp.makeConstraints { make in
+ make.left.equalTo(scaleTitleLabel!.snp.left)
+ make.top.equalTo(scaleTitleLabel!.snp.bottom).offset(-1)
+ make.right.equalToSuperview().offset(-20)
+ make.height.equalTo(30)
+ }
+
+
+
+ edTitleLabel = UILabel()
+ superBgView.addSubview(edTitleLabel!)
+ edTitleLabel?.snp.makeConstraints { make in
+ make.left.equalTo(scaleTitleLabel!.snp.left)
+ make.top.equalTo(scaleSlider!.snp.bottom).offset(10)
+ }
+ edTitleLabel?.textColor = .white
+ edTitleLabel?.font = UIFont.systemFont(ofSize: 14)
+ edTitleLabel?.text = "瞳距:10mm"
+
+ edSlider = CCSlider(frame: .zero)
+ edSlider?.callback = {[weak self] (value,isMoving) in
+ if isMoving {
+ if(self?.edSlider?.tag == 0) {
+ self?.edSlider?.tag = 1
+ self?.hiddenOther(slider: self?.scaleSlider, titleLabel: self?.scaleTitleLabel)
+ }
+ }
+ else {
+ self?.edSlider?.tag = 0
+ self?.showAll()
+ }
+
+ self?.updateEDTitleLabelWith(value:value)
+ }
+ superBgView.addSubview(edSlider!)
+ edSlider!.snp.makeConstraints { make in
+ make.left.equalTo(edTitleLabel!.snp.left)
+ make.top.equalTo(edTitleLabel!.snp.bottom).offset(-1)
+ make.right.equalToSuperview().offset(-20)
+ make.height.equalTo(30)
+ }
+
+
+
+
+
+
+ let tgr = UITapGestureRecognizer(target: self, action: #selector(hidenView(sender: )))
+ tgrBgView.addGestureRecognizer(tgr)
+ }
+
+ //更新缩放的标题文本
+ func updateScaleTitleWithValue(value:Float) {
+ let minValue = 0.6
+ let maxValue = 1.5
+ let resultValue = minValue + (maxValue - minValue) * Double(value)
+ let formattedValue = String(format: "\(NSLocalizedString("v1.6_缩放", comment: ""))%.f%%", (resultValue - 0.5) * 200)
+ self.scaleTitleLabel?.text = formattedValue
+ if let scaleCallback = self.scaleCallback {
+ scaleCallback(CGFloat(resultValue))
+ }
+ }
+
+ //提供给它的类方法调用
+ func exUpdateScaleTitleWithValue(resultValue:CGFloat) {
+ let formattedValue = String(format: "\(NSLocalizedString("v1.6_缩放", comment: ""))%.f%%", (resultValue - 0.5) * 200)
+ self.scaleTitleLabel?.text = formattedValue
+ let minValue = 0.6
+ let maxValue = 1.5
+// let resultValue = minValue + (maxValue - minValue) * Double(value)
+ let v = (resultValue - minValue) / (maxValue - minValue)
+ self.scaleSlider?.slider?.value = Float(v)
+ }
+
+ //更新瞳距的标题文本
+ func updateEDTitleLabelWith(value:Float) {
+ let currED = Int(60 * (value - 0.5))
+ if let edCallback = self.edCallback {
+ edCallback(Int(currED))
+ }
+ let formattedValue = String(format: "\(NSLocalizedString("v1.6_瞳距", comment: ""))%dmm", currED)
+ self.edTitleLabel?.text = formattedValue
+ }
+
+ func exUpdateEDTitleLabelWith(currED:Int) {
+ let formattedValue = String(format: "\(NSLocalizedString("v1.6_瞳距", comment: ""))%dmm", currED)
+ self.edTitleLabel?.text = formattedValue
+ let v = Float(currED) * 1.0 / 30.0 + 0.5
+ self.edSlider?.slider?.value = v
+ }
+
+
+
+
+ func hiddenOther(slider:CCSlider?,titleLabel:UILabel?) {
+ UIView.animate(withDuration: 0.25) {[weak self] in
+ slider?.alpha = 0
+ titleLabel?.alpha = 0
+ self?.bgView.alpha = 0
+ } completion: { finish in
+
+ }
+ }
+
+ func showAll() {
+ UIView.animate(withDuration: 0.25) {[weak self] in
+ self?.scaleSlider?.alpha = 1
+ self?.scaleTitleLabel?.alpha = 1
+ self?.edSlider?.alpha = 1
+ self?.edTitleLabel?.alpha = 1
+ self?.bgView.alpha = 1
+ } completion: { finish in
+
+ }
+ }
+
+ //dismiss
+ @objc func hidenView(sender:UITapGestureRecognizer) {
+ UIView.animate(withDuration: 0.25) {[weak self] in
+ self?.superBgView.snp.updateConstraints({ make in
+ make.bottom.equalToSuperview().offset(self?.bgViewHeight ?? 400)
+ })
+ self?.layoutIfNeeded()
+
+ } completion: { finish in
+ self.removeFromSuperview()
+ }
+
+ }
+
+ class func showBoard(scaleCallback:@escaping CustomParamBoardViewScaleCallback,edCallback:@escaping CustomParamBoardViewEDCallback,scale:CGFloat,ed:Int) {
+ let view = CustomParamBoardView(frame: .zero)
+ view.scaleCallback = scaleCallback
+ view.edCallback = edCallback
+ view.exUpdateEDTitleLabelWith(currED: ed)
+ view.exUpdateScaleTitleWithValue(resultValue: scale)
+ KWindow?.addSubview(view)
+ view.snp.makeConstraints { make in
+ make.left.top.right.bottom.equalToSuperview()
+ }
+ KWindow?.layoutIfNeeded()
+ UIView.animate(withDuration: 0.25) {
+ view.superBgView.snp.updateConstraints { make in
+ make.bottom.equalToSuperview().offset(-30)
+ }
+ view.layoutIfNeeded()
+ } completion: { finish in
+
+ }
+
+ }
+
+ //重置
+ @objc func resetParams(sender:UIButton) {
+ if let rc = self.resetCallback {
+ rc()
+ }
+ }
+
+
+
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+}
diff --git a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift
index 1de13c2..58b91bc 100644
--- a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift
+++ b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift
@@ -176,8 +176,8 @@ class PlayByTransferConvertor {
//将两张图片合成一张图片
func joinImages( leftImage:CIImage, rightImage:CIImage,scale:CGFloat,ed:Int) -> CIImage {
-// let scale = 1.0 //缩放参数,此处必须大于0.5
-// let ed = 5 //瞳距参数,暂定 瞳距与像素点的比例为1:2,瞳距的值范围为 -30 ~ +30 之间的整数
+//缩放参数,此处必须大于0.5
+//瞳距参数,暂定 瞳距与像素点的比例为1:2,瞳距的值范围为 -30 ~ +30 之间的整数
let edS = 30 //比列
let left = UIImage(ciImage: leftImage )
@@ -191,7 +191,7 @@ class PlayByTransferConvertor {
//获取调整了瞳距的图片
let x_offset = CGFloat(abs(ed) * edS) //关于瞳距的x偏移量
- let imageWidth = left.size.width/2 - x_offset
+ let imageWidth = left.size.width*0.5 - x_offset
let imageHeight = left.size.height
let ed_left = getImgWithED(image: n_left, imgWidth: imageWidth)
let ed_right = getImgWithED(image: n_right, imgWidth: imageWidth)
@@ -205,7 +205,7 @@ class PlayByTransferConvertor {
}
else if (ed < 0) {
ed_left.draw(in: CGRect(x:x_offset, y:0, width:imageWidth, height:imageHeight))
- ed_right.draw(in: CGRect(x:imageWidth, y:0, width:imageWidth, height:imageHeight))
+ ed_right.draw(in: CGRect(x:left.size.width*0.5, y:0, width:imageWidth, height:imageHeight))
}
else {//瞳距没有改变的情况
ed_left.draw(in: CGRect(x:0, y:0, width:imageWidth, height:imageHeight))
diff --git a/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift b/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift
index 16dc374..4565f02 100644
--- a/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift
+++ b/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift
@@ -7,9 +7,16 @@
import Foundation
import UIKit
-
+import CoreImage
extension UIImage {
+ func imageAtRect(rect: CGRect) -> UIImage? {
+ // 确保CGRect在图片范围内
+ guard let cgImage = self.cgImage else { return nil }
+ let imageRef = cgImage.cropping(to: rect)
+ return imageRef == nil ? nil : UIImage(cgImage: imageRef!)
+ }
+
// func rotate( radians: CGFloat) -> UIImage? {
// // 计算旋转角度对应的弧度
// let radians = radians * CGFloat.pi / 180
diff --git a/SwiftProject/SwiftProject/en.lproj/Localizable.strings b/SwiftProject/SwiftProject/en.lproj/Localizable.strings
index c7cad65..90ebc8e 100644
--- a/SwiftProject/SwiftProject/en.lproj/Localizable.strings
+++ b/SwiftProject/SwiftProject/en.lproj/Localizable.strings
@@ -134,3 +134,8 @@
"v1.5_submit" = "Submit";
"v1.5_menu_lang" = "en";
"v1.5_提交中..." = "submiting...";
+
+//V1.6版本
+"v1.6_参数设置" = "参数设置";
+"v1.6_缩放" = "缩放:";
+"v1.6_瞳距" = "瞳距:";
diff --git a/SwiftProject/SwiftProject/zh-Hans.lproj/Localizable.strings b/SwiftProject/SwiftProject/zh-Hans.lproj/Localizable.strings
index 05b9f53..c906643 100644
--- a/SwiftProject/SwiftProject/zh-Hans.lproj/Localizable.strings
+++ b/SwiftProject/SwiftProject/zh-Hans.lproj/Localizable.strings
@@ -134,3 +134,8 @@
"v1.5_submit" = "提交";
"v1.5_menu_lang" = "zh";
"v1.5_提交中..." = "提交中...";
+
+//V1.6版本
+"v1.6_参数设置" = "参数设置";
+"v1.6_缩放" = "缩放:";
+"v1.6_瞳距" = "瞳距:";