仿酷狗音樂轉場動畫

一了赌、前言

音樂播放器,我一直是用酷狗的吏夯。不僅僅是因為她的音樂資源此蜈,更主要的是這款App的用戶體驗--各種流暢的滑動,無比絢爛的UI噪生。其中最讓我喜歡的就是她的轉場動畫了裆赵,用起來很順手。

酷狗音樂App流暢的用戶體驗

今天這篇文章先不介紹如何自定義轉場動畫跺嗽。我們主要就來玩一下酷狗音樂的轉場動畫的動畫實現(xiàn)战授。

二、酷狗音樂轉場動畫初探索桨嫁,建立數(shù)學模型

根據(jù)上面的動圖植兰,小伙伴們仔細觀察酷狗音樂是如何將兩個頁面進行轉場的。其實不難發(fā)現(xiàn)A頁面過渡到B頁面璃吧,就是將B頁面旋轉移動過來的楣导。其移動的方式大致如下圖所示:

酷狗音樂轉場模擬

如上圖,B頁面通過動畫移動到A頁面就是酷狗音樂轉場的一個動畫實現(xiàn)肚逸。很簡單爷辙,通過視圖的transform屬性就能夠實現(xiàn)。

現(xiàn)在面臨的主要問題就是B頁面與A頁面它的一個位置關系是如何的呢朦促?
針對上面的問題膝晾,我們可以從兩個方面來回答:

  • A頁面與B頁面有一個角度上的偏移。
    這個角度我們可以給個固定值务冕,目測大概25°角血当。
  • 在A沿著右下角旋轉25度角后,再沿著垂直邊向上方法平移一定距離禀忆,可到達B頁面臊旭。
    這個距離我們也可以給個固定值,大概50point(Point為蘋果的單位箩退,不熟悉的小伙伴請移步iOS繪制1像素線的正確姿勢)

三离熏、計算A,B兩個頁面的角度偏移量與位置偏移量

  1. A戴涝,B頁面的角度偏移量滋戳。
    以蘋果手機左上角為原點坐標钻蔑,即A頁面左上角為原點,B頁面的橫向與縱向邊相對于這個坐標的X軸奸鸯,Y軸的夾角就是A,B頁面的角度偏移量咪笑,即25°。
  2. A娄涩,B頁面的位置偏移量
    我們可以將A窗怒,B頁面的中心點作為參照點。找到兩個頁面中心點在X軸與Y軸的距離就是A蓄拣,B頁面的位置偏移量扬虚。如圖所示:
    頁面偏移量

    如圖可見,A頁面中心點a與B頁面中心點b的位置偏移量即為:垂直方向上偏移量為線段bc的長度弯蚜,水平方向上偏移量為線段ab的長度
    下面我們就來計算線段ab與線段bc的長度孔轴。
    一開始我們也說了A頁面過渡到B頁面剃法,首先是A頁面順時針旋轉25°角碎捺。如圖:
    A頁面旋轉25度至B頁面示意圖

    如圖可以看到當前的直角△abc。如果B頁面在此基礎上再向上平移50point贷洲,即B頁面中心點b向上平移50point至b'收厨。我們會發(fā)現(xiàn)水平方向的偏移量ac不會改變。垂直方向上偏移量bc在大于50point的時候优构,會減少50point诵叁。
    平移后的B頁面

    根據(jù)向上平移的多少,b'可能在線段ac的上方或者下方或者acb'三點一線钦椭。
    所以我們計算出旋轉且未上移這種狀態(tài)下的ac與bc就能夠計算出旋轉且上移情況下的垂直偏移量與水平偏移量拧额。
    假設A頁面長寬分別為2x,2y。
  3. 首先計算當前斜邊ab
    如圖我們做一個輔助線彪腔,連接ad,bd
    可知abd為等腰三角形侥锦,并且可以計算出ad與A頁面垂直邊的夾角 β=arctan(x/y),那么∠adb=β*2+(25.0/180)*PI德挣。ad=sqrt(x*x+y*y)恭垦。由此可得ab=2*ad*sin(β/2.0)
  4. 計算∠cab
    先計算∠cad=arctan(y/x)格嗅,再計算∠bad=(PI-∠adb)/2.0番挺。
    由此可得∠cab=∠cad-∠bad
  5. 計算橫向偏移量ac
    因為△abc為直角三角形屯掖,所以ac=ab*cos(∠cab)玄柏。
  6. 計算縱向偏移量bc
    bc=ab*sin(∠cab)

四、代碼實現(xiàn)

我們知道A贴铜,B兩個頁面的寬高實際上為手機屏幕的寬高粪摘。這里要注意一點的就是角度的轉換右蒲。

  • 角度轉換公式我用的一個宏定義如下:
// 角度轉換
#define angelToRandian(x)  ((x)/180.0*M_PI)
  • 動畫核心算法
CGFloat x = fromView.frame.size.width * 0.5;
CGFloat y = fromView.frame.size.height * 0.5;
//計算邊長ab函數(shù)
float calculateAB (float x, float y) {
    
    //等腰三角形adb的腰長
    float ad = sqrt(pow(x, 2) + pow(y, 2));
    //角bda
    float bda = atan(x/y)*2+angelToRandian(25);
    //角bad
    float bad = (M_PI - bda)*0.5;
    //邊ab
    float ab = (ad * cos(bad))*2;
    return ab;
}
//計算角cab函數(shù)
float calculateCAB (float x, float y) {
    
    //角bda
    float bda = atan(x/y)*2+angelToRandian(25);
    //角bad
    float bad = (M_PI - bda)*0.5;
    //角cad
    float cad = atan(y/x);
    //角cab
    float cab = cad-bad;
    return cab;
}

//計算ac
CGFloat ac = calculateAB(x, y) * cos(calculateCAB(x, y));
//計算bc
CGFloat bc = calculateAB(x, y) * sin(calculateCAB(x, y));

//最終的橫縱向偏移量
CGFloat spacingX = ac;
CGFloat spacingY = 50>bc?50-bc:bc-50;

//設置B頁面的初始位置偏移
toView.transform = CGAffineTransformTranslate(toView.transform, spacingX, spacingY);
//設置B頁面的初始角度偏移
toView.transform = CGAffineTransformRotate(toView.transform, angelToRandian(25));
//開始動畫
[UIView animateWithDuration:3.0 animations:^{
        toView.transform = CGAffineTransformIdentity;
}];

動畫效果如下:

仿酷狗音樂轉場動畫

本篇文章作為一個引子,主要是為下一篇如何實現(xiàn)自定義轉場動畫作為鋪墊赶熟。敬請期待瑰妄。喜歡的小伙伴順手給個??,謝謝~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末映砖,一起剝皮案震驚了整個濱河市间坐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邑退,老刑警劉巖竹宋,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異地技,居然都是意外死亡蜈七,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門莫矗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飒硅,“玉大人,你說我怎么就攤上這事作谚∪洌” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵妹懒,是天一觀的道長雀监。 經(jīng)常有香客問我,道長眨唬,這世上最難降的妖魔是什么会前? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮匾竿,結果婚禮上瓦宜,老公的妹妹穿的比我還像新娘。我一直安慰自己搂橙,他們只是感情好歉提,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著区转,像睡著了一般苔巨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上废离,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天侄泽,我揣著相機與錄音,去河邊找鬼蜻韭。 笑死悼尾,一個胖子當著我的面吹牛柿扣,可吹牛的內容都是我干的。 我是一名探鬼主播闺魏,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼未状,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了析桥?” 一聲冷哼從身側響起司草,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泡仗,沒想到半個月后埋虹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡娩怎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年搔课,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片截亦。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡爬泥,死狀恐怖,靈堂內的尸體忽然破棺而出魁巩,到底是詐尸還是另有隱情急灭,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布谷遂,位于F島的核電站,受9級特大地震影響卖鲤,放射性物質發(fā)生泄漏肾扰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一蛋逾、第九天 我趴在偏房一處隱蔽的房頂上張望集晚。 院中可真熱鬧,春花似錦区匣、人聲如沸偷拔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莲绰。三九已至,卻和暖如春姑丑,著一層夾襖步出監(jiān)牢的瞬間蛤签,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工栅哀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留震肮,地道東北人称龙。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像戳晌,于是被迫代替她去往敵國和親鲫尊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容

  • 高級鉗工應知鑒定題庫(858題) ***單選題*** 1. 000003難易程度:較難知識范圍:相關4 01答案:...
    開源時代閱讀 5,783評論 1 9
  • 第一章數(shù)和數(shù)的運算 一概念 (一)整數(shù) 1整數(shù)的意義 自然數(shù)和0都是整數(shù)沦偎。 2自然數(shù) 我們在數(shù)物體的時候马昨,用來表示...
    meychang閱讀 2,612評論 0 5
  • 作者:賓夕法尼亞大學沃頓商學院教授凱文·韋巴赫 游戲是人受自身動機的驅動所致,因此扛施,在需要改變人們的行為鸿捧、激發(fā)消費...
    Sting閱讀 1,472評論 1 5
  • 全面的描寫生活瑣事匙奴,揭開真相,這才是《紅樓夢》的精髓之一妄荔。 前面已經(jīng)說過泼菌,所謂紅學專家們研究出來的隱藏的歷史秘事,...
    那座野山閱讀 148評論 0 0
  • 這是王可樂在簡書的第11篇文章 朋友常說:“你要當個暖男啊篷角!”我經(jīng)常聽成“卵男”焊刹。以為是罵人的話,后來查閱了一些資...
    h88ux2閱讀 5,551評論 26 146