|
@@ -6,12 +6,13 @@
|
|
|
// Copyright © 2020 gin. All rights reserved.
|
|
|
//
|
|
|
|
|
|
-import UIKit
|
|
|
import BFFramework
|
|
|
+import UIKit
|
|
|
|
|
|
class MVBannerCell: UICollectionViewCell {
|
|
|
-
|
|
|
- //封面
|
|
|
+ // 做同款
|
|
|
+ var reCreateBtnClicHandle: ((_ sender: UIButton, _ videoInfo: PQVideoListModel?) -> Void)?
|
|
|
+ // 封面
|
|
|
lazy var converView: UIImageView = {
|
|
|
let iv = UIImageView()
|
|
|
iv.clipsToBounds = true
|
|
@@ -20,123 +21,167 @@ class MVBannerCell: UICollectionViewCell {
|
|
|
iv.addCorner(corner: 8)
|
|
|
return iv
|
|
|
}()
|
|
|
-
|
|
|
- lazy var progressView:UIProgressView = {
|
|
|
|
|
|
+ lazy var progressView: UIProgressView = {
|
|
|
let progressView = UIProgressView(progressViewStyle: .default)
|
|
|
progressView.progressTintColor = .white
|
|
|
return progressView
|
|
|
|
|
|
}()
|
|
|
-
|
|
|
+
|
|
|
lazy var backShadowView: UIView = {
|
|
|
- let backShowView = UIView.init()
|
|
|
+ let backShowView = UIView()
|
|
|
backShowView.layer.masksToBounds = false
|
|
|
backShowView.layer.shadowColor = UIColor.black.cgColor
|
|
|
- backShowView.layer.shadowOpacity = 0.3;//设置阴影的透明度
|
|
|
+ backShowView.layer.shadowOpacity = 0.3 // 设置阴影的透明度
|
|
|
backShowView.layer.shadowRadius = 4
|
|
|
- backShowView.layer.shadowOffset = CGSize.init(width: 0, height: 4)//设置阴影的偏移量
|
|
|
+ backShowView.layer.shadowOffset = CGSize(width: 0, height: 4) // 设置阴影的偏移量
|
|
|
return backShowView
|
|
|
}()
|
|
|
|
|
|
- //下面 marks view
|
|
|
+ // 下面 marks view
|
|
|
lazy var bottmMaskView: UIImageView = {
|
|
|
- let bottmMaskView = UIImageView.init(image: UIImage.init(named: "home_marks"))
|
|
|
+ let bottmMaskView = UIImageView(image: UIImage(named: "home_marks"))
|
|
|
+ bottmMaskView.isUserInteractionEnabled = true
|
|
|
bottmMaskView.addCorner(corner: 8)
|
|
|
return bottmMaskView
|
|
|
}()
|
|
|
- //暂停view
|
|
|
+
|
|
|
+ // 暂停view
|
|
|
lazy var pauseView: UIImageView = {
|
|
|
- let pauseView = UIImageView.init(image: UIImage.init(named: "video_pause"))
|
|
|
+ let pauseView = UIImageView(image: UIImage(named: "video_pause"))
|
|
|
pauseView.isHidden = false
|
|
|
return pauseView
|
|
|
}()
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+ /// 音乐内容view
|
|
|
+ lazy var musicContenView: UIView = {
|
|
|
+ let musicContenView = UIView()
|
|
|
+ return musicContenView
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 音乐图片
|
|
|
+ lazy var musicImageView: UIImageView = {
|
|
|
+ let musicImageView = UIImageView(image: UIImage(named: "musicName_icon"))
|
|
|
+ musicImageView.showLoadingAnimation(duration: 3)
|
|
|
+ return musicImageView
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 音乐背景
|
|
|
+ lazy var musicBgView: UIImageView = {
|
|
|
+ let musicBgView = UIImageView(image: UIImage(named: "musicName_bg"))
|
|
|
+ return musicBgView
|
|
|
+ }()
|
|
|
+
|
|
|
/// 音乐歌曲名称
|
|
|
lazy var musicNameLab: LMJHorizontalScrollText = {
|
|
|
- let name:String = "文件名称"
|
|
|
- let nameWidth: CGFloat = sizeWithText(text: "\(name)", font: UIFont.systemFont(ofSize: 13), size: CGSize(width: cScreenWidth - ((cDefaultMargin * 6 + 16 * 2) * 2) - (25 + cDefaultMargin * 3), height: cDefaultMargin * 3)).width
|
|
|
- let musicNameLab = LMJHorizontalScrollText(frame: CGRect(x: 0, y: 0, width: nameWidth < 127 ? 127 : nameWidth, height: cDefaultMargin * 3))
|
|
|
+// let name: String = ""
|
|
|
+// let nameWidth: CGFloat = sizeWithText(text: "\(name)", font: UIFont.systemFont(ofSize: 13), size: CGSize(width: cScreenWidth - ((cDefaultMargin * 6 + 16 * 2) * 2) - (25 + cDefaultMargin * 3), height: cDefaultMargin * 3)).width
|
|
|
+ let musicNameLab = LMJHorizontalScrollText(frame: CGRect(x: 16 + cDefaultMargin, y: 0, width: cScreenWidth - 90 - (16 + cDefaultMargin) * 2 - (10 + 106 + 10), height: 32))
|
|
|
musicNameLab.textColor = UIColor.white
|
|
|
- musicNameLab.textFont = UIFont.systemFont(ofSize: 13)
|
|
|
-
|
|
|
+ musicNameLab.textFont = UIFont.systemFont(ofSize: 15, weight: .semibold)
|
|
|
musicNameLab.speed = 0.03
|
|
|
musicNameLab.moveDirection = LMJTextScrollMoveLeft
|
|
|
- musicNameLab.moveMode = LMJTextScrollContinuous
|
|
|
+ musicNameLab.moveMode = LMJTextScrollFromOutside
|
|
|
return musicNameLab
|
|
|
}()
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- /// 音乐标题
|
|
|
- lazy var musicNameView: UIView = {
|
|
|
- let musicNameView = UIView()
|
|
|
- musicNameView.addSubview(musicNameLab)
|
|
|
- let nameWidth: CGFloat = musicNameLab.frame.width + (25 + cDefaultMargin * 3)
|
|
|
- musicNameView.frame = CGRect(x: 16, y: 492, width: nameWidth, height: cDefaultMargin * 3)
|
|
|
-
|
|
|
- let musicImageView = UIImageView(image:UIImage.init().BF_Image(named: "stuckPoint_reCreate_music"))
|
|
|
- musicImageView.frame = CGRect(x:0, y: (musicNameView.frame.height - 22) / 2, width: 22, height: 22)
|
|
|
- musicNameView.addSubview(musicImageView)
|
|
|
- musicNameLab.frame.origin.x = musicImageView.frame.maxX + 5
|
|
|
- return musicNameView
|
|
|
- }()
|
|
|
-
|
|
|
- //做同款
|
|
|
- var reCreateBtnClicHandle: ((_ sender: UIButton, _ videoInfo: PQVideoListModel?) -> Void)?
|
|
|
+
|
|
|
lazy var reCreateBtn: UIButton = {
|
|
|
let reCreateBtn = UIButton(type: .custom)
|
|
|
+ reCreateBtn.setTitle(" 使用音乐", for: .normal)
|
|
|
+ reCreateBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .semibold)
|
|
|
+ reCreateBtn.setTitleColor(UIColor.white, for: .normal)
|
|
|
reCreateBtn.addCorner(corner: 8)
|
|
|
reCreateBtn.setImage(UIImage(named: "reCreate"), for: .normal)
|
|
|
reCreateBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
|
|
|
reCreateBtn.backgroundColor = UIColor.hexColor(hexadecimal: "#3DC1C1")
|
|
|
+ reCreateBtn.alpha = 0.8
|
|
|
return reCreateBtn
|
|
|
}()
|
|
|
-
|
|
|
- //视频分类
|
|
|
- lazy var typeLabe: UILabel = {
|
|
|
- let typeLabe = UILabel()
|
|
|
- typeLabe.backgroundColor = UIColor.init(red: 1, green: 1, blue: 1, alpha: 0.2)
|
|
|
- typeLabe.alpha = 0.8
|
|
|
- typeLabe.textColor = .white
|
|
|
- typeLabe.text = "热门"
|
|
|
- typeLabe.textAlignment = .center
|
|
|
- typeLabe.addCorner(corner: 12)
|
|
|
- typeLabe.font = UIFont.boldSystemFont(ofSize: 13)
|
|
|
- return typeLabe
|
|
|
+
|
|
|
+ // 视频分类
|
|
|
+ lazy var typeImage: UIImageView = {
|
|
|
+ let typeImage = UIImageView(image: UIImage(named: "categary_icon"))
|
|
|
+ return typeImage
|
|
|
}()
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+ // 视频分类
|
|
|
+ lazy var typeLab: UILabel = {
|
|
|
+ let typeLab = UILabel()
|
|
|
+ typeLab.font = UIFont.systemFont(ofSize: 14, weight: .semibold)
|
|
|
+ typeLab.textColor = UIColor.white
|
|
|
+ return typeLab
|
|
|
+ }()
|
|
|
+
|
|
|
+ override func prepareForReuse() {
|
|
|
+ musicNameLab.stop()
|
|
|
+ }
|
|
|
+
|
|
|
var videoData: PQVideoListModel? {
|
|
|
didSet {
|
|
|
addData()
|
|
|
-
|
|
|
+ addLayout()
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
override func layoutSubviews() {
|
|
|
super.layoutSubviews()
|
|
|
-
|
|
|
+ }
|
|
|
+
|
|
|
+ override init(frame: CGRect) {
|
|
|
+ super.init(frame: frame)
|
|
|
+ contentView.addSubview(backShadowView)
|
|
|
+ backShadowView.addSubview(converView)
|
|
|
+ backShadowView.addSubview(bottmMaskView)
|
|
|
+ backShadowView.addSubview(pauseView)
|
|
|
+ bottmMaskView.addSubview(progressView)
|
|
|
+ bottmMaskView.addSubview(typeImage)
|
|
|
+ bottmMaskView.addSubview(typeLab)
|
|
|
+ bottmMaskView.addSubview(reCreateBtn)
|
|
|
+ bottmMaskView.addSubview(musicContenView)
|
|
|
+ musicContenView.addSubview(musicBgView)
|
|
|
+ musicContenView.addSubview(musicImageView)
|
|
|
+ musicBgView.addSubview(musicNameLab)
|
|
|
+ }
|
|
|
+
|
|
|
+ func addData() {
|
|
|
+ typeLab.text = "\(videoData?.categoryName ?? "")"
|
|
|
+ if videoData?.categoryImage != nil {
|
|
|
+ typeImage.setNetImage(url: "\(videoData?.categoryImage ?? "")", placeholder: UIImage(named: "categary_icon")!)
|
|
|
+ } else {
|
|
|
+ typeImage.image = UIImage(named: "categary_icon")
|
|
|
+ }
|
|
|
+ musicNameLab.text = "\(videoData?.reCreateVideoData?.rhythmMusicName ?? "") "
|
|
|
+ let coverImg = (videoData?.videoCoverSnapshotPath != nil && (videoData?.videoCoverSnapshotPath?.count ?? 0) > 0) ? videoData?.videoCoverSnapshotPath ?? "" : (videoData?.coverImg?["coverImgPath"] as? String ?? "")
|
|
|
+ BFLog(message: "coverImg url is \(coverImg)")
|
|
|
+ netImage(url: coverImg, mainView: converView)
|
|
|
+ musicNameLab.stop()
|
|
|
+ DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) { [weak self] in
|
|
|
+ self?.musicNameLab.move()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ///
|
|
|
+ /// - Returns: <#description#>
|
|
|
+ func addLayout() {
|
|
|
backShadowView.snp.remakeConstraints { make in
|
|
|
make.width.equalToSuperview().offset(-15)
|
|
|
make.height.equalToSuperview().offset(-15)
|
|
|
make.left.equalToSuperview().offset(15)
|
|
|
make.top.equalToSuperview()
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
converView.snp.remakeConstraints { make in
|
|
|
make.width.equalToSuperview()
|
|
|
- make.height.equalToSuperview().offset(0)
|
|
|
+ make.height.equalToSuperview()
|
|
|
make.left.equalToSuperview()
|
|
|
make.top.equalToSuperview()
|
|
|
}
|
|
|
|
|
|
- typeLabe.snp.remakeConstraints { make in
|
|
|
- make.width.equalTo(50)
|
|
|
- make.height.equalTo(24)
|
|
|
- make.left.equalTo(musicNameView.snp_left)
|
|
|
- make.top.equalTo(musicNameView.snp_bottom).offset(6)
|
|
|
+ pauseView.snp.remakeConstraints { make in
|
|
|
+ make.width.equalTo(72)
|
|
|
+ make.height.equalTo(82)
|
|
|
+ make.center.equalToSuperview()
|
|
|
}
|
|
|
|
|
|
bottmMaskView.snp.remakeConstraints { make in
|
|
@@ -146,58 +191,56 @@ class MVBannerCell: UICollectionViewCell {
|
|
|
make.bottom.equalToSuperview()
|
|
|
}
|
|
|
|
|
|
+ progressView.snp.remakeConstraints { make in
|
|
|
+ make.height.equalTo(2)
|
|
|
+ make.left.equalToSuperview().offset(3)
|
|
|
+ make.right.equalToSuperview().offset(-3)
|
|
|
+ make.bottom.equalToSuperview()
|
|
|
+ }
|
|
|
+
|
|
|
reCreateBtn.snp.remakeConstraints { make in
|
|
|
- make.width.equalTo(92)
|
|
|
+ make.width.equalTo(106)
|
|
|
make.height.equalTo(46)
|
|
|
- make.right.equalToSuperview().offset(-16)
|
|
|
- make.bottom.equalToSuperview().offset(-20)
|
|
|
+ make.right.equalToSuperview().offset(-cDefaultMargin)
|
|
|
+ make.bottom.equalTo(progressView.snp_top).offset(-cDefaultMargin * 2)
|
|
|
}
|
|
|
|
|
|
- pauseView.snp.remakeConstraints { make in
|
|
|
- make.width.equalTo(72)
|
|
|
- make.height.equalTo(82)
|
|
|
- make.center.equalToSuperview()
|
|
|
+ musicContenView.snp.remakeConstraints { make in
|
|
|
+ make.centerY.equalTo(reCreateBtn)
|
|
|
+ make.height.equalTo(32)
|
|
|
+ make.right.equalTo(reCreateBtn.snp_left).offset(-cDefaultMargin)
|
|
|
+ make.left.equalToSuperview().offset(cDefaultMargin)
|
|
|
}
|
|
|
|
|
|
- progressView.snp.remakeConstraints { make in
|
|
|
- make.width.equalToSuperview().offset(-6)
|
|
|
- make.height.equalTo(2)
|
|
|
- make.left.equalToSuperview().offset(3)
|
|
|
- make.bottom.equalToSuperview().offset(0)
|
|
|
+ musicImageView.snp.makeConstraints { make in
|
|
|
+ make.top.left.equalToSuperview()
|
|
|
+ make.width.height.equalTo(musicContenView.snp_height)
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- override init(frame: CGRect) {
|
|
|
- super.init(frame: frame)
|
|
|
-
|
|
|
- contentView.addSubview(backShadowView)
|
|
|
- backShadowView.addSubview(converView)
|
|
|
- backShadowView.addSubview(bottmMaskView)
|
|
|
- backShadowView.addSubview(typeLabe)
|
|
|
- backShadowView.addSubview(musicNameView)
|
|
|
- backShadowView.addSubview(reCreateBtn)
|
|
|
- backShadowView.addSubview(pauseView)
|
|
|
- backShadowView.addSubview(progressView)
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- func addData() {
|
|
|
- typeLabe.text = videoData?.categoryName
|
|
|
-
|
|
|
- musicNameLab.text = " \(videoData?.reCreateVideoData?.rhythmMusicName ?? "") "
|
|
|
|
|
|
- let coverImg = (videoData?.videoCoverSnapshotPath != nil && (videoData?.videoCoverSnapshotPath?.count ?? 0) > 0) ? videoData?.videoCoverSnapshotPath ?? "" : (videoData?.coverImg?["coverImgPath"] as? String ?? "")
|
|
|
- BFLog(message: "coverImg url is \(coverImg)")
|
|
|
- netImage(url: coverImg, mainView: converView)
|
|
|
+ musicBgView.snp.makeConstraints { make in
|
|
|
+ make.left.equalTo(musicImageView.snp_centerX)
|
|
|
+ make.right.top.height.equalToSuperview()
|
|
|
+ }
|
|
|
+
|
|
|
+ typeImage.snp.remakeConstraints { make in
|
|
|
+ make.left.equalTo(musicContenView.snp_left)
|
|
|
+ make.height.width.equalTo(22)
|
|
|
+ make.bottom.equalTo(musicContenView.snp_top).offset(-cDefaultMargin)
|
|
|
+ }
|
|
|
+ typeLab.snp.remakeConstraints { make in
|
|
|
+ make.left.equalTo(typeImage.snp_right).offset(5)
|
|
|
+ make.centerY.equalTo(typeImage)
|
|
|
+ make.right.equalTo(musicContenView)
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@objc func btnClick(sender: UIButton) {
|
|
|
if reCreateBtnClicHandle != nil {
|
|
|
reCreateBtnClicHandle!(sender, videoData)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- required init?(coder: NSCoder) {
|
|
|
+
|
|
|
+ required init?(coder _: NSCoder) {
|
|
|
fatalError("init(coder:) has not been implemented")
|
|
|
}
|
|
|
}
|