-
Notifications
You must be signed in to change notification settings - Fork 224
自定义界面
fengxing edited this page Nov 22, 2018
·
1 revision
在使用SuperPlayer时,通常都会对界面做一些修改。在播放器中,我们编写的界面相关代码有:首屏、进度缓冲、错误提示、播放结束和播放控制。其中播放控制最有可能被修改,因此将其抽象出SuperPlayerControlView这个类。
SuperPlayerView会在播放过程中会调用下面这些方法更新状态
@interface SuperPlayerControlView : UIView
/**
* 播放进度
* @param currentTime 当前播放时长
* @param totalTime 视频总时长
* @param progress value(0.0~1.0)
* @param playable value(0.0~1.0)
*/
- (void)setProgressTime:(NSInteger)currentTime totalTime:(NSInteger)totalTime
progressValue:(CGFloat)progress playableValue:(CGFloat)playable;
/**
* 播放状态
* @param isPlay YES播放,NO暂停
*/
- (void)setPlayState:(BOOL)isPlay;
/**
* 开始新的播放
* @param isLive 是否为直播流
* @param isTimeShifting 是否在直播时移
* @param isAutoPlay 是否自动播放
*/
- (void)playerBegin:(SuperPlayerModel *)model
isLive:(BOOL)isLive
isTimeShifting:(BOOL)isTimeShifting
isAutoPlay:(BOOL)isAutoPlay;
@end
其它诸如 title、pointArray等为可选接口。
控制层的界面事件最终通过delegate回调的方式通知到SuperPlayerView
@protocol SuperPlayerControlViewDelegate <NSObject>
/** 返回按钮事件 */
- (void)controlViewBack:(UIView *)controlView;
/** 播放 */
- (void)controlViewPlay:(UIView *)controlView;
/** 暂停 */
- (void)controlViewPause:(UIView *)controlView;
/** 播放器全屏 */
- (void)controlViewChangeScreen:(UIView *)controlView withFullScreen:(BOOL)isFullScreen;
/** 锁定屏幕方向 */
- (void)controlViewLockScreen:(UIView *)controlView withLock:(BOOL)islock;
/** 截屏事件 */
- (void)controlViewSnapshot:(UIView *)controlView;
/** 切换分辨率按钮事件 */
- (void)controlViewSwitch:(UIView *)controlView withDefinition:(NSString *)definition;
/** 修改配置 */
- (void)controlViewConfigUpdate:(SuperPlayerControlView *)controlView;
/** 重新播放 */
- (void)controlViewReload:(UIView *)controlView;
/** seek事件,pos 0~1 */
- (void)controlViewSeek:(UIView *)controlView where:(CGFloat)pos;
/** 滑动预览,pos 0~1 */
- (void)controlViewPreview:(UIView *)controlView where:(CGFloat)pos;
@end
播放的默认控制界面是 SPDefaultControlView,可以通过下面方式获取到。
SPDefaultControlView *controlView = (SPDefaultControlView *)player.controlView;
举个栗子,比如有隐藏弹幕按钮需求。弹幕按钮在横屏时才会显示,那么我们可以在全屏事件中,直接将其隐藏
- (void)superPlayerFullScreenChanged:(SuperPlayerView *)player {
if (player.isFullScreen) {
SPDefaultControlView *controlView = (SPDefaultControlView *)player.controlView;
controlView.danmakuBtn.hidden = YES;
}
}
上面的这种修改只适用于简单需求,如果修改较大建议将SPDefaultControlView拷贝出来,自己修改代码。SPWeiboController是一个简单修改的示例。
player.controlView = # 你的播放控制层 #
设置controlView,控制层立即生效。