1212
1313#import " ASVideoPlayerNode.h"
1414#import " ASDefaultPlaybackButton.h"
15+ #import " ASDisplayNodeInternal.h"
1516
1617static void *ASVideoPlayerNodeContext = &ASVideoPlayerNodeContext;
1718
1819@interface ASVideoPlayerNode () <ASVideoNodeDelegate>
1920{
20- ASDN::RecursiveMutex _videoPlayerLock;
21-
2221 __weak id <ASVideoPlayerNodeDelegate> _delegate;
2322
2423 struct {
@@ -165,7 +164,7 @@ - (void)didLoad
165164{
166165 [super didLoad ];
167166 {
168- ASDN::MutexLocker l (_videoPlayerLock );
167+ ASDN::MutexLocker l (_propertyLock );
169168 [self createControls ];
170169 }
171170}
@@ -174,7 +173,7 @@ - (void)visibleStateDidChange:(BOOL)isVisible
174173{
175174 [super visibleStateDidChange: isVisible];
176175
177- ASDN::MutexLocker l (_videoPlayerLock );
176+ ASDN::MutexLocker l (_propertyLock );
178177
179178 if (isVisible && _loadAssetWhenNodeBecomesVisible && _asset != _videoNode.asset ) {
180179 _videoNode.asset = _asset;
@@ -196,7 +195,7 @@ - (NSArray *)createDefaultControlElementArray
196195#pragma mark - UI
197196- (void )createControls
198197{
199- ASDN::MutexLocker l (_videoPlayerLock );
198+ ASDN::MutexLocker l (_propertyLock );
200199
201200 if (_controlsDisabled) {
202201 return ;
@@ -247,7 +246,7 @@ - (void)createControls
247246 }
248247
249248 ASPerformBlockOnMainThread (^{
250- ASDN::MutexLocker l (_videoPlayerLock );
249+ ASDN::MutexLocker l (_propertyLock );
251250 [self setNeedsLayout ];
252251 });
253252}
@@ -323,32 +322,35 @@ - (void)createDurationTextField
323322- (void )createScrubber
324323{
325324 if (_scrubberNode == nil ) {
326- _scrubberNode = [[ASDisplayNode alloc ] initWithViewBlock: ^UIView * _Nonnull{
325+ __weak __typeof__ (self) weakSelf = self;
326+ _scrubberNode = [[ASDisplayNode alloc ] initWithViewBlock: ^UIView * _Nonnull {
327+ __typeof__ (self) strongSelf = weakSelf;
328+
327329 UISlider *slider = [[UISlider alloc ] initWithFrame: CGRectZero];
328330 slider.minimumValue = 0.0 ;
329331 slider.maximumValue = 1.0 ;
330332
331333 if (_delegateFlags.delegateScrubberMinimumTrackTintColor ) {
332- slider.minimumTrackTintColor = [_delegate videoPlayerNodeScrubberMinimumTrackTint: self ];
334+ slider.minimumTrackTintColor = [_delegate videoPlayerNodeScrubberMinimumTrackTint: strongSelf ];
333335 }
334336
335337 if (_delegateFlags.delegateScrubberMaximumTrackTintColor ) {
336- slider.maximumTrackTintColor = [_delegate videoPlayerNodeScrubberMaximumTrackTint: self ];
338+ slider.maximumTrackTintColor = [_delegate videoPlayerNodeScrubberMaximumTrackTint: strongSelf ];
337339 }
338340
339341 if (_delegateFlags.delegateScrubberThumbTintColor ) {
340- slider.thumbTintColor = [_delegate videoPlayerNodeScrubberThumbTint: self ];
342+ slider.thumbTintColor = [_delegate videoPlayerNodeScrubberThumbTint: strongSelf ];
341343 }
342344
343345 if (_delegateFlags.delegateScrubberThumbImage ) {
344- UIImage *thumbImage = [_delegate videoPlayerNodeScrubberThumbImage: self ];
346+ UIImage *thumbImage = [_delegate videoPlayerNodeScrubberThumbImage: strongSelf ];
345347 [slider setThumbImage: thumbImage forState: UIControlStateNormal];
346348 }
347349
348350
349- [slider addTarget: self action: @selector (beginSeek ) forControlEvents: UIControlEventTouchDown];
350- [slider addTarget: self action: @selector (endSeek ) forControlEvents: UIControlEventTouchUpInside|UIControlEventTouchUpOutside|UIControlEventTouchCancel];
351- [slider addTarget: self action: @selector (seekTimeDidChange: ) forControlEvents: UIControlEventValueChanged];
351+ [slider addTarget: strongSelf action: @selector (beginSeek ) forControlEvents: UIControlEventTouchDown];
352+ [slider addTarget: strongSelf action: @selector (endSeek ) forControlEvents: UIControlEventTouchUpInside|UIControlEventTouchUpOutside|UIControlEventTouchCancel];
353+ [slider addTarget: strongSelf action: @selector (seekTimeDidChange: ) forControlEvents: UIControlEventValueChanged];
352354
353355 return slider;
354356 }];
@@ -490,19 +492,25 @@ - (void)togglePlayPause
490492
491493- (void )showSpinner
492494{
493- ASDN::MutexLocker l (_videoPlayerLock );
495+ ASDN::MutexLocker l (_propertyLock );
494496
495497 if (!_spinnerNode) {
498+
499+ __weak __typeof__ (self) weakSelf = self;
496500 _spinnerNode = [[ASDisplayNode alloc ] initWithViewBlock: ^UIView *{
501+ __typeof__ (self) strongSelf = weakSelf;
497502 UIActivityIndicatorView *spinnnerView = [[UIActivityIndicatorView alloc ] init ];
498- spinnnerView.color = _defaultControlsColor;
503+ spinnnerView.backgroundColor = [UIColor clearColor ];
504+
499505 if (_delegateFlags.delegateSpinnerTintColor ) {
500- spinnnerView.color = [_delegate videoPlayerNodeSpinnerTint: self ];
506+ spinnnerView.color = [_delegate videoPlayerNodeSpinnerTint: strongSelf];
507+ } else {
508+ spinnnerView.color = _defaultControlsColor;
501509 }
510+
502511 return spinnnerView;
503512 }];
504513 _spinnerNode.preferredFrameSize = CGSizeMake (44.0 , 44.0 );
505- _spinnerNode.backgroundColor = [UIColor clearColor ];
506514
507515 [self addSubnode: _spinnerNode];
508516 [self setNeedsLayout ];
@@ -512,7 +520,7 @@ - (void)showSpinner
512520
513521- (void )removeSpinner
514522{
515- ASDN::MutexLocker l (_videoPlayerLock );
523+ ASDN::MutexLocker l (_propertyLock );
516524
517525 if (!_spinnerNode) {
518526 return ;
0 commit comments