QQ音乐项目(OC版) - 实现细节
QQ 音樂看似簡單,但自己手動實現(xiàn)起來,才發(fā)現(xiàn)沒有那么簡單,有好多細節(jié),需要注意。
github :?https://github.com/keenleung/QQMusic-OC
一、業(yè)務(wù)邏輯
首先, 先來瞧瞧 這個小項目的業(yè)務(wù)邏輯吧:
1)整體:
?
2)QQ音樂列表:
?3)QQ播放詳情:
?
做一些模塊功能的時候,一定要想到分工處理,不同的操作,應(yīng)該由不同的功能所抽取出來的業(yè)務(wù)類或工具類來管理。
?
二、細節(jié)分析
1)主界面cell的動畫實現(xiàn)
?滾動列表的時候,cell顯示的方式都是從底部或頂部鉆出來
?平成,我們都會在cell創(chuàng)建的時候,直接給cell添xiao'g加動畫效果,但是,作為程序員,我們更應(yīng)該要有面向?qū)ο蟮乃枷?#xff0c;把動畫效果的實現(xiàn),直接封裝到cell里面,然后通過創(chuàng)建的cell對象來調(diào)用方法,從而決定使不使用動畫效果
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{QQMusicListCell *musicCell = (QQMusicListCell *)cell;// 執(zhí)行動畫// 判斷 tableView 的滑動方向CGPoint translation = [tableView.panGestureRecognizer translationInView:tableView.superview];if (translation.y>0) { // 接近第一行 [musicCell beginAnimation:RE_Rotation];}else if(translation.y<0){ // 遠離第一行 [musicCell beginAnimation:Rotation];} } View Code?
?
2)歌詞進度的設(shè)計
基本思想:歌詞面板,其實是一個tableView,每一句歌詞,其實是一個cell,然后cell里面就只顯示歌詞,即是一個Label。要顯示顏色,需要重繪。
獲取到當(dāng)前播放的歌詞,每一句歌詞都有一個播放時間長度,根據(jù)歌曲播放時間,計算出當(dāng)前歌詞的進度,然后拿到這個比例,重新繪制歌詞顏色的范圍。
?
需要注意的是:
i)cell的重用
需要一個額外的屬性,來記錄當(dāng)前歌詞所在的行,然后,同行的,繪制顏色;不同行的則不繪制顏色。但這還不夠,因為到下一行的時候,已經(jīng)繪制的行的顏色并沒有消除。這就需要做下面的一步:
ii)當(dāng)前播放歌詞之外的歌詞,都不需要繪制顏色
需要在歌詞滾動到中間之前,刷新可以看見的行,這樣,不是現(xiàn)在播放行的歌詞的顏色就會被清除掉了
?
3)開啟后臺播放?
支持后臺服務(wù)
?
實現(xiàn)代碼:
// 1.獲取音頻會話AVAudioSession *session = [AVAudioSession sharedInstance];// 2.設(shè)置音頻會話類別NSError *error = nil;[session setCategory:AVAudioSessionCategoryPlayback error:&error];if (error) {NSLog(@"%@", error);return nil;}// 3.激活會話[session setActive:YES error:&error];if (error) {NSLog(@"%@", error);return nil;} View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/KeenLeung/p/5507114.html
總結(jié)
以上是生活随笔為你收集整理的QQ音乐项目(OC版) - 实现细节的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【T_SQL】 基础 事务
- 下一篇: 113. Path Sum II