Skip to content

Commit

Permalink
Release 2.5.4
Browse files Browse the repository at this point in the history
- Added `resolveControlLayer` into SJControlLayerSwitcher. 当`switchControlLayerForIdentitfier:`无对应的控制层时, 该block将会被调用
- 其他调整
  • Loading branch information
changsanjiang committed Mar 31, 2019
1 parent 58301f9 commit dd7222c
Show file tree
Hide file tree
Showing 101 changed files with 2,570 additions and 2,361 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ pod 'SJBaseVideoPlayer'
# 如果网络不行安装不了, 可改成以下方式进行安装
pod 'SJBaseVideoPlayer', :git => 'https://gitee.com/changsanjiang/SJBaseVideoPlayer.git'
pod 'SJVideoPlayer', :git => 'https://gitee.com/changsanjiang/SJVideoPlayer.git'
pod 'SJObserverHelper', :git => 'https://gitee.com/changsanjiang/SJObserverHelper.git'
pod 'SJAttributesFactory', :git => 'https://gitee.com/changsanjiang/SJAttributesFactory.git'
$ pod update --no-repo-update (不要用 pod install 了, 用这个命令安装)
```
- [Base Video Player](https://github.com/changsanjiang/SJBaseVideoPlayer)
Expand Down
6 changes: 3 additions & 3 deletions SJVideoPlayer.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Pod::Spec.new do |s|
s.name = 'SJVideoPlayer'
s.version = '2.5.3'
s.version = '2.5.4'
s.summary = 'video player.'
s.description = 'https://github.com/changsanjiang/SJVideoPlayer/blob/master/README.md'
s.homepage = 'https://github.com/changsanjiang/SJVideoPlayer'
Expand All @@ -11,8 +11,8 @@ Pod::Spec.new do |s|
s.source = { :git => 'https://github.com/changsanjiang/SJVideoPlayer.git', :tag => "v#{s.version}" }
s.requires_arc = true
s.dependency 'Masonry'
s.dependency 'SJBaseVideoPlayer', '>= 2.3.4'
s.dependency 'SJAttributesFactory'
s.dependency 'SJBaseVideoPlayer', '>= 2.3.5'
s.dependency 'SJUIKit/AttributesFactory', '0.0.0.23'

s.source_files = 'SJVideoPlayer/*.{h,m}'

Expand Down
4 changes: 2 additions & 2 deletions SJVideoPlayer/Adapters/SJEdgeControlLayerAdapters.m
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
#else
#import "Masonry.h"
#endif
#if __has_include(<SJAttributesFactory/SJAttributeWorker.h>)
#import <SJAttributesFactory/SJAttributeWorker.h>
#if __has_include(<SJUIKit/SJAttributeWorker.h>)
#import <SJUIKit/SJAttributeWorker.h>
#else
#import "SJAttributeWorker.h"
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
#import "SJEdgeControlLayerSettings.h"
#import <UIKit/UIKit.h>
#import "SJEdgeControlLayerLoader.h"
#if __has_include(<SJObserverHelper/NSObject+SJObserverHelper.h>)
#import <SJObserverHelper/NSObject+SJObserverHelper.h>
#if __has_include(<SJUIKit/NSObject+SJObserverHelper.h>)
#import <SJUIKit/NSObject+SJObserverHelper.h>
#else
#import "NSObject+SJObserverHelper.h"
#endif
Expand Down
1 change: 0 additions & 1 deletion SJVideoPlayer/SJEdgeControlLayer/SJEdgeControlLayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ extern SJEdgeControlButtonItemTag const SJEdgeControlLayerCenterItem_Replay;
@property (nonatomic) BOOL disablePromptWhenNetworkStatusChanges; // 禁止网络状态变化提示
@property (nonatomic) BOOL hideBottomProgressSlider; // 隐藏底部进度条
@property (nonatomic) BOOL showResidentBackButton; // 返回按钮常驻
@property (nonatomic) BOOL resumePlaybackWhenPlayerViewScrollAppears; // 播放器滚动(ScrollView)出现时, 是否恢复播放
@property (nonatomic) BOOL showNetworkSpeedToLoadingView;
@end

Expand Down
22 changes: 4 additions & 18 deletions SJVideoPlayer/SJEdgeControlLayer/SJEdgeControlLayer.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
// Copyright © 2018 畅三江. All rights reserved.
//

#if __has_include(<SJAttributesFactory/SJAttributeWorker.h>)
#import <SJAttributesFactory/SJAttributeWorker.h>
#if __has_include(<SJUIKit/SJAttributeWorker.h>)
#import <SJUIKit/SJAttributeWorker.h>
#else
#import "SJAttributeWorker.h"
#endif

#if __has_include(<SJObserverHelper/NSObject+SJObserverHelper.h>)
#import <SJObserverHelper/NSObject+SJObserverHelper.h>
#if __has_include(<SJUIKit/NSObject+SJObserverHelper.h>)
#import <SJUIKit/NSObject+SJObserverHelper.h>
#else
#import "NSObject+SJObserverHelper.h"
#endif
Expand Down Expand Up @@ -952,20 +952,6 @@ - (void)videoPlayer:(__kindof SJBaseVideoPlayer *)videoPlayer didEndRotation:(BO
if ( !videoPlayer.controlLayerIsAppeared ) sj_view_makeAppear(_bottomProgressSlider, YES);
}

/// 在`tableView`或`collectionView`上将要显示的时候调用.
- (void)videoPlayerWillAppearInScrollView:(SJBaseVideoPlayer *)videoPlayer {
videoPlayer.view.hidden = NO;
if ( _resumePlaybackWhenPlayerViewScrollAppears ) {
[videoPlayer play];
}
}

/// 在`tableView`或`collectionView`上将要消失的时候调用.
- (void)videoPlayerWillDisappearInScrollView:(SJBaseVideoPlayer *)videoPlayer {
videoPlayer.view.hidden = YES;
[videoPlayer pause];
}

#pragma mark Player Horizontal Gesture
/// 是否可以触发播放器的手势
- (BOOL)videoPlayer:(__kindof SJBaseVideoPlayer *)videoPlayer gestureRecognizerShouldTrigger:(SJPlayerGestureType)type location:(CGPoint)location {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
#import "SJBaseVideoPlayer.h"
#endif

#if __has_include(<SJAttributesFactory/SJAttributeWorker.h>)
#import <SJAttributesFactory/SJAttributeWorker.h>
#if __has_include(<SJUIKit/SJAttributeWorker.h>)
#import <SJUIKit/SJAttributeWorker.h>
#else
#import "SJAttributeWorker.h"
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
#import "Masonry.h"
#endif

#if __has_include(<SJAttributesFactory/SJAttributeWorker.h>)
#import <SJAttributesFactory/SJAttributeWorker.h>
#if __has_include(<SJUIKit/SJAttributeWorker.h>)
#import <SJUIKit/SJAttributeWorker.h>
#else
#import "SJAttributeWorker.h"
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
#else
#import "Masonry.h"
#endif
#if __has_include(<SJAttributesFactory/SJAttributeWorker.h>)
#import <SJAttributesFactory/SJAttributeWorker.h>
#if __has_include(<SJUIKit/SJAttributeWorker.h>)
#import <SJUIKit/SJAttributeWorker.h>
#else
#import "SJAttributeWorker.h"
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
#else
#import "Masonry.h"
#endif
#if __has_include(<SJAttributesFactory/SJAttributeWorker.h>)
#import <SJAttributesFactory/SJAttributeWorker.h>
#if __has_include(<SJUIKit/SJAttributeWorker.h>)
#import <SJUIKit/SJAttributeWorker.h>
#else
#import "SJAttributeWorker.h"
#endif
Expand Down
4 changes: 1 addition & 3 deletions SJVideoPlayer/SJVideoPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,6 @@ NS_ASSUME_NONNULL_BEGIN
/// - Default value is NO.
@property (nonatomic) BOOL disablePromptWhenNetworkStatusChanges;

/// 是否恢复播放 当播放器滚动(ScrollView)出现时
@property (nonatomic) BOOL resumePlaybackWhenPlayerViewScrollAppears;

/// 是否隐藏底部的进度slider
@property (nonatomic) BOOL hideBottomProgressSlider;

Expand Down Expand Up @@ -167,5 +164,6 @@ typedef SJEdgeControlLayer SJEdgeLightweightControlLayer __deprecated;
- (nullable SJEdgeLightweightControlLayer *)defaultEdgeLightweightControlLayer __deprecated_msg("use `defaultEdgeControlLayer`");
@property (nonatomic, copy, nullable) NSArray<SJLightweightTopItem *> *topControlItems __deprecated_msg("use [player.defaultEdgeControlLayer.topAdapter addItem:item];");
@property (nonatomic, copy, nullable) void(^clickedTopControlItemExeBlock)(SJVideoPlayer *player, SJLightweightTopItem *item) __deprecated;
@property (nonatomic) BOOL resumePlaybackWhenPlayerViewScrollAppears __deprecated_msg("use `resumePlaybackWhenScrollAppeared`");
@end
NS_ASSUME_NONNULL_END
90 changes: 34 additions & 56 deletions SJVideoPlayer/SJVideoPlayer.m
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
#import "UIView+SJAnimationAdded.h"
#import <objc/message.h>

#if __has_include(<SJObserverHelper/NSObject+SJObserverHelper.h>)
#import <SJObserverHelper/NSObject+SJObserverHelper.h>
#if __has_include(<SJUIKit/NSObject+SJObserverHelper.h>)
#import <SJUIKit/NSObject+SJObserverHelper.h>
#else
#import "NSObject+SJObserverHelper.h"
#endif
Expand Down Expand Up @@ -84,7 +84,7 @@ - (void)dealloc {
#endif

+ (NSString *)version {
return @"v2.5.3";
return @"v2.5.4";
}

+ (instancetype)player {
Expand All @@ -94,13 +94,6 @@ + (instancetype)player {
- (instancetype)init {
self = [self _init];
if ( !self ) return nil;
__weak typeof(self) _self = self;
[self.switcher addControlLayerForIdentifier:SJControlLayer_Edge lazyLoading:^id<SJControlLayer> (SJControlLayerIdentifier identifier) {
__strong typeof(_self) self = _self;
if ( !self ) return nil;
return self.defaultEdgeControlLayer;
}];

[self.switcher switchControlLayerForIdentitfier:SJControlLayer_Edge]; // 切换到添加的控制层
self.showNetworkSpeedToLoadingView = YES; // 显示加载网速
self.showMoreItemForTopControlLayer = YES; // 显示更多按钮
Expand All @@ -111,17 +104,13 @@ - (instancetype)init {
// v2.4.0 之后删除了旧的lightweightPlayer控制层, 迁移至 defaultEdgeControlLayer
+ (instancetype)lightweightPlayer {
SJVideoPlayer *videoPlayer = [[SJVideoPlayer alloc] _init];
__weak typeof(videoPlayer) _videoPlayer = videoPlayer;
[videoPlayer.switcher addControlLayerForIdentifier:SJControlLayer_Edge lazyLoading:^id<SJControlLayer> (SJControlLayerIdentifier identifier) {
SJEdgeControlLayer *edgeControlLayer = _videoPlayer.defaultEdgeControlLayer;
edgeControlLayer.hideBottomProgressSlider = NO;
edgeControlLayer.topContainerView.sjv_disappearDirection =
edgeControlLayer.leftContainerView.sjv_disappearDirection =
edgeControlLayer.bottomContainerView.sjv_disappearDirection =
edgeControlLayer.rightContainerView.sjv_disappearDirection = SJViewDisappearAnimation_None;
[edgeControlLayer.topAdapter reload];
return edgeControlLayer;
}];
SJEdgeControlLayer *controlLayer = videoPlayer.defaultEdgeControlLayer;
controlLayer.hideBottomProgressSlider = NO;
controlLayer.topContainerView.sjv_disappearDirection =
controlLayer.leftContainerView.sjv_disappearDirection =
controlLayer.bottomContainerView.sjv_disappearDirection =
controlLayer.rightContainerView.sjv_disappearDirection = SJViewDisappearAnimation_None;
[controlLayer.topAdapter reload];
[videoPlayer.switcher switchControlLayerForIdentitfier:SJControlLayer_Edge];
return videoPlayer;
}
Expand All @@ -130,6 +119,23 @@ - (instancetype)_init {
self = [super init];
if ( !self ) return nil;
_switcher = [[SJControlLayerSwitcher alloc] initWithPlayer:self];
__weak typeof(self) _self = self;
_switcher.resolveControlLayer = ^id<SJControlLayer> _Nullable(SJControlLayerIdentifier identifier) {
__strong typeof(_self) self = _self;
if ( !self ) return nil;
if ( identifier == SJControlLayer_Edge )
return self.defaultEdgeControlLayer;
else if ( identifier == SJControlLayer_NotReachableAndPlaybackStalled )
return self.defaultNotReachableControlLayer;
else if ( identifier == SJControlLayer_FilmEditing )
return self.defaultFilmEditingControlLayer;
else if ( identifier == SJControlLayer_MoreSettting )
return self.defaultMoreSettingControlLayer;
else if ( identifier == SJControlLayer_LoadFailed )
return self.defaultLoadFailedControlLayer;
return nil;
};

dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self _initializeSwitcherObserver];
[self _initializeSettingsRecorder];
Expand All @@ -154,18 +160,6 @@ - (void)_initializeSwitcherObserver {

- (void)_initializePlayStatusObserver {
__weak typeof(self) _self = self;
[self.switcher addControlLayerForIdentifier:SJControlLayer_LoadFailed lazyLoading:^id<SJControlLayer> _Nonnull(SJControlLayerIdentifier identifier) {
__strong typeof(_self) self = _self;
if ( !self ) return nil;
return self.defaultLoadFailedControlLayer;
}];

[self.switcher addControlLayerForIdentifier:SJControlLayer_NotReachableAndPlaybackStalled lazyLoading:^id<SJControlLayer> _Nonnull(SJControlLayerIdentifier identifier) {
__strong typeof(_self) self = _self;
if ( !self ) return nil;
return self.defaultNotReachableControlLayer;
}];

_playStatusObserver = [self getPlayStatusObserver];
_playStatusObserver.playStatusDidChangeExeBlock = ^(SJBaseVideoPlayer * _Nonnull player) {
__strong typeof(_self) self = _self;
Expand Down Expand Up @@ -378,20 +372,14 @@ - (void)setShowNetworkSpeedToLoadingView:(BOOL)showNetworkSpeedToLoadingView {
- (BOOL)showNetworkSpeedToLoadingView {
return [self defaultEdgeControlLayer].showNetworkSpeedToLoadingView;
}

- (void)setDisablePromptWhenNetworkStatusChanges:(BOOL)disablePromptWhenNetworkStatusChanges {
[self defaultEdgeControlLayer].disablePromptWhenNetworkStatusChanges = disablePromptWhenNetworkStatusChanges;
}
- (BOOL)disablePromptWhenNetworkStatusChanges {
return [self defaultEdgeControlLayer].disablePromptWhenNetworkStatusChanges;
}

- (void)setResumePlaybackWhenPlayerViewScrollAppears:(BOOL)resumePlaybackWhenPlayerViewScrollAppears {
[self defaultEdgeControlLayer].resumePlaybackWhenPlayerViewScrollAppears = resumePlaybackWhenPlayerViewScrollAppears;
}
- (BOOL)resumePlaybackWhenPlayerViewScrollAppears {
return [self defaultEdgeControlLayer].resumePlaybackWhenPlayerViewScrollAppears;
}

- (void)setHideBottomProgressSlider:(BOOL)hideBottomProgressSlider {
self.defaultEdgeControlLayer.hideBottomProgressSlider = hideBottomProgressSlider;
}
Expand Down Expand Up @@ -433,14 +421,6 @@ - (void)setShowMoreItemForTopControlLayer:(BOOL)showMoreItemForTopControlLayer {
dispatch_async(dispatch_get_main_queue(), ^{
if ( showMoreItemForTopControlLayer ) {
[self.defaultEdgeControlLayer.topAdapter addItem:[self moreItemDelegate].item];
if ( ![self.switcher containsControlLayer:SJControlLayer_MoreSettting] ) {
__weak typeof(self) _self = self;
[self.switcher addControlLayerForIdentifier:SJControlLayer_MoreSettting lazyLoading:^id<SJControlLayer> _Nonnull(SJControlLayerIdentifier identifier) {
__strong typeof(_self) self = _self;
if ( !self ) return nil;
return self.defaultMoreSettingControlLayer;
}];
}
}
else {
[self.defaultEdgeControlLayer.topAdapter removeItemForTag:SJEdgeControlLayerTopItem_More];
Expand Down Expand Up @@ -485,14 +465,6 @@ - (void)setEnableFilmEditing:(BOOL)enableFilmEditing {
if ( enableFilmEditing ) {
// 将item加入到边缘控制层中
[[self defaultEdgeControlLayer].rightAdapter addItem:[self filmEditingItemDelegate].item];
if ( ![self.switcher containsControlLayer:SJControlLayer_FilmEditing] ) {
__weak typeof(self) _self = self;
[self.switcher addControlLayerForIdentifier:SJControlLayer_FilmEditing lazyLoading:^id<SJControlLayer> _Nonnull(SJControlLayerIdentifier identifier) {
__strong typeof(_self) self = _self;
if ( !self ) return nil;
return self.defaultFilmEditingControlLayer;
}];
}
}
else {
// 移除
Expand Down Expand Up @@ -605,5 +577,11 @@ - (void)_handleLightweightTopItemClickedEvent:(SJEdgeControlButtonItem *)item __
}
if ( self.clickedTopControlItemExeBlock ) self.clickedTopControlItemExeBlock(self, topItem);
}
- (void)setResumePlaybackWhenPlayerViewScrollAppears:(BOOL)resumePlaybackWhenPlayerViewScrollAppears {
self.resumePlaybackWhenScrollAppeared = resumePlaybackWhenPlayerViewScrollAppears;
}
- (BOOL)resumePlaybackWhenPlayerViewScrollAppears {
return self.resumePlaybackWhenScrollAppeared;
}
@end
NS_ASSUME_NONNULL_END
3 changes: 3 additions & 0 deletions SJVideoPlayer/Switcher/SJControlLayerSwitcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ extern SJControlLayerIdentifier SJControlLayer_Uninitialized;
/// - 你需要对它强引用, 否则会被释放
- (id<SJControlLayerSwitcherObsrever>)getObserver;

/// 当`switchControlLayerForIdentitfier:`无对应的控制层时, 该block将会被调用
@property (nonatomic, copy, nullable) id<SJControlLayer> _Nullable (^resolveControlLayer)(SJControlLayerIdentifier identifier);

@property (nonatomic, weak, nullable) id<SJControlLayerSwitcherDelegate> delegate;
@property (nonatomic, readonly) SJControlLayerIdentifier previousIdentifier;
@property (nonatomic, readonly) SJControlLayerIdentifier currentIdentifier;
Expand Down
13 changes: 10 additions & 3 deletions SJVideoPlayer/Switcher/SJControlLayerSwitcher.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
//

#import "SJControlLayerSwitcher.h"
#if __has_include(<SJObserverHelper/NSObject+SJObserverHelper.h>)
#import <SJObserverHelper/NSObject+SJObserverHelper.h>
#if __has_include(<SJUIKit/NSObject+SJObserverHelper.h>)
#import <SJUIKit/NSObject+SJObserverHelper.h>
#else
#import "NSObject+SJObserverHelper.h"
#endif
Expand Down Expand Up @@ -49,6 +49,7 @@ @implementation SJControlLayerSwitcher
@synthesize currentIdentifier = _currentIdentifier;
@synthesize previousIdentifier = _previousIdentifier;
@synthesize delegate = _delegate;
@synthesize resolveControlLayer = _resolveControlLayer;

#ifdef DEBUG
- (void)dealloc {
Expand All @@ -73,6 +74,12 @@ - (instancetype)initWithPlayer:(__weak SJBaseVideoPlayer *)videoPlayer {
- (void)switchControlLayerForIdentitfier:(SJControlLayerIdentifier)identifier {
id<SJControlLayer> _Nullable oldValue = [self controlLayerForIdentifier:self.currentIdentifier];
id<SJControlLayer> _Nullable newValue = [self controlLayerForIdentifier:identifier];
if ( !newValue && _resolveControlLayer ) {
newValue = _resolveControlLayer(identifier);
[self addControlLayerForIdentifier:identifier lazyLoading:^id<SJControlLayer> _Nonnull(SJControlLayerIdentifier identifier) {
return newValue;
}];
}
NSParameterAssert(newValue); if ( !newValue ) return;
if ( oldValue == newValue )
return;
Expand All @@ -83,7 +90,7 @@ - (void)switchControlLayerForIdentitfier:(SJControlLayerIdentifier)identifier {
}

// - begin -
[NSNotificationCenter.defaultCenter postNotificationName:SJPlayerWillBeginSwitchControlLayerNotification object:self userInfo:oldValue?@{SJPlayerSwitchControlLayerUserInfoKey:oldValue}:nil];
[NSNotificationCenter.defaultCenter postNotificationName:SJPlayerWillBeginSwitchControlLayerNotification object:self userInfo:newValue?@{SJPlayerSwitchControlLayerUserInfoKey:newValue}:nil];

_videoPlayer.controlLayerDataSource = nil;
_videoPlayer.controlLayerDelegate = nil;
Expand Down
Loading

0 comments on commit dd7222c

Please sign in to comment.