Build the player interface

dev
wenlei 1 year ago
parent d8493e0767
commit 36d13b2769

@ -11,6 +11,9 @@
49330FC1492387B5155757F6 /* Pods_IndieMusic_IndieMusicUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA03C869C12FEE5FB3D835C2 /* Pods_IndieMusic_IndieMusicUITests.framework */; }; 49330FC1492387B5155757F6 /* Pods_IndieMusic_IndieMusicUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA03C869C12FEE5FB3D835C2 /* Pods_IndieMusic_IndieMusicUITests.framework */; };
7743999E2AFA18C3006F8EEA /* PlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7743999D2AFA18C3006F8EEA /* PlayerViewController.swift */; }; 7743999E2AFA18C3006F8EEA /* PlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7743999D2AFA18C3006F8EEA /* PlayerViewController.swift */; };
774399A02AFA1968006F8EEA /* PlayerTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7743999F2AFA1968006F8EEA /* PlayerTabBar.swift */; }; 774399A02AFA1968006F8EEA /* PlayerTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7743999F2AFA1968006F8EEA /* PlayerTabBar.swift */; };
774399A62AFE036A006F8EEA /* PlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774399A52AFE036A006F8EEA /* PlayerView.swift */; };
774399A82AFE28BA006F8EEA /* BlurEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774399A72AFE28BA006F8EEA /* BlurEffectView.swift */; };
774399AA2AFE3170006F8EEA /* PaddingLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774399A92AFE3170006F8EEA /* PaddingLabel.swift */; };
778B8A212AF8E36D0034AFD4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 778B8A202AF8E36D0034AFD4 /* AppDelegate.swift */; }; 778B8A212AF8E36D0034AFD4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 778B8A202AF8E36D0034AFD4 /* AppDelegate.swift */; };
778B8A232AF8E36D0034AFD4 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 778B8A222AF8E36D0034AFD4 /* SceneDelegate.swift */; }; 778B8A232AF8E36D0034AFD4 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 778B8A222AF8E36D0034AFD4 /* SceneDelegate.swift */; };
778B8A282AF8E36D0034AFD4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 778B8A262AF8E36D0034AFD4 /* Main.storyboard */; }; 778B8A282AF8E36D0034AFD4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 778B8A262AF8E36D0034AFD4 /* Main.storyboard */; };
@ -95,6 +98,9 @@
69F724137B8F9C1F7E51080D /* Pods-IndieMusicTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IndieMusicTests.release.xcconfig"; path = "Target Support Files/Pods-IndieMusicTests/Pods-IndieMusicTests.release.xcconfig"; sourceTree = "<group>"; }; 69F724137B8F9C1F7E51080D /* Pods-IndieMusicTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IndieMusicTests.release.xcconfig"; path = "Target Support Files/Pods-IndieMusicTests/Pods-IndieMusicTests.release.xcconfig"; sourceTree = "<group>"; };
7743999D2AFA18C3006F8EEA /* PlayerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerViewController.swift; sourceTree = "<group>"; }; 7743999D2AFA18C3006F8EEA /* PlayerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerViewController.swift; sourceTree = "<group>"; };
7743999F2AFA1968006F8EEA /* PlayerTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerTabBar.swift; sourceTree = "<group>"; }; 7743999F2AFA1968006F8EEA /* PlayerTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerTabBar.swift; sourceTree = "<group>"; };
774399A52AFE036A006F8EEA /* PlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerView.swift; sourceTree = "<group>"; };
774399A72AFE28BA006F8EEA /* BlurEffectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurEffectView.swift; sourceTree = "<group>"; };
774399A92AFE3170006F8EEA /* PaddingLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaddingLabel.swift; sourceTree = "<group>"; };
778B8A1D2AF8E36D0034AFD4 /* IndieMusic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IndieMusic.app; sourceTree = BUILT_PRODUCTS_DIR; }; 778B8A1D2AF8E36D0034AFD4 /* IndieMusic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IndieMusic.app; sourceTree = BUILT_PRODUCTS_DIR; };
778B8A202AF8E36D0034AFD4 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 778B8A202AF8E36D0034AFD4 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
778B8A222AF8E36D0034AFD4 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; 778B8A222AF8E36D0034AFD4 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@ -194,6 +200,7 @@
children = ( children = (
7743999D2AFA18C3006F8EEA /* PlayerViewController.swift */, 7743999D2AFA18C3006F8EEA /* PlayerViewController.swift */,
7743999F2AFA1968006F8EEA /* PlayerTabBar.swift */, 7743999F2AFA1968006F8EEA /* PlayerTabBar.swift */,
774399A52AFE036A006F8EEA /* PlayerView.swift */,
); );
path = Player; path = Player;
sourceTree = "<group>"; sourceTree = "<group>";
@ -286,6 +293,8 @@
778B8AB72AF8ED280034AFD4 /* ViewController.swift */, 778B8AB72AF8ED280034AFD4 /* ViewController.swift */,
778B8AB52AF8ED280034AFD4 /* ViewModel.swift */, 778B8AB52AF8ED280034AFD4 /* ViewModel.swift */,
778B8AB22AF8ED270034AFD4 /* WebViewController.swift */, 778B8AB22AF8ED270034AFD4 /* WebViewController.swift */,
774399A72AFE28BA006F8EEA /* BlurEffectView.swift */,
774399A92AFE3170006F8EEA /* PaddingLabel.swift */,
); );
path = Common; path = Common;
sourceTree = "<group>"; sourceTree = "<group>";
@ -714,6 +723,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
778B8A5D2AF8EC610034AFD4 /* Application.swift in Sources */, 778B8A5D2AF8EC610034AFD4 /* Application.swift in Sources */,
774399A62AFE036A006F8EEA /* PlayerView.swift in Sources */,
778B8A5F2AF8ECAB0034AFD4 /* Navigator.swift in Sources */, 778B8A5F2AF8ECAB0034AFD4 /* Navigator.swift in Sources */,
778B8AA82AF8ED0E0034AFD4 /* Color.swift in Sources */, 778B8AA82AF8ED0E0034AFD4 /* Color.swift in Sources */,
778B8AAE2AF8ED0E0034AFD4 /* TextView.swift in Sources */, 778B8AAE2AF8ED0E0034AFD4 /* TextView.swift in Sources */,
@ -726,12 +736,14 @@
778B8A9D2AF8ECFC0034AFD4 /* LibsManager.swift in Sources */, 778B8A9D2AF8ECFC0034AFD4 /* LibsManager.swift in Sources */,
778B8A832AF8ECE50034AFD4 /* HomeViewController.swift in Sources */, 778B8A832AF8ECE50034AFD4 /* HomeViewController.swift in Sources */,
778B8ABE2AF8ED280034AFD4 /* ViewModel.swift in Sources */, 778B8ABE2AF8ED280034AFD4 /* ViewModel.swift in Sources */,
774399A82AFE28BA006F8EEA /* BlurEffectView.swift in Sources */,
778B8A852AF8ECE50034AFD4 /* SearchViewController.swift in Sources */, 778B8A852AF8ECE50034AFD4 /* SearchViewController.swift in Sources */,
778B8AAB2AF8ED0E0034AFD4 /* UIView+Borders.swift in Sources */, 778B8AAB2AF8ED0E0034AFD4 /* UIView+Borders.swift in Sources */,
778B8AC12AF8ED280034AFD4 /* TableView.swift in Sources */, 778B8AC12AF8ED280034AFD4 /* TableView.swift in Sources */,
778B8A9C2AF8ECFC0034AFD4 /* LogManager.swift in Sources */, 778B8A9C2AF8ECFC0034AFD4 /* LogManager.swift in Sources */,
778B8A992AF8ECFC0034AFD4 /* Reachability.swift in Sources */, 778B8A992AF8ECFC0034AFD4 /* Reachability.swift in Sources */,
778B8ABF2AF8ED280034AFD4 /* NavigationController.swift in Sources */, 778B8ABF2AF8ED280034AFD4 /* NavigationController.swift in Sources */,
774399AA2AFE3170006F8EEA /* PaddingLabel.swift in Sources */,
778B8A822AF8ECE50034AFD4 /* HomeViewModel.swift in Sources */, 778B8A822AF8ECE50034AFD4 /* HomeViewModel.swift in Sources */,
778B8AAD2AF8ED0E0034AFD4 /* RxMJRefresh.swift in Sources */, 778B8AAD2AF8ED0E0034AFD4 /* RxMJRefresh.swift in Sources */,
778B8A922AF8ECF20034AFD4 /* AudioTrack.swift in Sources */, 778B8A922AF8ECF20034AFD4 /* AudioTrack.swift in Sources */,

@ -0,0 +1,53 @@
//
// BlurEffectView.swift
// IndieMusic
//
// Created by WenLei on 2023/11/10.
//
import UIKit
class BlurEffectView: UIView {
var blurView: UIVisualEffectView = {
let blurEffect = UIBlurEffect(style: .systemThickMaterialDark)
let blurView = UIVisualEffectView(effect: blurEffect)
return blurView
}()
var imageView: UIImageView = {
let imageView = UIImageView.init(image: UIImage.init(named: "cover"))
return imageView
}()
override init(frame: CGRect) {
super.init(frame: frame)
makeUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func makeUI() {
addSubview(imageView)
addSubview(blurView)
}
override func layoutSubviews() {
super.layoutSubviews()
imageView.snp.makeConstraints { make in
make.edges.equalTo(self)
}
blurView.snp.makeConstraints { make in
make.edges.equalTo(self)
}
}
}

@ -0,0 +1,54 @@
//
// PaddingLabel.swift
// IndieMusic
//
// Created by WenLei on 2023/11/10.
//
import UIKit
class PaddingLabel: UILabel {
// var textInsets = UIEdgeInsets.init(top: 10, left: 10, bottom: 10, right: 0) {
// didSet { setNeedsDisplay() }
// }
//
// override func drawText(in rect: CGRect) {
// super.drawText(in: rect.inset(by: textInsets))
// }
var circularFillet = true
var padding = UIEdgeInsets(top: 8, left: 10, bottom: 8, right: 10)
override func drawText(in rect: CGRect) {
super.drawText(in: rect.inset(by: padding))
}
init(padding: UIEdgeInsets = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10), frame: CGRect = CGRect.zero) {
self.padding = padding
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override var intrinsicContentSize : CGSize {
let superContentSize = super.intrinsicContentSize
let width = superContentSize.width + padding.left + padding.right
let heigth = superContentSize.height + padding.top + padding.bottom
return CGSize(width: width, height: heigth)
}
override func layoutSubviews() {
super.layoutSubviews()
if circularFillet == true {
let h = self.frame.size.height
self.layer.cornerRadius = h / 2
self.layer.masksToBounds = true
}
}
}

@ -11,22 +11,25 @@ import UIKit
extension UIColor { extension UIColor {
///
static func primary() -> UIColor { static func primary() -> UIColor {
return themeService.type.associatedObject.primary return themeService.type.associatedObject.primary
} }
///
static func primaryText() -> UIColor { static func primaryText() -> UIColor {
return themeService.type.associatedObject.primaryText return themeService.type.associatedObject.primaryText
} }
///
static func secondaryText() -> UIColor { static func secondaryText() -> UIColor {
return themeService.type.associatedObject.secondaryText return themeService.type.associatedObject.secondaryText
} }
///
static func tertiaryText() -> UIColor { static func tertiaryText() -> UIColor {
return themeService.type.associatedObject.tertiaryText return themeService.type.associatedObject.tertiaryText
} }
/// 线
static func separator() -> UIColor { static func separator() -> UIColor {
return themeService.type.associatedObject.separator return themeService.type.associatedObject.separator
} }

@ -16,9 +16,13 @@ let globalStatusBarStyle = BehaviorRelay<UIStatusBarStyle>(value: .default)
let themeService = ThemeType.service(initial: ThemeType.currentTheme()) let themeService = ThemeType.service(initial: ThemeType.currentTheme())
protocol Theme { protocol Theme {
//
var primary: UIColor { get } var primary: UIColor { get }
//
var primaryText: UIColor { get } var primaryText: UIColor { get }
//
var secondaryText: UIColor { get } var secondaryText: UIColor { get }
//
var tertiaryText: UIColor { get } var tertiaryText: UIColor { get }
var separator: UIColor { get } var separator: UIColor { get }
@ -32,10 +36,14 @@ protocol Theme {
} }
struct LightTheme: Theme { struct LightTheme: Theme {
//
let primary = UIColor.init(hex: 0xB44343) let primary = UIColor.init(hex: 0xB44343)
//
let primaryText = UIColor.init(hex: 0x000000, alpha: 0.9) let primaryText = UIColor.init(hex: 0x000000, alpha: 0.9)
let secondaryText = UIColor.init(hex: 0xB44343, alpha: 0.6) //
let tertiaryText = UIColor.init(hex: 0xB44343, alpha: 0.4) let secondaryText = UIColor.init(hex: 0x000000, alpha: 0.6)
//
let tertiaryText = UIColor.init(hex: 0x000000, alpha: 0.4)
let separator = UIColor.init(hex: 0x000000, alpha: 0.1) let separator = UIColor.init(hex: 0x000000, alpha: 0.1)
@ -54,8 +62,8 @@ struct DarkTheme: Theme {
let primary = UIColor.init(hex: 0xB44343) let primary = UIColor.init(hex: 0xB44343)
let primaryText = UIColor.init(hex: 0x000000, alpha: 0.9) let primaryText = UIColor.init(hex: 0x000000, alpha: 0.9)
let secondaryText = UIColor.init(hex: 0xB44343, alpha: 0.6) let secondaryText = UIColor.init(hex: 0x000000, alpha: 0.6)
let tertiaryText = UIColor.init(hex: 0xB44343, alpha: 0.4) let tertiaryText = UIColor.init(hex: 0x000000, alpha: 0.4)
let separator = UIColor.init(hex: 0x000000, alpha: 0.1) let separator = UIColor.init(hex: 0x000000, alpha: 0.1)

@ -9,28 +9,10 @@ import UIKit
class HomeViewController: ViewController { class HomeViewController: ViewController {
var button: UIButton = {
let button = UIButton.init()
button.setTitle("button 1", for: .normal)
button.backgroundColor = .red
button.addTarget(self, action: #selector(buttonClick), for: .touchUpInside)
return button
}()
var button2: UIButton = {
let button = UIButton.init()
button.setTitle("button 2", for: .normal)
button.backgroundColor = .blue
button.addTarget(self, action: #selector(buttonClick2), for: .touchUpInside)
return button
}()
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
// Do any additional setup after loading the view. // Do any additional setup after loading the view.
self.navigationTitle = "123"
} }
@ -39,9 +21,6 @@ class HomeViewController: ViewController {
view.backgroundColor = .white view.backgroundColor = .white
view.addSubview(button)
view.addSubview(button2)
} }
@ -54,47 +33,14 @@ class HomeViewController: ViewController {
override func viewDidLayoutSubviews() { override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews() super.viewDidLayoutSubviews()
button.snp.makeConstraints { make in
make.centerX.equalTo(view)
make.centerY.equalTo(view).offset(-100)
make.size.equalTo(CGSize.init(width: 100, height: 100))
}
button2.snp.makeConstraints { make in
make.centerX.equalTo(view)
make.centerY.equalTo(view).offset(100)
make.size.equalTo(CGSize.init(width: 100, height: 100))
}
}
@objc func buttonClick() {
// guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
//
//
// if let tabbar = UIApplication.shared.windows.first?.rootViewController as? IndieMusicViewController {
// tabbar.showTabBar(!tabbar.isTabBarShowing, animated: true)
// }
//
if let tabbar = self.tabBarController as? HomeTabBarController {
tabbar.showTabBar(!tabbar.isTabBarShowing, animated: true)
}
}
@objc func buttonClick2() {
if let tabbar = self.tabBarController as? HomeTabBarController {
tabbar.showPlayerBar(!tabbar.isPlayerBarShowing, animated: true)
}
} }
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
hidesBottomBarWhenPushed = false let play = PlayerViewController.init(viewModel: viewModel, navigator: navigator)
play.modalPresentationStyle = .custom
self.present(play, animated: true)
let vc = PlayerViewController.init(viewModel: viewModel, navigator: navigator)
vc.view.backgroundColor = .white
self.navigationController?.pushViewController(vc, animated: true)
// self.present(vc, animated: true)
} }
} }

@ -0,0 +1,423 @@
//
// PlayerView.swift
// IndieMusic
//
// Created by WenLei on 2023/11/10.
//
import UIKit
class PlayerViewTopBar: UIView {
lazy var dropButton: UIButton = {
let dropButton = UIButton.init()
dropButton.setImage(UIImage.init(named: "play_drop_btn"), for: .normal)
return dropButton
}()
lazy var segementView: UIView = {
let segementView = UIView.init()
return segementView
}()
lazy var moreButton: UIButton = {
let moreButton = UIButton.init()
moreButton.setImage(UIImage.init(named: "play_more_btn"), for: .normal)
return moreButton
}()
override init(frame: CGRect) {
super.init(frame: frame)
makeUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func makeUI() {
addSubview(dropButton)
addSubview(segementView)
addSubview(moreButton)
}
override func layoutSubviews() {
super.layoutSubviews()
dropButton.snp.makeConstraints { make in
make.left.equalTo(self).offset(18)
make.centerY.equalTo(self)
}
moreButton.snp.makeConstraints { make in
make.right.equalTo(self).offset(-18)
make.centerY.equalTo(self)
}
segementView.snp.makeConstraints { make in
make.left.equalTo(dropButton.snp.right).offset(10)
make.right.equalTo(moreButton.snp.left).offset(-10)
make.top.equalTo(self)
make.bottom.equalTo(self)
}
}
}
class PlayerControlView: UIView {
var playModesButton: UIButton = {
let playModesButton = UIButton.init()
playModesButton.setImage(UIImage.init(named: "play_single_modes_btn"), for: .normal)
return playModesButton
}()
var lastButton: UIButton = {
let lastButton = UIButton.init()
lastButton.setImage(UIImage.init(named: "play_last_btn"), for: .normal)
return lastButton
}()
var playButton: UIButton = {
let playButton = UIButton.init()
playButton.setImage(UIImage.init(named: "play_pause_btn"), for: .normal)
return playButton
}()
var nextButton: UIButton = {
let nextButton = UIButton.init()
nextButton.setImage(UIImage.init(named: "play_next_btn"), for: .normal)
return nextButton
}()
var listButton: UIButton = {
let listButton = UIButton.init()
listButton.setImage(UIImage.init(named: "play_list_btn"), for: .normal)
return listButton
}()
override init(frame: CGRect) {
super.init(frame: frame)
makeUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func makeUI() {
addSubview(playModesButton)
addSubview(lastButton)
addSubview(playButton)
addSubview(nextButton)
addSubview(listButton)
}
override func layoutSubviews() {
super.layoutSubviews()
playButton.snp.makeConstraints { make in
make.centerX.equalTo(self)
make.centerY.equalTo(self)
}
lastButton.snp.makeConstraints { make in
make.right.equalTo(playButton.snp.left).offset(-40)
make.centerY.equalTo(self)
}
playModesButton.snp.makeConstraints { make in
make.right.equalTo(lastButton.snp.left).offset(-40)
make.centerY.equalTo(self)
}
nextButton.snp.makeConstraints { make in
make.left.equalTo(playButton.snp.right).offset(40)
make.centerY.equalTo(self)
}
listButton.snp.makeConstraints { make in
make.left.equalTo(nextButton.snp.right).offset(40)
make.centerY.equalTo(self)
}
}
}
class PlayerScrollView: UIScrollView {
var containerView: UIView = {
let containerView = UIView.init()
return containerView
}()
var playerInfoView: PlayerInfoView = {
let playerInfoView = PlayerInfoView.init()
return playerInfoView
}()
var lyricsView: UIView = {
let lyricsView = UIView.init()
return lyricsView
}()
override init(frame: CGRect) {
super.init(frame: frame)
makeUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func makeUI() {
addSubview(containerView)
containerView.addSubview(playerInfoView)
containerView.addSubview(lyricsView)
}
override func layoutSubviews() {
super.layoutSubviews()
containerView.snp.makeConstraints { make in
make.edges.equalTo(self)
make.height.equalToSuperview()
make.width.greaterThanOrEqualToSuperview()
}
playerInfoView.snp.makeConstraints { make in
make.left.equalTo(containerView)
make.top.equalTo(containerView)
make.bottom.equalTo(containerView)
make.width.equalTo(BaseDimensions.screenWidth)
}
lyricsView.snp.makeConstraints { make in
make.left.equalTo(playerInfoView.snp.right)
make.top.equalTo(containerView)
make.bottom.equalTo(containerView)
make.right.equalTo(containerView)
}
}
}
class PlayerInfoView: UIView {
var coverView: UIImageView = {
let coverView = UIImageView.init()
coverView.layer.cornerRadius = 6
coverView.layer.masksToBounds = true
return coverView
}()
var pageControl: UIPageControl = {
let pageControl = UIPageControl.init()
pageControl.numberOfPages = 2
return pageControl
}()
var numberLabel: PaddingLabel = {
let numberLabel = PaddingLabel.init()
numberLabel.font = UIFont.systemFont(ofSize: 12)
numberLabel.textColor = .init(hex: 0xFFFFFF)
numberLabel.backgroundColor = .init(hex: 0xFFFFFF, alpha: 0.1)
// numberLabel.layer.cornerRadius = 25
return numberLabel
}()
var titleLabel: UILabel = {
let titleLabel = UILabel.init()
titleLabel.font = UIFont.systemFont(ofSize: 20, weight: .medium)
titleLabel.textColor = .init(hex: 0xFFFFFF, alpha: 0.9)
return titleLabel
}()
var artistLabel: UILabel = {
let artistLabel = UILabel.init()
artistLabel.font = UIFont.systemFont(ofSize: 12)
artistLabel.textColor = .init(hex: 0xFFFFFF, alpha: 0.6)
return artistLabel
}()
var shareButton: UIButton = {
let shareButton = UIButton.init()
shareButton.setImage(UIImage.init(named: "play_share_btn"), for: .normal)
shareButton.setContentHuggingPriority(.required, for: .horizontal)
shareButton.setContentCompressionResistancePriority(.required, for: .horizontal)
return shareButton
}()
var likeButton: UIButton = {
let likeButton = UIButton.init()
likeButton.setImage(UIImage.init(named: "play_like_on"), for: .normal)
likeButton.setContentHuggingPriority(.required, for: .horizontal)
likeButton.setContentCompressionResistancePriority(.required, for: .horizontal)
return likeButton
}()
var playerSlider: UISlider = {
let playerSlider = UISlider.init()
playerSlider.tintColor = .white
return playerSlider
}()
var startTimeLabel: UILabel = {
let startTimeLabel = UILabel.init()
startTimeLabel.font = UIFont.systemFont(ofSize: 12)
startTimeLabel.textColor = .init(hex: 0xFFFFFF, alpha: 0.4)
return startTimeLabel
}()
var endTimeLabel: UILabel = {
let endTimeLabel = UILabel.init()
endTimeLabel.font = UIFont.systemFont(ofSize: 12)
endTimeLabel.textColor = .init(hex: 0xFFFFFF, alpha: 0.4)
return endTimeLabel
}()
override init(frame: CGRect) {
super.init(frame: frame)
makeUI()
numberLabel.text = "VOL 1092"
titleLabel.text = "fdsfds"
artistLabel.text = "1233321"
startTimeLabel.text = "00:00"
endTimeLabel.text = "00:00"
coverView.backgroundColor = .gray
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func makeUI() {
addSubview(coverView)
addSubview(pageControl)
addSubview(numberLabel)
addSubview(titleLabel)
addSubview(artistLabel)
addSubview(shareButton)
addSubview(likeButton)
addSubview(playerSlider)
addSubview(startTimeLabel)
addSubview(endTimeLabel)
}
override func layoutSubviews() {
super.layoutSubviews()
coverView.snp.makeConstraints { make in
make.top.equalTo(self).offset(10)
make.left.equalTo(self).offset(18)
make.right.equalTo(self).offset(-18)
make.height.equalTo(coverView.snp.width)
}
pageControl.snp.makeConstraints { make in
make.centerX.equalTo(self)
make.top.equalTo(coverView.snp.bottom).offset(10)
}
numberLabel.snp.makeConstraints { make in
make.left.equalTo(self).offset(18)
make.top.equalTo(pageControl.snp.bottom).offset(18)
}
shareButton.snp.makeConstraints { make in
make.right.equalTo(self).offset(-18)
make.top.equalTo(pageControl.snp.bottom).offset(55)
}
likeButton.snp.makeConstraints { make in
make.right.equalTo(shareButton.snp.left).offset(-15)
make.top.equalTo(pageControl.snp.bottom).offset(55)
}
titleLabel.snp.makeConstraints { make in
make.right.equalTo(likeButton.snp.left).offset(-10)
make.left.equalTo(self).offset(18)
make.top.equalTo(numberLabel.snp.bottom).offset(15)
}
artistLabel.snp.makeConstraints { make in
make.left.equalTo(self).offset(18)
make.right.equalTo(likeButton.snp.left).offset(-10)
make.top.equalTo(titleLabel.snp.bottom).offset(3)
}
playerSlider.snp.makeConstraints { make in
make.left.equalTo(self).offset(18)
make.right.equalTo(self).offset(-18)
make.top.equalTo(artistLabel.snp.bottom).offset(18)
}
startTimeLabel.snp.makeConstraints { make in
make.left.equalTo(self).offset(18)
make.top.equalTo(playerSlider.snp.bottom).offset(3)
make.bottom.equalTo(self).offset(-10)
}
endTimeLabel.snp.makeConstraints { make in
make.right.equalTo(self).offset(-18)
make.top.equalTo(playerSlider.snp.bottom).offset(3)
make.bottom.equalTo(self).offset(-10)
}
}
}

@ -9,13 +9,41 @@ import UIKit
class PlayerViewController: ViewController { class PlayerViewController: ViewController {
var blurEffectView: BlurEffectView = {
let blurEffectView = BlurEffectView.init()
return blurEffectView
}()
var playerViewTopBar: PlayerViewTopBar = {
let playerViewTopBar = PlayerViewTopBar.init()
playerViewTopBar.setContentHuggingPriority(.required, for: .vertical)
playerViewTopBar.setContentCompressionResistancePriority(.required, for: .vertical)
return playerViewTopBar
}()
var playerScrollView: PlayerScrollView = {
let playerScrollView = PlayerScrollView.init()
return playerScrollView
}()
var playerControlView: PlayerControlView = {
let playerControlView = PlayerControlView.init()
playerControlView.setContentHuggingPriority(.required, for: .vertical)
playerControlView.setContentCompressionResistancePriority(.required, for: .vertical)
return playerControlView
}()
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
// hidesBottomBarWhenPushed = false
self.navigationTitle = "1234"
self.navigationController?.setNavigationBarHidden(false, animated: true)
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
@ -24,20 +52,54 @@ class PlayerViewController: ViewController {
} }
override func makeUI() {
super.makeUI()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { view.backgroundColor = .white
if let tabbar = self.tabBarController as? HomeTabBarController {
view.addSubview(blurEffectView)
view.addSubview(playerViewTopBar)
view.addSubview(playerScrollView)
view.addSubview(playerControlView)
} }
//
// let vc = MineViewController.init(viewModel: viewModel, navigator: navigator)
//
// self.present(vc, animated: true)
override func bindViewModel() {
super.bindViewModel()
// UIView.animate(withDuration: 0.3) { }
// self.tabBarController?.tabBar.isHidden.toggle()
// } override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
blurEffectView.snp.makeConstraints { make in
make.edges.equalTo(view)
}
playerViewTopBar.snp.makeConstraints { make in
make.left.equalTo(view)
make.right.equalTo(view)
make.top.equalTo(view).offset(BaseDimensions.statusBarHeight)
make.height.equalTo(BaseDimensions.navBarHeight)
}
playerControlView.snp.makeConstraints { make in
make.left.equalTo(view)
make.right.equalTo(view)
make.bottom.equalTo(view).offset(-BaseDimensions.bottomHeight).offset(-55)
}
playerScrollView.snp.makeConstraints { make in
make.left.equalTo(view)
make.right.equalTo(view)
make.top.equalTo(playerViewTopBar.snp.bottom).priority(.high)
make.bottom.equalTo(playerControlView.snp.top).priority(.high)
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.dismiss(animated: true)
} }
} }

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "cover.jpg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "cover.jpg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_drop_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.5 9L12 17L3.5 9" stroke="white" stroke-opacity="0.6" style="stroke:white;stroke:white;stroke-opacity:0.6;" stroke-width="1.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 267 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_last_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 19.2C7 19.48 7 19.62 6.9455 19.727C6.89757 19.8211 6.82108 19.8976 6.727 19.9455C6.62004 20 6.48003 20 6.2 20H4.8C4.51997 20 4.37996 20 4.273 19.9455C4.17892 19.8976 4.10243 19.8211 4.0545 19.727C4 19.62 4 19.48 4 19.2L4 4.8C4 4.51997 4 4.37996 4.0545 4.273C4.10243 4.17892 4.17892 4.10243 4.273 4.0545C4.37996 4 4.51997 4 4.8 4H6.2C6.48003 4 6.62004 4 6.727 4.0545C6.82108 4.10243 6.89757 4.17892 6.9455 4.273C7 4.37996 7 4.51997 7 4.8L7 19.2Z" fill="white" fill-opacity="0.9" style="fill:white;fill:white;fill-opacity:0.9;"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.18761 12.8222C8.61322 12.4245 8.61322 11.5755 9.18761 11.1778L19.4308 4.08637C20.094 3.62721 21 4.10191 21 4.90857L21 19.0914C21 19.8981 20.094 20.3728 19.4308 19.9136L9.18761 12.8222Z" fill="white" fill-opacity="0.9" style="fill:white;fill:white;fill-opacity:0.9;"/>
</svg>

After

Width:  |  Height:  |  Size: 963 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_like_on.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.5 4C4.46244 4 2 6.46245 2 9.5C2 15 8.5 20 12 21.1631C15.5 20 22 15 22 9.5C22 6.46245 19.5375 4 16.5 4C14 4 12.9953 5.58655 12 7C11.0047 5.58655 10 4 7.5 4Z" fill="#B44343" style="fill:#B44343;fill:color(display-p3 0.7059 0.2627 0.2627);fill-opacity:1;"/>
<path d="M12 21.1631L11.7635 21.8748L12 21.9534L12.2365 21.8748L12 21.1631ZM12 7L11.3868 7.43182L12 8.30262L12.6132 7.43182L12 7ZM7.5 3.25C4.04822 3.25 1.25 6.04824 1.25 9.5H2.75C2.75 6.87666 4.87665 4.75 7.5 4.75V3.25ZM1.25 9.5C1.25 12.5381 3.03322 15.3433 5.15457 17.4856C7.28321 19.6353 9.88091 21.2492 11.7635 21.8748L12.2365 20.4514C10.6191 19.9139 8.21679 18.4463 6.22043 16.4302C4.21678 14.4067 2.75 11.9619 2.75 9.5H1.25ZM12.2365 21.8748C14.1191 21.2492 16.7168 19.6353 18.8454 17.4856C20.9668 15.3433 22.75 12.5381 22.75 9.5H21.25C21.25 11.9619 19.7832 14.4067 17.7796 16.4302C15.7832 18.4463 13.3809 19.9139 11.7635 20.4514L12.2365 21.8748ZM22.75 9.5C22.75 6.04824 19.9518 3.25 16.5 3.25V4.75C19.1233 4.75 21.25 6.87666 21.25 9.5H22.75ZM16.5 3.25C15.0669 3.25 14.0225 3.71317 13.2057 4.39376C12.4244 5.04475 11.8632 5.89167 11.3868 6.56818L12.6132 7.43182C13.1322 6.69488 13.571 6.0418 14.1659 5.54616C14.7252 5.08011 15.4331 4.75 16.5 4.75V3.25ZM12.6132 6.56818C12.1368 5.89167 11.5756 5.04475 10.7943 4.39376C9.97752 3.71317 8.93314 3.25 7.5 3.25V4.75C8.56686 4.75 9.27481 5.08011 9.83415 5.54616C10.429 6.0418 10.8678 6.69488 11.3868 7.43182L12.6132 6.56818Z" fill="#B44343" style="fill:#B44343;fill:color(display-p3 0.7059 0.2627 0.2627);fill-opacity:1;"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_list_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21 6H3" stroke="white" stroke-opacity="0.6" style="stroke:white;stroke:white;stroke-opacity:0.6;" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M21 12H3" stroke="white" stroke-opacity="0.6" style="stroke:white;stroke:white;stroke-opacity:0.6;" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13 18H3" stroke="white" stroke-opacity="0.6" style="stroke:white;stroke:white;stroke-opacity:0.6;" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.2854 17.5713C21.6091 17.7655 21.6091 18.2345 21.2854 18.4287L17.7572 20.5457C17.424 20.7456 17 20.5056 17 20.1169V15.8831C17 15.4944 17.424 15.2544 17.7572 15.4543L21.2854 17.5713Z" fill="white" fill-opacity="0.6" style="fill:white;fill:white;fill-opacity:0.6;"/>
</svg>

After

Width:  |  Height:  |  Size: 950 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_more_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="5.5" r="1.5" fill="white" fill-opacity="0.6" style="fill:white;fill:white;fill-opacity:0.6;"/>
<circle cx="12" cy="11.5" r="1.5" fill="white" fill-opacity="0.6" style="fill:white;fill:white;fill-opacity:0.6;"/>
<circle cx="12" cy="17.5" r="1.5" fill="white" fill-opacity="0.6" style="fill:white;fill:white;fill-opacity:0.6;"/>
</svg>

After

Width:  |  Height:  |  Size: 450 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_next_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17 4.8C17 4.51997 17 4.37996 17.0545 4.273C17.1024 4.17892 17.1789 4.10243 17.273 4.0545C17.38 4 17.52 4 17.8 4H19.2C19.48 4 19.62 4 19.727 4.0545C19.8211 4.10243 19.8976 4.17892 19.9455 4.273C20 4.37996 20 4.51997 20 4.8V19.2C20 19.48 20 19.62 19.9455 19.727C19.8976 19.8211 19.8211 19.8976 19.727 19.9455C19.62 20 19.48 20 19.2 20H17.8C17.52 20 17.38 20 17.273 19.9455C17.1789 19.8976 17.1024 19.8211 17.0545 19.727C17 19.62 17 19.48 17 19.2V4.8Z" fill="white" fill-opacity="0.9" style="fill:white;fill:white;fill-opacity:0.9;"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.8124 11.1778C15.3868 11.5755 15.3868 12.4245 14.8124 12.8222L4.56921 19.9136C3.90598 20.3728 3 19.8981 3 19.0914L3 4.90857C3 4.10191 3.90598 3.62722 4.56921 4.08638L14.8124 11.1778Z" fill="white" fill-opacity="0.9" style="fill:white;fill:white;fill-opacity:0.9;"/>
</svg>

After

Width:  |  Height:  |  Size: 963 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_pause_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,5 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="29" cy="29" r="29" fill="#F7F7F7" style="fill:#F7F7F7;fill:color(display-p3 0.9667 0.9667 0.9667);fill-opacity:1;"/>
<rect x="22" y="20" width="4" height="18" rx="0.5" fill="#37373D" style="fill:#37373D;fill:color(display-p3 0.2157 0.2157 0.2392);fill-opacity:1;"/>
<rect x="32" y="20" width="4" height="18" rx="0.5" fill="#37373D" style="fill:#37373D;fill:color(display-p3 0.2157 0.2157 0.2392);fill-opacity:1;"/>
</svg>

After

Width:  |  Height:  |  Size: 530 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_share_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13 2L13.5303 1.46967C13.3158 1.25517 12.9932 1.191 12.713 1.30709C12.4327 1.42318 12.25 1.69665 12.25 2H13ZM22 11L22.515 11.5453L23.076 11.0154L22.5303 10.4697L22 11ZM13 19.5H12.25C12.25 19.7995 12.4281 20.0702 12.7031 20.1887C12.9781 20.3073 13.2973 20.2509 13.515 20.0453L13 19.5ZM13 14H13.75C13.75 13.5858 13.4142 13.25 13 13.25V14ZM3 21.5H2.25C2.25 21.8595 2.50513 22.1685 2.85817 22.2365C3.21121 22.3045 3.56283 22.1124 3.69636 21.7785L3 21.5ZM13 7.5V8.25C13.4142 8.25 13.75 7.91421 13.75 7.5H13ZM12.4697 2.53033L21.4697 11.5303L22.5303 10.4697L13.5303 1.46967L12.4697 2.53033ZM21.485 10.4547L12.485 18.9547L13.515 20.0453L22.515 11.5453L21.485 10.4547ZM13.75 19.5V14H12.25V19.5H13.75ZM13 13.25C9.20347 13.25 6.51417 15.2904 4.80823 17.2588C3.95355 18.245 3.33131 19.228 2.92251 19.9639C2.71766 20.3326 2.56519 20.6415 2.46294 20.8606C2.41179 20.9702 2.37312 21.0575 2.34668 21.1189C2.33345 21.1495 2.32328 21.1737 2.31612 21.191C2.31254 21.1996 2.30971 21.2065 2.30763 21.2116C2.30659 21.2141 2.30574 21.2162 2.30508 21.2179C2.30474 21.2187 2.30446 21.2194 2.30422 21.22C2.3041 21.2203 2.30396 21.2207 2.3039 21.2208C2.30376 21.2212 2.30364 21.2215 3 21.5C3.69636 21.7785 3.69626 21.7788 3.69617 21.779C3.69616 21.779 3.69608 21.7792 3.69605 21.7793C3.696 21.7794 3.69599 21.7795 3.69602 21.7794C3.69609 21.7792 3.69634 21.7786 3.69677 21.7775C3.69763 21.7754 3.69921 21.7716 3.70152 21.766C3.70614 21.7549 3.71367 21.7369 3.72412 21.7127C3.74504 21.6642 3.77766 21.5904 3.82222 21.4949C3.91137 21.3038 4.04797 21.0268 4.23374 20.6924C4.60619 20.022 5.17145 19.13 5.94177 18.2412C7.48583 16.4596 9.79653 14.75 13 14.75V13.25ZM3.75 21.5C3.75 17.2957 4.3736 13.9719 5.81891 11.7172C7.22306 9.52677 9.46522 8.25 13 8.25V6.75C9.03478 6.75 6.27694 8.22323 4.55609 10.9078C2.8764 13.5281 2.25 17.2043 2.25 21.5H3.75ZM13.75 7.5V2H12.25V7.5H13.75Z" fill="white" fill-opacity="0.6" style="fill:white;fill:white;fill-opacity:0.6;"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "play_single_modes_btn.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.9594 4.57808C21.2684 4.77452 21.2684 5.22553 20.9594 5.42197L16.7681 8.08659C16.4353 8.29822 15.9999 8.05909 15.9999 7.66465V5.74998H9.99988C7.10039 5.74998 4.74988 8.10048 4.74988 11V11.75H3.24988V11C3.24988 7.27206 6.27196 4.24998 9.99988 4.24998H15.9999V2.33541C15.9999 1.94096 16.4353 1.70183 16.7681 1.91346L20.9594 4.57808ZM12.9999 17.25C15.8994 17.25 18.2499 14.8995 18.2499 12V11.25H19.7499V12C19.7499 15.7279 16.7278 18.75 12.9999 18.75H7.99988V20.6646C7.99988 21.0591 7.5645 21.2982 7.23163 21.0866L3.04034 18.422C2.73135 18.2255 2.73135 17.7745 3.04034 17.5781L7.23163 14.9135C7.5645 14.7018 7.99988 14.941 7.99988 15.3354V17.25H12.9999Z" fill="white" fill-opacity="0.6" style="fill:white;fill:white;fill-opacity:0.6;"/>
<path d="M10.1212 9.41146C10.0481 9.16332 10.1346 8.89575 10.3391 8.73737L11.4721 7.86004C11.6587 7.71551 11.8881 7.63708 12.1241 7.63708H12.2008C12.6422 7.63708 13 7.99514 13 8.43655C13 10.4843 13 12.3 13 14.3797C13 14.7221 12.7224 15 12.38 15C12.0376 15 11.76 14.7224 11.76 14.38V9.23001L11.1063 9.7321C10.7565 10.0008 10.2459 9.83463 10.1212 9.41146Z" fill="white" fill-opacity="0.6" style="fill:white;fill:white;fill-opacity:0.6;"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -21,5 +21,9 @@
</array> </array>
</dict> </dict>
</dict> </dict>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
</dict> </dict>
</plist> </plist>

@ -14,6 +14,7 @@ target 'IndieMusic' do
pod 'CocoaLumberjack/Swift' pod 'CocoaLumberjack/Swift'
pod 'KeychainAccess' pod 'KeychainAccess'
pod 'NSObject+Rx' pod 'NSObject+Rx'
pod 'RxViewController' pod 'RxViewController'
pod 'RxSwift', '6.2.0' pod 'RxSwift', '6.2.0'

Loading…
Cancel
Save