diff --git a/AsyncDisplayKit/ASVideoNode.h b/AsyncDisplayKit/ASVideoNode.h index 9a7d6f9417..501380a10d 100644 --- a/AsyncDisplayKit/ASVideoNode.h +++ b/AsyncDisplayKit/ASVideoNode.h @@ -39,6 +39,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)play; - (void)pause; - (BOOL)isPlaying; +- (void)resetToPlaceholder; @property (nullable, nonatomic, strong, readwrite) AVAsset *asset; /** diff --git a/AsyncDisplayKit/ASVideoNode.mm b/AsyncDisplayKit/ASVideoNode.mm index f6c360384d..5ae7ba3ce0 100644 --- a/AsyncDisplayKit/ASVideoNode.mm +++ b/AsyncDisplayKit/ASVideoNode.mm @@ -671,6 +671,19 @@ static NSString * const kRate = @"rate"; return YES; } +- (void)resetToPlaceholder +{ + ASDN::MutexLocker l(__instanceLock__); + + if (_playerNode != nil) { + [_playerNode removeFromSupernode]; + _playerNode = nil; + } + + [_player seekToTime:kCMTimeZero]; + [self pause]; +} + #pragma mark - Playback observers diff --git a/AsyncDisplayKit/ASVideoPlayerNode.h b/AsyncDisplayKit/ASVideoPlayerNode.h index 1e8aead6d9..2af9f4b9f0 100644 --- a/AsyncDisplayKit/ASVideoPlayerNode.h +++ b/AsyncDisplayKit/ASVideoPlayerNode.h @@ -68,6 +68,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)play; - (void)pause; - (BOOL)isPlaying; +- (void)resetToPlaceholder; @end diff --git a/AsyncDisplayKit/ASVideoPlayerNode.mm b/AsyncDisplayKit/ASVideoPlayerNode.mm index 00be9a817b..5c26ddec3e 100644 --- a/AsyncDisplayKit/ASVideoPlayerNode.mm +++ b/AsyncDisplayKit/ASVideoPlayerNode.mm @@ -668,6 +668,11 @@ static void *ASVideoPlayerNodeContext = &ASVideoPlayerNodeContext; return [_videoNode isPlaying]; } +- (void)resetToPlaceholder +{ + [_videoNode resetToPlaceholder]; +} + - (NSArray *)controlsForLayoutSpec { NSMutableArray *controls = [[NSMutableArray alloc] initWithCapacity:_cachedControls.count];