Files
Woka_Native_iOS/WOKA/Theme/Controller/PlayerVC.swift
BilalKhanWDI 33141797b8 - Added haptics for theme and language change.
- Added haptics for app load
- Added JWplayer Pods.
- Added Av player for home live stream
- Made the Explore Woka Screen.
- Made button Effect for the selection
2024-05-30 19:49:41 +05:30

240 lines
7.9 KiB
Swift

//
// PlayerVC.swift
// WOKA
//
// Created by MacBook Pro on 30/05/24.
//
import UIKit
import JWPlayerKit
import AVKit
class PlayerVC: JWPlayerViewController ,JWPlayerViewControllerDelegate{
func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, relatedItemBeganPlaying item: JWPlayerKit.JWPlayerItem, atIndex index: Int, withMethod method: JWPlayerKit.JWRelatedMethod) {
}
override func jwplayer(_ player: any JWPlayer, didFinishLoadingWithTime loadTime: TimeInterval) {
print("LoadTime " , loadTime)
self.player.play()
}
@IBOutlet weak var innerPlayerView: UIView!
var previousScale: CGFloat = 1.0
let backButton = UIButton(type: .system)
var config : JWPlayerConfiguration!
var dismissTapped : (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
//
// self.forceFullScreenOnLandscape = true
// self.playerView.videoGravity = .resizeAspectFill
// let skinStylingBuilder = JWPlayerSkinBuilder()
// // Call methods on the builder to create your desired style.
// skinStylingBuilder.backgroundColor(UIColor.blue)
// skinStylingBuilder.fontColor(UIColor.red)
//// self.interfaceBehavior = .hidden
// self.playerView.captionStyle = .none
// // skinStylingBuilder.buttonsColor(UIColor.purple)
//
// let skinStyling = try? skinStylingBuilder.build()
// self.styling = skinStyling
player.configurePlayer(with: config)
// self.playerView.allowsPictureInPicturePlayback = true
// self.player.seek(to: 15)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.willEnterForegroundNotification, object: nil)
}
@objc func applicationDidBecomeActive() {
self.setDeviceOrientation(orientation: .landscapeRight)
}
// Handle device orientation change
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if (size.width > self.view.frame.size.width) {
print("Landscape")
} else {
DispatchQueue.main.async {
self.dismiss(animated: true)
// self.navigationController?.popViewController(animated: true)
}
}
// if (size.width != self.view.frame.size.width) {
// // Reload TableView to update cell's constraints.
// // Ensuring no dequeued cells have old constraints.
// DispatchQueue.main.async {
// }
// }
}
// Action for back button tap
@objc func backButtonTapped() {
// Perform actions when the back button is tapped, such as dismissing the current view controller
setDeviceOrientation(orientation: .portrait)
// or
// dismiss(animated: true, completion: nil)
}
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.isNavigationBarHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
// self.dismissFullScreen(animated: true)
player.stop()
}
override func jwplayer(_ player: JWPlayer, didPauseWithReason reason: JWPauseReason) {
super.jwplayer(player, didPauseWithReason: reason)
// Implement custom behavior
}
// MARK: - JWPlayerDelegate
// Player is ready
override func jwplayerIsReady(_ player: JWPlayer) {
super.jwplayerIsReady(player)
print("IsReady")
}
// Setup error
override func jwplayer(_ player: JWPlayer, failedWithSetupError code: UInt, message: String) {
super.jwplayer(player, failedWithSetupError: code, message: message)
}
// Error
override func jwplayer(_ player: JWPlayer, failedWithError code: UInt, message: String) {
super.jwplayer(player, failedWithError: code, message: message)
}
// Warning
override func jwplayer(_ player: JWPlayer, encounteredWarning code: UInt, message: String) {
super.jwplayer(player, encounteredWarning: code, message: message)
}
// Ad error
override func jwplayer(_ player: JWPlayer, encounteredAdError code: UInt, message: String) {
super.jwplayer(player, encounteredAdError: code, message: message)
}
// Ad warning
override func jwplayer(_ player: JWPlayer, encounteredAdWarning code: UInt, message: String) {
super.jwplayer(player, failedWithSetupError: code, message: message)
}
override func jwplayer(_ player: JWPlayer, isBufferingWithReason reason: JWBufferReason) {
player.play()
print("Reason ", reason)
}
}
// MARK: - Full Screen
extension PlayerVC{
func playerViewControllerWillGoFullScreen(_ controller: JWPlayerViewController) -> JWFullScreenViewController? {
// controller.shouldEnterFullScreen = false
controller.dismiss(animated: false) {
self.setDeviceOrientation(orientation: .portrait)
}
return nil
}
func playerViewControllerDidGoFullScreen(_ controller: JWPlayerViewController) {
return
}
func playerViewControllerWillDismissFullScreen(_ controller: JWPlayerViewController) {
controller.dismiss(animated: false) {
self.setDeviceOrientation(orientation: .portrait)
self.dismissTapped?()
}
}
func playerViewControllerDidDismissFullScreen(_ controller: JWPlayerViewController) {
self.dismissFullScreen(animated: true) {
self.navigationController?.popViewController(animated: true)
}
}
}
// MARK: - JWPlayerViewController Delegate Funcs
extension PlayerVC{
func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, controlBarVisibilityChanged isVisible: Bool, frame: CGRect) {
// print("CC visible",isVisible)
isVisible ? (backButton.isHidden = false) : (backButton.isHidden = true)
}
func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, sizeChangedFrom oldSize: CGSize, to newSize: CGSize) {
}
func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, screenTappedAt position: CGPoint) {
}
func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, relatedMenuOpenedWithItems items: [JWPlayerKit.JWPlayerItem], withMethod method: JWPlayerKit.JWRelatedInteraction) {
print("Item ",items)
}
// func playerViewController(_ controller: JWPlayerKit.JWPlayerViewController, relatedItemBeganPlaying item: JWPlayerKit.JWPlayerItem, atIndex index: Int, withMethod method: JWPlayerKit.JWRelatedMethod) {
//
// }
func playerViewController(_ controller: JWPlayerViewController, relatedMenuClosedWithMethod method: JWRelatedInteraction){
print("Close")
}
}
extension UIViewController {
func setDeviceOrientation(orientation: UIInterfaceOrientationMask) {
if #available(iOS 16.0, *) {
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: orientation))
} else {
UIDevice.current.setValue(orientation.toUIInterfaceOrientation.rawValue, forKey: "orientation")
}
}
}
extension UIInterfaceOrientationMask {
var toUIInterfaceOrientation: UIInterfaceOrientation {
switch self {
case .portrait:
return UIInterfaceOrientation.portrait
case .portraitUpsideDown:
return UIInterfaceOrientation.portraitUpsideDown
case .landscapeRight:
return UIInterfaceOrientation.landscapeRight
case .landscapeLeft:
return UIInterfaceOrientation.landscapeLeft
default:
return UIInterfaceOrientation.unknown
}
}
}