實(shí)現(xiàn)iOS 9 Task Switcher動畫[轉(zhuǎn)載]

本文轉(zhuǎn)載自http://tech.glowing.com/cn/
如有侵犯,立馬刪除
原文鏈接:實(shí)現(xiàn)iOS 9 Task Switcher動畫

升級到iOS 9以后,發(fā)現(xiàn)新的task switcher的動畫蠻有趣的伦泥,于是就動手實(shí)現(xiàn)了下,最終效果如下~

demo效果圖

思路

1 首先我們需要一個橫向的scroll view,可以用UICollectionView,也可以自己實(shí)現(xiàn)一個沈条。scroll view里每一頁都是一張card需忿,一屏5張card:

|                        |
|c(diǎn)ard card card card card|
|                        |

2 其次诅炉,我們需要在scrollViewDidScroll中判斷每張card距離中心的距離,根據(jù)這個值來調(diào)整它的alpha屋厘,scale以及x軸的translation涕烧。

alpha:右邊的card alpha都是1,左邊的越靠左alpha越小
scale: 從左往右依次變大
translation:除了中間的card汗洒,所有的card都會右偏议纯,而為了讓中間card大部分都露出來,右邊的card偏移需要比左邊大
開工

1. 橫向滾動的scroll view

我們可以自己實(shí)現(xiàn)一個橫向無限滾動的scroll view, 具體可以參考:http://tech.glowing.com/cn/practice-in-uiscrollview/
在scrollViewDidScroll中溢谤,我們提供一個delegate方法瞻凤,告訴使用者每一頁距離中心的位置,以便apply各種transform到這個view上世杀,delegate方法如下:

@protocol InfiniteScrollViewDelegate \<NSObject\>
- (void)updateView:(UIView *)view withProgress:(CGFloat)progress scrollDirection:(ScrollDirection)direction;
@end

說明一下progress的含義阀参,如果一屏有5個visible views的話,那么它的值會從-2變化到2:

|                   |
|-2...-1...0...1...2|
|                   |

2. 根據(jù)每一頁的位置來設(shè)置它的transform

首先是alpha瞻坝,中心右邊的card alpha都是1蛛壳,而左邊的會越來越淡,所以我們可以這樣寫:

if (progress \>= 0)   
view.alpha = 1;
} else 
view.alpha = 1 - fabs(progress) * 0.2;
}

其次是scale所刀,由左往右依次變大:

CGAffineTransform transform = CGAffineTransformIdentity;  
CGFloat scale = 1 + (progress) * 0.03;  
transform = CGAffineTransformScale(transform, scale, scale);  

最后是x軸的translation衙荐,除了中間的card,所有的card都會往右偏浮创,而為了讓中間card大部分都露出來忧吟,右邊的card偏移需要比左邊大

CGFloat translation = 0;  
if (progress \> 0)   
translation = fabs(progress) * SCREEN_WIDTH / 2.2;
} else 
translation = fabs(progress) * SCREEN_WIDTH / 15;
}
transform = CGAffineTransformTranslate(transform, translation, 0); 

完整的實(shí)現(xiàn):

-(void)updateView:(UIView *)view withProgress:(CGFloat)progress scrollDirection:(ScrollDirection)direction
{
    // adjust z-index of each views
    NSMutableArray *views = [[self.scrollView allViews] mutableCopy];
    [views sortUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) 
    {
        return view1.tag > view2.tag;
    }];
    for (UIView *view in views) 
    {
        [view.superview bringSubviewToFront:view];
    }

// alpha
if (progress >= 0) 
{
    view.alpha = 1;
} 
else 
{
    view.alpha = 1 - fabs(progress) * 0.2;
}

CGAffineTransform transform = CGAffineTransformIdentity;    
// scale
CGFloat scale = 1 + (progress) * 0.03;
transform = CGAffineTransformScale(transform, scale, scale);
// translation
CGFloat translation = 0;
if (progress > 0) 
{
    translation = fabs(progress) * SCREEN_WIDTH / 2.2;
} 
else
{
    translation = fabs(progress) * SCREEN_WIDTH / 15;
}
transform = CGAffineTransformTranslate(transform, translation, 0);
view.transform = transform;
}

最后是完整的demo代碼:https://github.com/Glow-Inc/TaskSwitcherDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市斩披,隨后出現(xiàn)的幾起案子瀑罗,更是在濱河造成了極大的恐慌,老刑警劉巖雏掠,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斩祭,死亡現(xiàn)場離奇詭異,居然都是意外死亡乡话,警方通過查閱死者的電腦和手機(jī)摧玫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诬像,你說我怎么就攤上這事屋群。” “怎么了坏挠?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵芍躏,是天一觀的道長。 經(jīng)常有香客問我降狠,道長对竣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任榜配,我火速辦了婚禮否纬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛋褥。我一直安慰自己临燃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布烙心。 她就那樣靜靜地躺著膜廊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淫茵。 梳的紋絲不亂的頭發(fā)上爪瓜,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音痘昌,去河邊找鬼钥勋。 笑死,一個胖子當(dāng)著我的面吹牛辆苔,可吹牛的內(nèi)容都是我干的算灸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼驻啤,長吁一口氣:“原來是場噩夢啊……” “哼菲驴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骑冗,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤赊瞬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贼涩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巧涧,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年遥倦,在試婚紗的時候發(fā)現(xiàn)自己被綠了谤绳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缩筛,靈堂內(nèi)的尸體忽然破棺而出消略,到底是詐尸還是另有隱情,我是刑警寧澤瞎抛,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布艺演,位于F島的核電站,受9級特大地震影響桐臊,放射性物質(zhì)發(fā)生泄漏胎撤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一豪硅、第九天 我趴在偏房一處隱蔽的房頂上張望哩照。 院中可真熱鬧挺物,春花似錦懒浮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痴昧,卻和暖如春稽穆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赶撰。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工舌镶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豪娜。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓餐胀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘤载。 傳聞我的和親對象是個殘疾皇子否灾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,401評論 2 45
  • 轉(zhuǎn)眼就快過年了鸣奔。 之前講過這一年可以被稱為碎片之年墨技,訂閱的許多公眾號上都陸續(xù)推文講一些過年回家的幽微感情。講兩句“...
    秋庫里閱讀 346評論 0 0
  • 謝軒聞到了玫瑰的花香挎狸,也聽到了歐陽元渡的聲音扣汪,她專注在手中的《天性呼喚》里 歐陽元渡心中已經(jīng)有怒火在燃燒,謝軒對他...
    范伊莎瑞閱讀 287評論 0 0
  • 背景: 富豪:陸嘉城 72歲 曾是40年前一線演員 后成立了自己的影視公司CME 億萬富翁 離異四次 第五次婚姻是...
    趙公子039閱讀 358評論 4 1
  • 喝火令·落花 向晚飛南浦锨匆,黃昏醉北陂崭别。 五更敲碎水中湄。 零落但逐風(fēng)去,明歲又花飛紊遵。 過客拂衣袂账千,歸人畫黛眉。 但...
    野渡ing閱讀 304評論 6 3