500行左右代码就可以见到下面的效果了,这里贴出的代码为最复杂一个,约200行,完整的请下载,随便给个star,谢谢
源码下载地址:https://github.com/targetcloud/QQMusic
作为练手小项目,大神请绕道,知识点包括两种定时器的应用场景(效率优化)、暂停和恢复动画、滚动、歌词进度显示、后台播放、锁屏播放、快进快退、音量控制
//
// QQDetailVC.swift
// QQMusic
//
// Created by targetcloud on 2016/11/29.
// Copyright © 2016年 targetcloud. All rights reserved.
//
import UIKit
//updateOnce updateTimes updateLrc三者频率是越来越快的节奏,后两者用定时器实现,分别用每秒和每秒60次两种分别实现updateTimes updateLrc
class QQDetailVC: UIViewController,UIScrollViewDelegate {
@IBOutlet weak var lrcScrollView: UIScrollView!
@IBOutlet weak var backImageView: UIImageView!
@IBOutlet weak var foreImageView: UIImageView!
@IBOutlet weak var songNameLabel: UILabel!
@IBOutlet weak var singerNameLabel: UILabel!
@IBOutlet weak var totalTimeLabel: UILabel!
lazy var lrcVC: QQLrcTVC = {
return QQLrcTVC()
}()
@IBOutlet weak var lrcLabel: QQLrcLabel!
@IBOutlet weak var progressSlider: UISlider!
@IBOutlet weak var costTimeLabel: UILabel!
@IBOutlet weak var playOrPauseBtn: UIButton!
var updateTimesTimer: Timer?
var updateLrcLink: CADisplayLink?
deinit {
NotificationCenter.default.removeObserver(self)
}
//UISlider的四个事件(tap、touchDown、touchUp、valueChange)
@IBAction func tap(_ sender: UITapGestureRecognizer) {
print("tap")
let value = sender.location(in: sender.view).x / (sender.view?.width)!
progressSlider.value = Float(value)
let totalTime = QQMusicOperationTool.shareInstance.getMusicMessageModel().totalTime
let costTime = totalTime * TimeInterval(value)
QQMusicOperationTool.shareInstance.seekToTime(costTime)//跳到指定时间点播放
}
@IBAc