iOS淘寶購(gòu)物界面動(dòng)畫解析

  • 首先我要說的是點(diǎn)擊加入購(gòu)物車按鈕彈出View的動(dòng)畫解析聂示,而不是什么點(diǎn)擊商品圖片飛來飛去的動(dòng)畫,效果是這樣的:
taobao2.gif
  • 乍一看很簡(jiǎn)單鹅颊,不就把它放大縮小一下彩匕,你要這么做效果那真是慘不能睹,仔細(xì)觀察手機(jī)淘寶這個(gè)動(dòng)畫效果杏愤,一氣呵成靡砌,有3D效果,像一張紙一樣往下落的感覺珊楼。由于產(chǎn)品的需求通殃,一開始毫無頭緒,網(wǎng)上的第三方做出效果我很不滿意:

disanfang.gif

動(dòng)畫過程給人感覺很突兀厕宗,銜接不夠流暢画舌,一個(gè)動(dòng)畫需要兩個(gè)階段完成,這就導(dǎo)致不夠順滑已慢。

該動(dòng)畫效果可以由縮小曲聂,旋轉(zhuǎn),平移佑惠,下落動(dòng)畫并發(fā)執(zhí)行得到的結(jié)果朋腋,可以使用核心動(dòng)畫組來實(shí)現(xiàn)并發(fā)的動(dòng)畫;

View彈出的動(dòng)畫:背景下落膜楷,popview彈出旭咽,使用核心動(dòng)畫組實(shí)現(xiàn)
x, y軸方向分別縮放赌厅,z軸方向下落穷绵,根據(jù)錨點(diǎn)繞x軸旋轉(zhuǎn),再加入y軸方向的平移察蹲,使其有飄來飄去的感覺。
效果如下:

popView.gif

代碼如下:
popView出現(xiàn)的時(shí)候:

//該方法是并發(fā)催训,所以不影響核心動(dòng)畫的執(zhí)行洽议,為什么需要這個(gè)方法,因?yàn)槲覀冞€需要對(duì)popview和coverView進(jìn)行操作漫拭,對(duì)不需要操作的self.View就可以使用核心動(dòng)畫
[UIView animateWithDuration:0.5 animations:^{
        popView.yqh_y = (MAINHEIGHT - 280);
        coverView.alpha = 0.3;
    }];
    
//注意設(shè)置錨點(diǎn)和位置點(diǎn)亚兄,因?yàn)樾D(zhuǎn)和縮放都是按照錨點(diǎn)來的
    self.view.layer.anchorPoint = CGPointMake(0.5, 0.8);
    self.view.layer.position = CGPointMake(self.view.yqh_width * .5, self.view.yqh_height * .8);
    CATransform3D tran = CATransform3DIdentity;
//設(shè)置近大遠(yuǎn)小的效果,值越大效果越明顯采驻,所以不要太大
    tran.m34 = -1.0/1000;
    self.view.layer.transform = tran;
    
//核心動(dòng)畫也是并發(fā)
    CABasicAnimation *scaleAnimateX = [CABasicAnimation animationWithKeyPath:@"transform.scale.x"];
    scaleAnimateX.toValue = @(0.9);
//延遲0.2秒執(zhí)行
    scaleAnimateX.beginTime = 0.2;
    
    CABasicAnimation *scaleAnimateY = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"];
    scaleAnimateY.toValue = @(0.9);
    scaleAnimateY.beginTime = 0.2;
    
    CABasicAnimation *positonY = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
    positonY.toValue = @(-60);
    
    CABasicAnimation *positonZ = [CABasicAnimation animationWithKeyPath:@"transform.translation.z"];
    positonZ.toValue = @(-100);
    
    CAKeyframeAnimation *rotation = [CAKeyframeAnimation animation];
    rotation.keyPath = @"transform.rotation.x";
    rotation.values = @[@(0), @(15 / 180.0 * M_PI), @(0)];
    rotation.repeatCount = 1;
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.animations = @[scaleAnimateX, scaleAnimateY, rotation, positonY, positonZ];
    group.duration = 0.5;
    
//動(dòng)畫結(jié)束不恢復(fù)原狀
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    [self.view.layer addAnimation:group forKey:nil];

popView消失的時(shí)候:

[UIView animateWithDuration:0.5 animations:^{
//popview消失
        self.popView.yqh_y = MAINHEIGHT;
        self.coverView.alpha = 0;
    }completion:^(BOOL finished) {
        [self.popView removeFromSuperview];
        [self.coverView removeFromSuperview];
//移除動(dòng)畫
        [self.view.layer removeAllAnimations];
//恢復(fù)默認(rèn)的錨點(diǎn)和位置點(diǎn)
        self.view.layer.anchorPoint = CGPointMake(0.5, 0.5);
        self.view.layer.position = CGPointMake(self.view.yqh_width * .5, self.view.yqh_height * .5);
    }];
    
//恢復(fù)的動(dòng)畫跟上面的相反
    CATransform3D tran = CATransform3DIdentity;
    tran.m34 = -1.0/1000;
    self.view.layer.transform = tran;
    
    CABasicAnimation *scaleAnimateX = [CABasicAnimation animationWithKeyPath:@"transform.scale.x"];
    scaleAnimateX.toValue = @(1.0);
    
    CABasicAnimation *scaleAnimateY = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"];
    scaleAnimateY.toValue = @(1.0);
    
    CABasicAnimation *positonY = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
    positonY.toValue = @(0);
    
    CABasicAnimation *positonZ = [CABasicAnimation animationWithKeyPath:@"transform.translation.z"];
    positonZ.toValue = @(0);
    
    CAKeyframeAnimation *rotation = [CAKeyframeAnimation animation];
    rotation.keyPath = @"transform.rotation.x";
    rotation.values = @[@(0), @(15 / 180.0 * M_PI), @(0)];
    rotation.repeatCount = 1;
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.animations = @[scaleAnimateX, scaleAnimateY, rotation, positonY, positonZ];
    group.duration = 0.5;
    
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    [self.view.layer addAnimation:group forKey:nil];

唉审胚,也懶得封裝了匈勋,大家可以給uiviewcontroller寫個(gè)分類,到時(shí)候就可以用上了膳叨。洽洁。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菲嘴,一起剝皮案震驚了整個(gè)濱河市饿自,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌龄坪,老刑警劉巖昭雌,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異健田,居然都是意外死亡烛卧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門妓局,熙熙樓的掌柜王于貴愁眉苦臉地迎上來总放,“玉大人,你說我怎么就攤上這事跟磨〖淞模” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵抵拘,是天一觀的道長(zhǎng)哎榴。 經(jīng)常有香客問我,道長(zhǎng)僵蛛,這世上最難降的妖魔是什么尚蝌? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮充尉,結(jié)果婚禮上飘言,老公的妹妹穿的比我還像新娘。我一直安慰自己驼侠,他們只是感情好姿鸿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倒源,像睡著了一般苛预。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笋熬,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天热某,我揣著相機(jī)與錄音,去河邊找鬼。 笑死昔馋,一個(gè)胖子當(dāng)著我的面吹牛筹吐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秘遏,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼丘薛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了垄提?” 一聲冷哼從身側(cè)響起榔袋,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铡俐,沒想到半個(gè)月后凰兑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡审丘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年吏够,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滩报。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锅知,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脓钾,到底是詐尸還是另有隱情售睹,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布可训,位于F島的核電站昌妹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏握截。R本人自食惡果不足惜飞崖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谨胞。 院中可真熱鬧固歪,春花似錦、人聲如沸胯努。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叶沛。三九已至蒲讯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恬汁,已是汗流浹背伶椿。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氓侧,地道東北人脊另。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像约巷,于是被迫代替她去往敵國(guó)和親偎痛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果独郎,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜踩麦,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,514評(píng)論 6 30
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)氓癌、插件谓谦、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,123評(píng)論 4 61
  • 我們?cè)趷矍槔锔械焦陋?dú),是因?yàn)闆]有對(duì)手 2016-01-06 原創(chuàng) 王晴 作家王晴 Take Control Kod...
    soul_ferryman閱讀 248評(píng)論 0 0
  • 周日休息在家贪婉,發(fā)現(xiàn)屋子很長(zhǎng)時(shí)間沒有認(rèn)真收?qǐng)?zhí)過反粥,于是,卷起袖子加油干疲迂。 看著左一堆右一堆才顿,眉頭皺了起來。男人收拾屋子...
    D036wade閱讀 192評(píng)論 0 2
  • 決策是判斷,是選擇腰池,是先從本人的見解開始尾组,要先確定標(biāo)準(zhǔn),以‘尚待證實(shí)的假設(shè)’為起點(diǎn)巩螃,假設(shè)不必辯論演怎,需經(jīng)得起驗(yàn)證。 ...
    悠哉輕創(chuàng)聯(lián)盟閱讀 2,332評(píng)論 0 0