From d073847ce021077358ca6d48ecb0877b8caabacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Chmiela?= Date: Thu, 31 Mar 2016 23:10:25 +0200 Subject: [PATCH] Fix dismissal code not running by creating subclass of view controller and notifying view --- RCTVideo.h | 2 ++ RCTVideo.m | 4 +++- RCTVideo.xcodeproj/project.pbxproj | 6 ++++++ RCTVideoPlayerViewController.h | 14 ++++++++++++++ RCTVideoPlayerViewController.m | 22 ++++++++++++++++++++++ 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 RCTVideoPlayerViewController.h create mode 100644 RCTVideoPlayerViewController.m diff --git a/RCTVideo.h b/RCTVideo.h index 077f2e0a..ba43d89c 100644 --- a/RCTVideo.h +++ b/RCTVideo.h @@ -2,6 +2,7 @@ #import #import "AVKit/AVKit.h" #import "UIView+FindUIViewController.h" +#import "RCTVideoPlayerViewController.h" @class RCTEventDispatcher; @@ -10,5 +11,6 @@ - (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; - (AVPlayerViewController*)createPlayerViewController:(AVPlayer*)player withPlayerItem:(AVPlayerItem*)playerItem; +- (void)setFullscreen:(BOOL)fullscreen; @end diff --git a/RCTVideo.m b/RCTVideo.m index 4c001076..a32778a8 100644 --- a/RCTVideo.m +++ b/RCTVideo.m @@ -71,7 +71,8 @@ static NSString *const playbackBufferEmptyKeyPath = @"playbackBufferEmpty"; } - (AVPlayerViewController*)createPlayerViewController:(AVPlayer*)player withPlayerItem:(AVPlayerItem*)playerItem { - AVPlayerViewController* playerLayer= [[AVPlayerViewController alloc] init]; + RCTVideoPlayerViewController* playerLayer= [[RCTVideoPlayerViewController alloc] init]; + playerLayer.rctDelegate = self; playerLayer.view.frame = self.bounds; playerLayer.player = _player; playerLayer.view.frame = self.bounds; @@ -472,6 +473,7 @@ static NSString *const playbackBufferEmptyKeyPath = @"playbackBufferEmpty"; [_presentingViewController dismissViewControllerAnimated:true completion:^{ _fullScreenPlayerPresented = fullscreen; _presentingViewController = nil; + [self setControls:_controls]; [_eventDispatcher sendInputEventWithName:@"onVideoFullscreenPlayerDidDismiss" body:@{@"target": self.reactTag}]; }]; } diff --git a/RCTVideo.xcodeproj/project.pbxproj b/RCTVideo.xcodeproj/project.pbxproj index a8d2cddf..eabedd86 100644 --- a/RCTVideo.xcodeproj/project.pbxproj +++ b/RCTVideo.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 31CAFB211CADA8CD009BCF6F /* UIView+FindUIViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 31CAFB201CADA8CD009BCF6F /* UIView+FindUIViewController.m */; }; + 31CAFB2F1CADC77F009BCF6F /* RCTVideoPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 31CAFB2E1CADC77F009BCF6F /* RCTVideoPlayerViewController.m */; }; BBD49E3F1AC8DEF000610F8E /* RCTVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = BBD49E3A1AC8DEF000610F8E /* RCTVideo.m */; }; BBD49E401AC8DEF000610F8E /* RCTVideoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BBD49E3C1AC8DEF000610F8E /* RCTVideoManager.m */; }; /* End PBXBuildFile section */ @@ -28,6 +29,8 @@ 134814201AA4EA6300B7C361 /* libRCTVideo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTVideo.a; sourceTree = BUILT_PRODUCTS_DIR; }; 31CAFB1F1CADA8CD009BCF6F /* UIView+FindUIViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+FindUIViewController.h"; sourceTree = ""; }; 31CAFB201CADA8CD009BCF6F /* UIView+FindUIViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+FindUIViewController.m"; sourceTree = ""; }; + 31CAFB2D1CADC77F009BCF6F /* RCTVideoPlayerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTVideoPlayerViewController.h; sourceTree = ""; }; + 31CAFB2E1CADC77F009BCF6F /* RCTVideoPlayerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVideoPlayerViewController.m; sourceTree = ""; }; BBD49E391AC8DEF000610F8E /* RCTVideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTVideo.h; sourceTree = ""; }; BBD49E3A1AC8DEF000610F8E /* RCTVideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVideo.m; sourceTree = ""; }; BBD49E3B1AC8DEF000610F8E /* RCTVideoManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTVideoManager.h; sourceTree = ""; }; @@ -60,6 +63,8 @@ 31CAFB201CADA8CD009BCF6F /* UIView+FindUIViewController.m */, BBD49E391AC8DEF000610F8E /* RCTVideo.h */, BBD49E3A1AC8DEF000610F8E /* RCTVideo.m */, + 31CAFB2D1CADC77F009BCF6F /* RCTVideoPlayerViewController.h */, + 31CAFB2E1CADC77F009BCF6F /* RCTVideoPlayerViewController.m */, BBD49E3B1AC8DEF000610F8E /* RCTVideoManager.h */, BBD49E3C1AC8DEF000610F8E /* RCTVideoManager.m */, 134814211AA4EA7D00B7C361 /* Products */, @@ -123,6 +128,7 @@ buildActionMask = 2147483647; files = ( 31CAFB211CADA8CD009BCF6F /* UIView+FindUIViewController.m in Sources */, + 31CAFB2F1CADC77F009BCF6F /* RCTVideoPlayerViewController.m in Sources */, BBD49E3F1AC8DEF000610F8E /* RCTVideo.m in Sources */, BBD49E401AC8DEF000610F8E /* RCTVideoManager.m in Sources */, ); diff --git a/RCTVideoPlayerViewController.h b/RCTVideoPlayerViewController.h new file mode 100644 index 00000000..aac5e026 --- /dev/null +++ b/RCTVideoPlayerViewController.h @@ -0,0 +1,14 @@ +// +// RCTVideoPlayerViewController.h +// RCTVideo +// +// Created by Stanisław Chmiela on 31.03.2016. +// Copyright © 2016 Facebook. All rights reserved. +// + +#import +#import "RCTVideo.h" + +@interface RCTVideoPlayerViewController : AVPlayerViewController +@property (nonatomic, weak) id rctVideoView; +@end diff --git a/RCTVideoPlayerViewController.m b/RCTVideoPlayerViewController.m new file mode 100644 index 00000000..118180a7 --- /dev/null +++ b/RCTVideoPlayerViewController.m @@ -0,0 +1,22 @@ +// +// RCTVideoPlayerViewController.m +// RCTVideo +// +// Created by Stanisław Chmiela on 31.03.2016. +// Copyright © 2016 Facebook. All rights reserved. +// + +#import "RCTVideoPlayerViewController.h" + +@interface RCTVideoPlayerViewController () + +@end + +@implementation RCTVideoPlayerViewController + +- (IBAction)close:(id)sender +{ + [self.rctVideoView setFullscreen:false]; +} + +@end