123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- //
- // ClassroomCoursewarePlayView.m
- // KulexiuForTeacher
- //
- // Created by 王智 on 2022/11/17.
- //
- #import "ClassroomCoursewarePlayView.h"
- #import "KSWareSliderView.h"
- @interface ClassroomCoursewarePlayView ()<KSWareSliderDelegate>
- @property (weak, nonatomic) IBOutlet UILabel *musicNameLabel;
- @property (weak, nonatomic) IBOutlet UILabel *statusLabel;
- @property (weak, nonatomic) IBOutlet UIImageView *closeImageView;
- @property (weak, nonatomic) IBOutlet UILabel *timeLabel;
- @property (weak, nonatomic) IBOutlet UISlider *playProgress;
- @property (weak, nonatomic) IBOutlet UIButton *volumeButton;
- @property (weak, nonatomic) IBOutlet UIView *headView;
- @property (weak, nonatomic) IBOutlet UIView *fullView;
- @property (weak, nonatomic) IBOutlet UIView *fullContainer;
- @property (nonatomic, copy) CoursewarePlayerCallback callback;
- @property (weak, nonatomic) IBOutlet UIButton *playButton;
- @property (nonatomic, assign) NSInteger musicVolume;
- @property (weak, nonatomic) IBOutlet UIImageView *pickUpImage;
- @property (weak, nonatomic) IBOutlet UILabel *pickUpTitle;
- @property (nonatomic, strong) KSWareSliderView *volumeSlider;
- @property (nonatomic, assign) BOOL isShowSlider;
- @property (weak, nonatomic) IBOutlet UIView *sliderBgView;
- @property (nonatomic, assign) CGRect currentFrame;
- @end
- @implementation ClassroomCoursewarePlayView
- - (void)awakeFromNib {
- [super awakeFromNib];
- CGFloat width = 0.0f;
- CGFloat height = 0.0f;
-
- height = KLandscapeWidth / 4.0f * 3;
- if (height > KLandscapeHeight) {
- height = KLandscapeHeight;
- }
- width = height / 3.0f * 4;
- CGRect frame = CGRectMake((KLandscapeWidth - width) / 2.0f, 0, width, height);
- self.currentFrame = frame;
- CAGradientLayer *headLayer = [self createGradientLayerFromColor:HexRGB(0xFFEBD3) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0xFFD5AA) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, CGRectGetWidth(frame), 34)];
- headLayer.masksToBounds = YES;
- [self.headView.layer addSublayer:headLayer];
- self.headView.hidden = NO;
-
- CAGradientLayer *fullLayer = [self createGradientLayerFromColor:HexRGB(0xFFEBD3) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0xFFD5AA) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, CGRectGetWidth(frame), 72)];
- headLayer.masksToBounds = YES;
- [self.fullView.layer addSublayer:fullLayer];
- self.fullView.hidden = YES;
- self.fullContainer.hidden = YES;
- self.musicVolume = 100;
- self.progress = 0;
- [self.playProgress setThumbImage:[UIImage imageNamed:@"wareSlider_image"] forState:UIControlStateNormal];
- [self.playProgress setThumbImage:[UIImage imageNamed:@"wareSlider_image"] forState:UIControlStateFocused];
- [self addSubview:self.volumeSlider];
- self.volumeSlider.volumeValue = self.musicVolume;
- self.isShowSlider = NO;
-
- }
- + (instancetype)shareInstance {
- ClassroomCoursewarePlayView *view = [[[NSBundle mainBundle] loadNibNamed:@"ClassroomCoursewarePlayView" owner:nil options:nil] firstObject];
- return view;
- }
- - (void)coursewarePlayAction:(CoursewarePlayerCallback)callback {
- if (callback) {
- self.callback = callback;
- }
- }
- - (void)configWithImageName:(NSString *)imageName {
- self.musicNameLabel.text = [NSString returnNoNullStringWithString:imageName];
- self.playerStatus = COURSESWARESTATUS_LOADING;
- }
- - (void)showInView:(UIView *)displayView {
- self.isDisplay = YES;
- [displayView addSubview:self];
- }
- - (void)hideView {
- self.isDisplay = NO;
- self.isShowSlider = NO;
- [self removeFromSuperview];
- }
- - (void)setPlayerStatus:(COURSESWARESTATUS)playerStatus {
- _playerStatus = playerStatus;
- switch (playerStatus) {
- case COURSESWARESTATUS_LOADING:
- {
- self.statusLabel.text = @"正在加载…";
- self.headView.hidden = NO;
- self.fullView.hidden = YES;
- self.fullContainer.hidden = YES;
- }
- break;
- case COURSESWARESTATUS_FAILED:
- {
- self.statusLabel.text = @"重新加载";
- self.headView.hidden = NO;
- self.fullView.hidden = YES;
- self.fullContainer.hidden = YES;
- }
- break;
- case COURSESWARESTATUS_PAUSE:
- {
- self.statusLabel.text = @"暂停播放";
- self.headView.hidden = YES;
- self.fullView.hidden = NO;
- self.fullContainer.hidden = NO;
- [self.playButton setImage:[UIImage imageNamed:@"classroomPlayer_play"] forState:UIControlStateNormal];
- }
- break;
- case COURSESWARESTATUS_PLAYING:
- {
- self.statusLabel.text = @"正在播放";
- self.headView.hidden = YES;
- self.fullView.hidden = NO;
- self.fullContainer.hidden = NO;
- [self.playButton setImage:[UIImage imageNamed:@"classroomPlayer_pause"] forState:UIControlStateNormal];
- }
- break;
- default:
- break;
- }
- }
- - (CAGradientLayer *)createGradientLayerFromColor:(UIColor *)fromColor startPoint:(CGPoint)startPoint endColor:(UIColor *)endColor endPoint:(CGPoint)endPoint bounds:(CGRect)bounds {
- CAGradientLayer *gradientLayer = [CAGradientLayer layer];
- gradientLayer.colors = @[(__bridge id)fromColor.CGColor, (__bridge id)endColor.CGColor];
- gradientLayer.startPoint = startPoint;
- gradientLayer.endPoint = endPoint;
- gradientLayer.frame = bounds;
- gradientLayer.locations = @[@(0),@(1.0f)];
- return gradientLayer;
- }
- - (IBAction)playAction:(id)sender {
- if (self.playerStatus == COURSESWARESTATUS_PAUSE) {
- if (self.callback) {
- self.playerStatus = COURSESWARESTATUS_PLAYING;
- self.callback(COURSEPLAYERACTION_PLAY, self.musicVolume,0);
- }
- }
- else if (self.playerStatus == COURSESWARESTATUS_PLAYING) {
- if (self.callback) {
- self.playerStatus = COURSESWARESTATUS_PAUSE;
- self.callback(COURSEPLAYERACTION_PAUSE, self.musicVolume,0);
- }
- }
- }
- - (IBAction)closeAction:(id)sender {
- if (self.callback) {
- self.playerStatus = COURSESWARESTATUS_LOADING;
- self.callback(COURSEPLAYERACTION_CANCLE, self.musicVolume,0);
- }
- }
- - (IBAction)reloadAction:(id)sender {
-
- if (self.playerStatus == COURSESWARESTATUS_FAILED) {
- if (self.callback) {
- self.playerStatus = COURSESWARESTATUS_LOADING;
- self.callback(COURSEPLAYERACTION_RELOAD, self.musicVolume,0);
- }
- }
- else { // 收起
- if (self.callback) {
- self.callback(COURSEPLAYERACTION_HIDEVIEW, self.musicVolume,0);
- }
- [self hideView];
- }
- }
- - (void)setTotalMusicTime:(NSInteger)totalMusicTime {
- _totalMusicTime = totalMusicTime;
- self.timeLabel.text = [NSString stringWithFormat:@"00:00/%@",[self fullTimeDesc]];
- }
- - (void)setProgress:(float)progress {
- _progress = progress;
- [self.playProgress setValue:progress];
- [self displayTimeView];
-
- }
- - (NSString *)fullTimeDesc {
- NSInteger duration = self.totalMusicTime;
- NSString *timeDesc = @"00:00";
- if (duration / 60 > 0) {
- NSInteger secondTime = duration % 60;
- NSString *secondStr = @"";
- if (secondTime < 10) {
- secondStr = [NSString stringWithFormat:@"0%zd",secondTime];
- } else {
- secondStr = [NSString stringWithFormat:@"%zd",secondTime];
- }
- timeDesc = [NSString stringWithFormat:@"%2ld:%@", duration / 60, secondStr];
- }
- else {
- NSInteger secondTime = duration % 60;
- NSString *secondStr = @"";
- if (secondTime < 10) {
- secondStr = [NSString stringWithFormat:@"0%zd",secondTime];
- } else {
- secondStr = [NSString stringWithFormat:@"%zd",secondTime];
- }
- timeDesc = [NSString stringWithFormat:@"00:%@", secondStr];
- }
- return timeDesc;
- }
- - (void)displayTimeView {
- NSInteger duration = self.totalMusicTime;
- NSInteger currentDuration = duration * self.progress;
- NSString *timeDesc = @"00:00";
- if (currentDuration / 60 > 0) {
- NSInteger secondTime = currentDuration % 60;
- NSString *secondStr = @"";
- if (secondTime < 10) {
- secondStr = [NSString stringWithFormat:@"0%zd",secondTime];
- } else {
- secondStr = [NSString stringWithFormat:@"%zd",secondTime];
- }
- timeDesc = [NSString stringWithFormat:@"%2ld:%@", currentDuration / 60, secondStr];
- }
- else {
- NSInteger secondTime = currentDuration % 60;
- NSString *secondStr = @"";
- if (secondTime < 10) {
- secondStr = [NSString stringWithFormat:@"0%zd",secondTime];
- } else {
- secondStr = [NSString stringWithFormat:@"%zd",secondTime];
- }
- timeDesc = [NSString stringWithFormat:@"00:%@", secondStr];
- }
-
- self.timeLabel.text = [NSString stringWithFormat:@"%@/%@",timeDesc, [self fullTimeDesc]];
- }
- - (IBAction)progressValueChange:(UISlider *)sender {
- float progress = sender.value;
- if (self.callback) {
- self.callback(COURSEPLAYERACTION_CHANGEPROGRESS, self.musicVolume, progress);
- }
- }
- - (KSWareSliderView *)volumeSlider {
- if (!_volumeSlider) {
- _volumeSlider = [[KSWareSliderView alloc] initWithFrame:CGRectZero];
- _volumeSlider.delegate = self;
- _volumeSlider.backgroundColor = HexRGB(0xffffff);
- _volumeSlider.volumeValue = self.musicVolume;
- _volumeSlider.isVertical = YES;
- }
- return _volumeSlider;
- }
- - (IBAction)sliderDIsplay:(id)sender {
- self.isShowSlider = !_isShowSlider;
- }
- - (void)setIsShowSlider:(BOOL)isShowSlider {
- _isShowSlider = isShowSlider;
- if (isShowSlider) {
- [self.sliderBgView addSubview:self.volumeSlider];
- [self.volumeSlider mas_makeConstraints:^(MASConstraintMaker *make) {
- make.right.mas_equalTo(self.sliderBgView.mas_right).offset(-8);
- make.top.mas_equalTo(42);
- make.width.mas_equalTo(20);
- make.height.mas_equalTo(115);
- }];
- }
- else {
- [self.volumeSlider removeFromSuperview];
- }
- }
- #pragma mark ----- volumeSlider delegate
- - (void)volumeChangeAction:(NSInteger)volume {
- self.musicVolume = volume;
- if (self.callback) {
- self.callback(COURSEPLAYERACTION_VOLUME, self.musicVolume, 0);
- }
- }
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect {
- // Drawing code
- }
- */
- @end
|