Merge pull request #3230 from iFeelSmart/fix/presentFullscreenPlayerImplementation
fix: implement lost presentFullscreenPlayer & dismissFullscreenPlayer
This commit is contained in:
@@ -679,7 +679,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
func setFullscreen(_ fullscreen:Bool) {
|
||||
if fullscreen && !_fullscreenPlayerPresented && _player != nil {
|
||||
// Ensure player view controller is not null
|
||||
if _playerViewController == nil && _controls {
|
||||
// Controls will be displayed even if it is disabled in configuration
|
||||
if _playerViewController == nil {
|
||||
self.usePlayerViewController()
|
||||
}
|
||||
|
||||
@@ -709,7 +710,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
|
||||
viewController.present(playerViewController, animated:true, completion:{ [weak self] in
|
||||
guard let self = self else {return}
|
||||
self._playerViewController?.showsPlaybackControls = self._controls
|
||||
// In fullscreen we must display controls
|
||||
self._playerViewController?.showsPlaybackControls = true
|
||||
self._fullscreenPlayerPresented = fullscreen
|
||||
self._playerViewController?.autorotate = self._fullscreenAutorotate
|
||||
|
||||
@@ -988,6 +990,14 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
_resouceLoaderDelegate?.setLicenseResultError(error)
|
||||
}
|
||||
|
||||
func dismissFullscreenPlayer(_ error:String!) {
|
||||
setFullscreen(false)
|
||||
}
|
||||
|
||||
func presentFullscreenPlayer(_ error:String!) {
|
||||
setFullscreen(true)
|
||||
}
|
||||
|
||||
// MARK: - RCTPlayerObserverHandler
|
||||
|
||||
func handleTimeUpdate(time:CMTime) {
|
||||
|
@@ -73,4 +73,10 @@ RCT_EXTERN_METHOD(setLicenseResult:(NSString *)license
|
||||
RCT_EXTERN_METHOD(setLicenseResultError(NSString *)error
|
||||
reactTag:(nonnull NSNumber *)reactTag)
|
||||
|
||||
RCT_EXTERN_METHOD(presentFullscreenPlayer
|
||||
reactTag:(nonnull NSNumber *)reactTag)
|
||||
|
||||
RCT_EXTERN_METHOD(dismissFullscreenPlayer
|
||||
reactTag:(nonnull NSNumber *)reactTag)
|
||||
|
||||
@end
|
||||
|
@@ -48,6 +48,29 @@ class RCTVideoManager: RCTViewManager {
|
||||
})
|
||||
}
|
||||
|
||||
@objc(dismissFullscreenPlayer:reactTag:)
|
||||
func dismissFullscreenPlayer(error: NSString, reactTag: NSNumber) -> Void {
|
||||
bridge.uiManager.prependUIBlock({_ , viewRegistry in
|
||||
let view = viewRegistry?[reactTag]
|
||||
if !(view is RCTVideo) {
|
||||
RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view))
|
||||
} else if let view = view as? RCTVideo {
|
||||
view.dismissFullscreenPlayer(error as String)
|
||||
}
|
||||
})
|
||||
}
|
||||
@objc(presentFullscreenPlayer:reactTag:)
|
||||
func presentFullscreenPlayer(error: NSString, reactTag: NSNumber) -> Void {
|
||||
bridge.uiManager.prependUIBlock({_ , viewRegistry in
|
||||
let view = viewRegistry?[reactTag]
|
||||
if !(view is RCTVideo) {
|
||||
RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view))
|
||||
} else if let view = view as? RCTVideo {
|
||||
view.presentFullscreenPlayer(error as String)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override func constantsToExport() -> [AnyHashable : Any]? {
|
||||
return [
|
||||
"ScaleNone": AVLayerVideoGravity.resizeAspect,
|
||||
|
Reference in New Issue
Block a user