diff --git a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj index 3e06730..4e76b0c 100644 --- a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj +++ b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj @@ -1070,7 +1070,7 @@ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIMainStoryboardFile = Main; - INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; IPHONEOS_DEPLOYMENT_TARGET = 17.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1122,7 +1122,7 @@ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIMainStoryboardFile = Main; - INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; IPHONEOS_DEPLOYMENT_TARGET = 17.0; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate index a6019dc..bc72ced 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 0dbb94d..42df0d6 100644 --- a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -545,8 +545,8 @@ filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "280" - endingLineNumber = "280" + startingLineNumber = "373" + endingLineNumber = "373" landmarkName = "notification_didActiveNotification(notification:)" landmarkType = "7"> @@ -641,8 +641,8 @@ filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "265" - endingLineNumber = "265" + startingLineNumber = "266" + endingLineNumber = "266" landmarkName = "touchesCancelled(_:with:)" landmarkType = "7"> @@ -650,49 +650,49 @@ + + + + + + + + - - - - - - diff --git a/SwiftProject/SwiftProject/AppDelegate.swift b/SwiftProject/SwiftProject/AppDelegate.swift index c6561fa..dfaa7ee 100644 --- a/SwiftProject/SwiftProject/AppDelegate.swift +++ b/SwiftProject/SwiftProject/AppDelegate.swift @@ -26,6 +26,7 @@ import FirebaseRemoteConfig class AppDelegate: UIResponder, UIApplicationDelegate { var remoteConfig:FirebaseRemoteConfig.RemoteConfig? + var allowRotation = false var window: UIWindow? // var root:RootManager? var newWindow:UIWindow? @@ -87,6 +88,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } + + func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { + if self.allowRotation { + return UIInterfaceOrientationMask.all + } + return UIInterfaceOrientationMask.portrait + } + // func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // print("configurationForConnecting....") // let scene = UIWindowScene(session: connectingSceneSession, connectionOptions: options) diff --git a/SwiftProject/SwiftProject/CCKit/Base/BaseController.swift b/SwiftProject/SwiftProject/CCKit/Base/BaseController.swift index 914a27b..69c59c0 100644 --- a/SwiftProject/SwiftProject/CCKit/Base/BaseController.swift +++ b/SwiftProject/SwiftProject/CCKit/Base/BaseController.swift @@ -78,8 +78,13 @@ class BaseController: BaseVirtualController { } + + override func viewDidLoad() { super.viewDidLoad() + KAppDelegate?.allowRotation = false + self.setNeedsUpdateOfSupportedInterfaceOrientations() + self.setNavgationBarColorImg(color: .black) // self.setNavgationBarColorImg(color: tabBarTintSelectColor) self.setNavgationBarLine(color: BackGroundColor) diff --git a/SwiftProject/SwiftProject/CCKit/Base/BaseVirtualController.swift b/SwiftProject/SwiftProject/CCKit/Base/BaseVirtualController.swift index 1c08bed..61546a7 100644 --- a/SwiftProject/SwiftProject/CCKit/Base/BaseVirtualController.swift +++ b/SwiftProject/SwiftProject/CCKit/Base/BaseVirtualController.swift @@ -112,9 +112,13 @@ class BaseVirtualController: UIViewController { public func setNavgationBarColorImg(color:UIColor){ if(navtionBar == nil){ navtionBar = UIImageView.init() - navtionBar?.frame = CGRect.init(x: 0, y: 0, width: SCREEN_Width, height: SafeAreaTop_Height) +// navtionBar?.frame = CGRect.init(x: 0, y: 0, width: SCREEN_Width, height: SafeAreaTop_Height) navtionBar?.isUserInteractionEnabled = true view.addSubview(navtionBar!) + navtionBar?.snp.makeConstraints { make in + make.left.top.right.equalToSuperview() + make.height.equalTo(SafeAreaTop_Height) + } } if(navtionImgView == nil){ navtionImgView = UIImageView.init() diff --git a/SwiftProject/SwiftProject/CCKit/Root/RootNavigationController.swift b/SwiftProject/SwiftProject/CCKit/Root/RootNavigationController.swift index 3d0b007..61e6897 100644 --- a/SwiftProject/SwiftProject/CCKit/Root/RootNavigationController.swift +++ b/SwiftProject/SwiftProject/CCKit/Root/RootNavigationController.swift @@ -23,5 +23,7 @@ class RootNavigationController: UINavigationController { // Do any additional setup after loading the view. } +// appli + } diff --git a/SwiftProject/SwiftProject/Info.plist b/SwiftProject/SwiftProject/Info.plist index 4ffd80f..b14175f 100644 --- a/SwiftProject/SwiftProject/Info.plist +++ b/SwiftProject/SwiftProject/Info.plist @@ -2,8 +2,23 @@ + CFBundleURLTypes + + + CFBundleURLSchemes + + fb349630657543828 + + + + FacebookAppID + 349630657543828 FacebookAutoLogAppEventsEnabled + FacebookClientToken + 14b6cc1b437b5a201663ebd7e1a9b2bb + FacebookDisplayName + VPCamera FirebaseAutomaticScreenReportingEnabled NSAppTransportSecurity @@ -43,20 +58,5 @@ UIBackgroundModes - CFBundleURLTypes - - - CFBundleURLSchemes - - fb349630657543828 - - - - FacebookAppID - 349630657543828 - FacebookClientToken - 14b6cc1b437b5a201663ebd7e1a9b2bb - FacebookDisplayName - VPCamera diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift index 15c5b4c..4319099 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift @@ -104,6 +104,7 @@ class CCSpatialVideoDisplayController: BaseController { var customPlayer:ZZHCustomPlayer = { let cp = ZZHCustomPlayer(frame: .zero) + return cp }() @@ -213,7 +214,7 @@ class CCSpatialVideoDisplayController: BaseController { return button }() - + override func viewDidLoad() { super.viewDidLoad() @@ -222,8 +223,86 @@ class CCSpatialVideoDisplayController: BaseController { self.customPlayer.setUPPlayer() // 检查当前是否已连接到 AirPlay 设备 self.checkAirPlayStatus() + KAppDelegate?.allowRotation = true + listingScreenOrientatinChange() +// self.setNeedsUpdateOfSupportedInterfaceOrientations() } + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + self.customPlayer.play(false) + KAppDelegate?.allowRotation = false + self.setNeedsUpdateOfSupportedInterfaceOrientations() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + KAppDelegate?.allowRotation = true + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + if externalVC != nil { + externalVC?.playerLayer?.player = nil + } + customPlayer.play(false) + releaseVideoComposition() + + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoDisplayController) + Analytics.logEvent("preview_pv", parameters: ["refer_page":"视频预览页面","duration":sec]) + + print(".........ccs viewdid disappear....") + + } + + + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + } + + // 开始监听设备方向变化 + func listingScreenOrientatinChange() { + UIDevice.current.beginGeneratingDeviceOrientationNotifications() + // 添加监听器 + NotificationCenter.default.addObserver(self, selector: #selector(screenOrientationRotate), name: UIDevice.orientationDidChangeNotification, object: nil) + } + + @objc func screenOrientationRotate() { + let orientation = UIDevice.current.orientation + switch orientation { + case .portrait , .portraitUpsideDown: + print("Portrait") + self.customPlayer.snp.updateConstraints { make in + make.height.equalTo(460) + } + navtionBar?.snp.updateConstraints { make in + make.top.equalToSuperview().offset(0) + } + self.view.layoutIfNeeded() + self.customPlayer.layoutViewWhenScreenLandscape(value: false) + self.navtionBar?.isHidden = false + self.customPlayer.isLandscape = false + break + case .landscapeLeft , .landscapeRight: + print("Landscape ...") + self.customPlayer.isLandscape = true + self.customPlayer.snp.updateConstraints { make in + make.height.equalTo(KScreenWidth) + } + + navtionBar?.snp.updateConstraints { make in + make.top.equalToSuperview().offset(-KStatusBarHeight * 0.5) + } + self.view.layoutIfNeeded() + self.customPlayer.layoutViewWhenScreenLandscape(value: true) + self.navtionBar?.isHidden = true + break + default: + print("Other") + } + } func configureUI(){ self.view.backgroundColor = UIColor(hexString: "#060507") @@ -237,7 +316,19 @@ class CCSpatialVideoDisplayController: BaseController { self.view.bringSubviewToFront(self.navtionBar!) navtionBar?.addSubview(transformButton) + transformButton.snp.makeConstraints { make in + make.width.equalTo(56) + make.height.equalTo(36) + make.right.equalToSuperview().offset(-14) + make.centerY.equalToSuperview().offset(StatuBar_Height*0.5) + } navtionBar?.addSubview(mTopCenterTypeButton) + mTopCenterTypeButton.snp.makeConstraints { make in + make.height.equalTo(36) + make.width.equalTo(SCREEN_Width * 0.4 + 20) + make.centerX.equalToSuperview() + make.centerY.equalToSuperview().offset(StatuBar_Height*0.5) + } self.view.addSubview(tipsButton) self.view.addSubview(self.customPlayer) @@ -246,7 +337,9 @@ class CCSpatialVideoDisplayController: BaseController { make.height.equalTo(460) } self.customPlayer.sourceVideoURL = sourceVideoURL - + self.customPlayer.maskViewTapCallback = {[weak self] in + self?.navtionBar?.isHidden = !(self?.navtionBar?.isHidden ?? true) + } self.view.addSubview(self.maskLabel) self.maskLabel.snp.makeConstraints { make in make.left.equalTo(customPlayer.snp.left) @@ -294,27 +387,7 @@ class CCSpatialVideoDisplayController: BaseController { print("notificatin_newErrorLogEntryNotification....") } - override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - if externalVC != nil { - externalVC?.playerLayer?.player = nil - } - customPlayer.play(false) - releaseVideoComposition() - - let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoDisplayController) - Analytics.logEvent("preview_pv", parameters: ["refer_page":"视频预览页面","duration":sec]) - - print(".........ccs viewdid disappear....") - - } - - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - - } //MARK: - 监听设备投流 @objc private func airPlayStatusDidChange(_ notification: Notification) { @@ -472,6 +545,8 @@ class CCSpatialVideoDisplayController: BaseController { print("patialvideodisplaycontroler deinit......") releaseVideoComposition() NotificationCenter.default.removeObserver(self) + // 停止监听设备方向变化 + UIDevice.current.endGeneratingDeviceOrientationNotifications() } func releaseVideoComposition() { diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift index 240b12a..0d426c7 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift @@ -9,10 +9,14 @@ import Foundation import UIKit import AVKit +typealias CustomMaskViewTapCallback = ()->Void class ZZHCustomPlayer: UIView { - + //点击maskview 的回调,主要用于方向旋转 + var maskViewTapCallback:CustomMaskViewTapCallback? + //标记是否为横屏 + var isLandscape:Bool = false //视频资源 var sourceVideoURL:URL? var assetTrack:AVAssetTrack? @@ -63,7 +67,7 @@ class ZZHCustomPlayer: UIView { } } let playerPauseBgColor:UIColor = UIColor(r: 20, g: 20, b: 20, a: 0.2)//暂停时的背景颜色 - + let playerHeight = 230 //播放器默认高度 lazy var maskPlayerView:UIView? = {//播放按钮 背景 let bgView = UIView() @@ -127,7 +131,7 @@ class ZZHCustomPlayer: UIView { NotificationCenter.default.addObserver(self, selector: #selector(notification_PlayerEndTime(notification:)), name: AVPlayerItem.didPlayToEndTimeNotification, object: nil) let playerWidth = KScreenWidth - let playerHeight = 230 + playerLayerBgView = UIView() self.addSubview(playerLayerBgView!) playerLayerBgView!.snp.makeConstraints { make in @@ -147,11 +151,17 @@ class ZZHCustomPlayer: UIView { playerLayerBgView?.backgroundColor = UIColor.red //添加遮罩视图 - let mpBgView = UIView(frame: avPlayerLayer!.frame) + let mpBgView = UIView(frame: .zero) playerLayerBgView?.addSubview(mpBgView) + mpBgView.snp.makeConstraints { make in + make.left.top.bottom.right.equalToSuperview() + } self.maskPlayerView?.frame = mpBgView.bounds mpBgView.addSubview(maskPlayerView!) + maskPlayerView?.snp.makeConstraints { make in + make.left.top.bottom.right.equalToSuperview() + } let tgr = UITapGestureRecognizer(target: self, action: #selector(tapPlayerMaskView(sender: ))) mpBgView.addGestureRecognizer(tgr) @@ -168,8 +178,8 @@ class ZZHCustomPlayer: UIView { timeSlider!.snp.makeConstraints { make in make.left.equalToSuperview().offset(24) // make.right.equalToSuperview().offset(-24) - make.bottom.equalToSuperview().offset(0) - make.height.equalTo(114) + make.bottom.equalToSuperview().offset(-30) + make.height.equalTo(84) } edBtn = UIButton() @@ -186,6 +196,28 @@ class ZZHCustomPlayer: UIView { self.backgroundColor = .orange } + //屏幕旋转时自动隐藏timeSlider、edBtn,同时将播放layer设置为全屏 + func layoutViewWhenScreenLandscape(value:Bool) { + if value { + timeSlider?.isHidden = true + edBtn?.isHidden = true + playerLayerBgView?.snp.updateConstraints { make in + make.height.equalTo(KScreenWidth) + } + self.layoutIfNeeded() + avPlayerLayer?.frame = CGRect(x: 0, y: 0, width: KScreenHeight, height: KScreenWidth) + } + else { + timeSlider?.isHidden = false + edBtn?.isHidden = false + playerLayerBgView?.snp.updateConstraints { make in + make.height.equalTo(KScreenWidth) + } + self.layoutIfNeeded() + avPlayerLayer?.frame = CGRect(x: 0, y: 0, width: Int(KScreenWidth), height: playerHeight) + } + } + //显示调节瞳距、缩放的界面 @objc func showEDView(sender:UIButton){ CustomParamBoardView.showBoard(scaleCallback: {[weak self] scale in @@ -322,6 +354,14 @@ class ZZHCustomPlayer: UIView { //点击了player 的maskview @objc func tapPlayerMaskView(sender:UITapGestureRecognizer) { updatePlayMaskView(!(maskPlayerView!.isHidden)) + if isLandscape { + if let mcallback = maskViewTapCallback { + mcallback() + } + self.timeSlider?.isHidden = !self.timeSlider!.isHidden + self.edBtn?.isHidden = !self.edBtn!.isHidden + } + } //缩放手势 正在player的maskview进行缩放 diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift index 30306b0..0d3412f 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift @@ -9,6 +9,7 @@ import Foundation import UIKit typealias CustomSliderProcessChangeValueCallback = (_ currentValue:Float,_ isMoving:Bool)->Void class ZZHCustomSlider: UIView { + var sHeight:CGFloat? var sLabel:UILabel? var eLabel:UILabel? @@ -25,7 +26,7 @@ class ZZHCustomSlider: UIView { override init(frame: CGRect) { super.init(frame: frame) - self.backgroundColor = .black + self.backgroundColor = .clear self.addSubview(bgView) bgView.snp.makeConstraints { make in make.left.right.equalToSuperview() @@ -370,7 +371,7 @@ class CustomParamBoardView: UIView { make.bottom.equalToSuperview().offset(bgViewHeight) make.centerX.equalToSuperview() } - self.superBgView.backgroundColor = .black + self.superBgView.backgroundColor = .clear // let blackBgView = UIView() // self.addSubview(blackBgView)