RQDspVideoDetailControlView.m 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. //
  2. // RQDspVideoDetailControlView.m
  3. // JSJP
  4. //
  5. // Created by RONGQING on 2022/1/19.
  6. //
  7. #import "RQDspVideoDetailControlView.h"
  8. #import <ZFPlayer/UIView+ZFFrame.h>
  9. #import <ZFPlayer/UIImageView+ZFCache.h>
  10. #import <ZFPlayer/ZFUtilities.h>
  11. #import "ZFLoadingView.h"
  12. #import <ZFPlayer/ZFSliderView.h>
  13. @interface RQDspVideoDetailControlView ()
  14. /// 封面图
  15. @property (nonatomic, strong) UIImageView *coverImageView;
  16. @property (nonatomic, strong) UIButton *playBtn;
  17. @property (nonatomic, strong) ZFSliderView *sliderView;
  18. @property (nonatomic, strong) UIImageView *bgImgView;
  19. @property (nonatomic, strong) UIView *effectView;
  20. @end
  21. @implementation RQDspVideoDetailControlView
  22. @synthesize player = _player;
  23. - (instancetype)init {
  24. self = [super init];
  25. if (self) {
  26. [self addSubview:self.playBtn];
  27. [self addSubview:self.sliderView];
  28. [self resetControlView];
  29. }
  30. return self;
  31. }
  32. - (void)layoutSubviews {
  33. [super layoutSubviews];
  34. self.coverImageView.frame = self.player.currentPlayerManager.view.bounds;
  35. CGFloat min_x = 0;
  36. CGFloat min_y = 0;
  37. CGFloat min_w = 0;
  38. CGFloat min_h = 0;
  39. CGFloat min_view_w = self.zf_width;
  40. CGFloat min_view_h = self.zf_height;
  41. min_w = 100;
  42. min_h = 100;
  43. self.playBtn.frame = CGRectMake(min_x, min_y, min_w, min_h);
  44. self.playBtn.center = self.center;
  45. min_x = 0;
  46. min_y = min_view_h - 80;
  47. min_w = min_view_w;
  48. min_h = 1;
  49. self.sliderView.frame = CGRectMake(min_x, min_y, min_w, min_h);
  50. self.bgImgView.frame = self.bounds;
  51. self.effectView.frame = self.bgImgView.bounds;
  52. }
  53. - (void)resetControlView {
  54. self.playBtn.hidden = YES;
  55. self.sliderView.value = 0;
  56. self.sliderView.bufferValue = 0;
  57. self.coverImageView.contentMode = UIViewContentModeScaleAspectFill;
  58. }
  59. /// 加载状态改变
  60. - (void)videoPlayer:(ZFPlayerController *)videoPlayer loadStateChanged:(ZFPlayerLoadState)state {
  61. if (state == ZFPlayerLoadStatePrepare) {
  62. self.coverImageView.hidden = NO;
  63. } else if (state == ZFPlayerLoadStatePlaythroughOK || state == ZFPlayerLoadStatePlayable) {
  64. self.coverImageView.hidden = YES;
  65. self.effectView.hidden = NO;
  66. }
  67. if ((state == ZFPlayerLoadStateStalled || state == ZFPlayerLoadStatePrepare) && videoPlayer.currentPlayerManager.isPlaying) {
  68. [self.sliderView startAnimating];
  69. } else {
  70. [self.sliderView stopAnimating];
  71. }
  72. }
  73. /// 播放进度改变回调
  74. - (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime {
  75. self.sliderView.value = videoPlayer.progress;
  76. }
  77. - (void)gestureSingleTapped:(ZFPlayerGestureControl *)gestureControl {
  78. @weakify(self)
  79. if (self.player.currentPlayerManager.isPlaying) {
  80. [self.player.currentPlayerManager pause];
  81. self.playBtn.hidden = NO;
  82. self.playBtn.transform = CGAffineTransformMakeScale(1.5f, 1.5f);
  83. [UIView animateWithDuration:0.2f delay:0
  84. options:UIViewAnimationOptionCurveEaseIn animations:^{
  85. @strongify(self)
  86. self.playBtn.transform = CGAffineTransformIdentity;
  87. } completion:^(BOOL finished) {
  88. }];
  89. } else {
  90. [self.player.currentPlayerManager play];
  91. self.playBtn.hidden = YES;
  92. }
  93. }
  94. - (void)setPlayer:(ZFPlayerController *)player {
  95. _player = player;
  96. [player.currentPlayerManager.view insertSubview:self.bgImgView atIndex:0];
  97. [self.bgImgView addSubview:self.effectView];
  98. [player.currentPlayerManager.view insertSubview:self.coverImageView atIndex:1];
  99. }
  100. - (void)showCoverViewWithUrl:(NSString *)coverUrl withImageMode:(UIViewContentMode)contentMode {
  101. self.coverImageView.contentMode = contentMode;
  102. [self.coverImageView setImageWithURLString:coverUrl placeholder:[UIImage imageNamed:@"img_video_loading"]];
  103. [self.bgImgView setImageWithURLString:coverUrl placeholder:[UIImage imageNamed:@"img_video_loading"]];
  104. }
  105. - (BOOL)gestureTriggerCondition:(ZFPlayerGestureControl *)gestureControl
  106. gestureType:(ZFPlayerGestureType)gestureType
  107. gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
  108. touch:(UITouch *)touch
  109. {
  110. if (gestureType == ZFPlayerGestureTypePan) {
  111. return NO;
  112. }
  113. return YES;
  114. }
  115. #pragma mark - getter
  116. - (UIImageView *)bgImgView {
  117. if (!_bgImgView) {
  118. _bgImgView = [[UIImageView alloc] init];
  119. _bgImgView.userInteractionEnabled = YES;
  120. }
  121. return _bgImgView;
  122. }
  123. - (UIView *)effectView {
  124. if (!_effectView) {
  125. if (@available(iOS 8.0, *)) {
  126. UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
  127. _effectView = [[UIVisualEffectView alloc] initWithEffect:effect];
  128. } else {
  129. UIToolbar *effectView = [[UIToolbar alloc] init];
  130. effectView.barStyle = UIBarStyleBlackTranslucent;
  131. _effectView = effectView;
  132. }
  133. }
  134. return _effectView;
  135. }
  136. - (UIButton *)playBtn {
  137. if (!_playBtn) {
  138. _playBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  139. _playBtn.userInteractionEnabled = NO;
  140. [_playBtn setImage:[UIImage imageNamed:@"icon_play_pause"] forState:UIControlStateNormal];
  141. }
  142. return _playBtn;
  143. }
  144. - (ZFSliderView *)sliderView {
  145. if (!_sliderView) {
  146. _sliderView = [[ZFSliderView alloc] init];
  147. _sliderView.maximumTrackTintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.2];
  148. _sliderView.minimumTrackTintColor = [UIColor whiteColor];
  149. _sliderView.bufferTrackTintColor = [UIColor clearColor];
  150. _sliderView.sliderHeight = 1;
  151. _sliderView.isHideSliderBlock = NO;
  152. }
  153. return _sliderView;
  154. }
  155. - (UIImageView *)coverImageView {
  156. if (!_coverImageView) {
  157. _coverImageView = [[UIImageView alloc] init];
  158. _coverImageView.userInteractionEnabled = YES;
  159. _coverImageView.clipsToBounds = YES;
  160. }
  161. return _coverImageView;
  162. }
  163. @end