diff --git a/CHANGELOG.md b/CHANGELOG.md index 8668a91585..74c0c66a51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## Changelog +### Version 4.4.3 +* Fix iOS stressed mount/unmount crash [#1646](https://github.com/react-native-community/react-native-video/pull/1646) + ### Version 4.4.2 * Change compileOnly to implementation on gradle (for newer gradle versions and react-native 0.59 support) [#1592](https://github.com/react-native-community/react-native-video/pull/1592) * Replaced RCTBubblingEventBlock events by RCTDirectEventBlock to avoid event name collisions [#1625](https://github.com/react-native-community/react-native-video/pull/1625) diff --git a/ios/Video/RCTVideo.m b/ios/Video/RCTVideo.m index 71bf82d855..654deb2a81 100644 --- a/ios/Video/RCTVideo.m +++ b/ios/Video/RCTVideo.m @@ -578,26 +578,7 @@ - (void)dvAssetLoaderDelegate:(DVAssetLoaderDelegate *)loaderDelegate - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - // when controls==true, this is a hack to reset the rootview when rotation happens in fullscreen - if (object == _playerViewController.contentOverlayView) { - if ([keyPath isEqualToString:@"frame"]) { - - CGRect oldRect = [change[NSKeyValueChangeOldKey] CGRectValue]; - CGRect newRect = [change[NSKeyValueChangeNewKey] CGRectValue]; - - if (!CGRectEqualToRect(oldRect, newRect)) { - if (CGRectEqualToRect(newRect, [UIScreen mainScreen].bounds)) { - NSLog(@"in fullscreen"); - } else NSLog(@"not fullscreen"); - - [self.reactViewController.view setFrame:[UIScreen mainScreen].bounds]; - [self.reactViewController.view setNeedsLayout]; - } - - return; - } else - return [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } + if([keyPath isEqualToString:readyForDisplayKeyPath] && [change objectForKey:NSKeyValueChangeNewKey] && self.onReadyForDisplay) { self.onReadyForDisplay(@{@"target": self.reactTag}); return; @@ -713,7 +694,25 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N @"target": self.reactTag}); } } - } else { + } else if (object == _playerViewController.contentOverlayView) { + // when controls==true, this is a hack to reset the rootview when rotation happens in fullscreen + if ([keyPath isEqualToString:@"frame"]) { + + CGRect oldRect = [change[NSKeyValueChangeOldKey] CGRectValue]; + CGRect newRect = [change[NSKeyValueChangeNewKey] CGRectValue]; + + if (!CGRectEqualToRect(oldRect, newRect)) { + if (CGRectEqualToRect(newRect, [UIScreen mainScreen].bounds)) { + NSLog(@"in fullscreen"); + } else NSLog(@"not fullscreen"); + + [self.reactViewController.view setFrame:[UIScreen mainScreen].bounds]; + [self.reactViewController.view setNeedsLayout]; + } + + return; + } + } else if ([super respondsToSelector:@selector(observeValueForKeyPath:ofObject:change:context:)]) { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } }