(抄)iOS實現(xiàn)動畫的幾種常見方式

http://www.devqinwei.com/2015/10/15/ios實現(xiàn)動畫的幾種常見方式/

1. 使用CALayer的基本關(guān)鍵幀動畫CABasicAnimation和CAKeyframeAnimation

特點:可做3D動畫

詳細(xì)介紹可參看兩個帖子:

http://blog.csdn.net/iosevanhuang/article/details/14488239

http://blog.csdn.net/wscqqlucy/article/details/8669636

注:( CGAffineTransform 和 CATransform3D 的比較 )

CGAffineTransform is used for 2-D manipulation of NSViews, UIViews, and other 2-D Core Graphics elements.

CATransform3D is a Core Animation structure that can do more complex 3-D manipulations of CALayers.( 搬運from stackOverFlow)

如:(CABasicAnimation)

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];

animation.fromValue = @(0);

animation.toValue = @(-M_PI);

animation.repeatCount = 0;

animation.duration = 0.4;

[aView.layer addAnimation:animation forKey:@"rotation"];

CATransform3D transform = CATransform3DIdentity;

transform.m34 = 1.0 / 500.0;

aView.layer.transform = transform;

如:(CAKeyframeAnimation)

CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"bounds"];

keyFrameAnimation.delegate = self;

keyFrameAnimation.duration = 1.0f;

keyFrameAnimation.beginTime = CACurrentMediaTime() + 1.0f;

NSValue *initialBounds = [NSValue valueWithCGRect: self.navigationController.view.layer.mask.bounds];

NSValue *secondBounds = [NSValue valueWithCGRect:CGRectMake(0.0f, 0.0f, self.navigationController.view.layer.mask.bounds.size.width - 40.0f , self.navigationController.view.layer.mask.bounds.size.height - 40.0f)];

NSValue *finalBounds = [NSValue valueWithCGRect:CGRectMake(0.0f, 0.0f, 2000.0f, 2000.0f)];

keyFrameAnimation.values = @[initialBounds,secondBounds,finalBounds];

keyFrameAnimation.keyTimes = @[@0, @0.5, @1];

keyFrameAnimation.timingFunctions = @[[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut] ];

keyFrameAnimation.removedOnCompletion = NO;

keyFrameAnimation.fillMode = kCAFillModeForwards;

[self.navigationController.view.layer.mask addAnimation:keyFrameAnimation forKey:@"maskAnimation"];

2. 使用CALayer的事務(wù)類CATransaction來執(zhí)行

CATransaction動畫包含顯示動畫和隱式動畫兩種帚湘。(顯示能控制動畫中更多方面)

隱式動畫:

//設(shè)置變化動畫過程是否顯示,默認(rèn)為YES不顯示

[CATransaction setDisableActions:NO];

//設(shè)置圓角

self.layer.cornerRadius = (self.layer.cornerRadius == 0.0f) ? 30.0f : 0.0f;

//設(shè)置透明度

self.layer.opacity = (self.layer.opacity == 1.0f) ? 0.5f : 1.0f;

顯示動畫:

//修改執(zhí)行時間

[CATransaction begin];

//顯式事務(wù)默認(rèn)開啟動畫效果,kCFBooleanTrue關(guān)閉

[CATransaction setValue:(id)kCFBooleanFalse

forKey:kCATransactionDisableActions];

//動畫執(zhí)行時間

[CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration];

//[CATransaction setAnimationDuration:[NSNumber numberWithFloat:5.0f]];

self.layer.cornerRadius = (self.layer.cornerRadius == 0.0f) ? 30.0f : 0.0f;

self.layer.opacity = (self.layer.opacity == 1.0f) ? 0.5f : 1.0f;

[CATransaction commit];

另外奸绷,CATransaction來可以用來設(shè)置嵌套動畫,即先執(zhí)行A動畫葱绒,再執(zhí)行B動畫豌蟋,再執(zhí)行C動畫…(這里不做舉例)

(例子來源于:http://www.cnblogs.com/bandy/archive/2012/03/26/2418165.html)

3. 使用UIView關(guān)鍵幀動畫animateKeyframesWithDuration

如:

[UIView animateKeyframesWithDuration:durationTime delay:0 options:0 animations:^{

[UIView addKeyframeWithRelativeStartTime:0*frameDuration relativeDuration:1*frameDuration animations:^{

self.pickGradeView.transform = CGAffineTransformMakeScale(0.01, 0.01);

}];

[UIView addKeyframeWithRelativeStartTime:1*frameDuration relativeDuration:1*frameDuration animations:^{

self.pickGradeView.alpha = 1.0;

}];} completion:^(BOOL finished) {

}];

4.使用UIView animateWithDuration

如:

[UIView animateWithDuration:1.0 delay:0.0 usingSpringWithDamping:1.0 initialSpringVelocity:0.5 options:0 animations:^{

self.shortNameLabel.transform = CGAffineTransformMakeScale(0.8, 0.8);

} completion:^(BOOL finished) {

[UIView animateWithDuration:0.4 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:0.5 options:0 animations:^{

self.shortNameLabel.transform = CGAffineTransformMakeScale(1.0, 1.0);

} completion:nil];

}];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末土居,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子娶耍,更是在濱河造成了極大的恐慌免姿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榕酒,死亡現(xiàn)場離奇詭異胚膊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)想鹰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門紊婉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辑舷,你說我怎么就攤上這事喻犁。” “怎么了何缓?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵肢础,是天一觀的道長。 經(jīng)常有香客問我碌廓,道長传轰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任谷婆,我火速辦了婚禮慨蛙,結(jié)果婚禮上勃刨,老公的妹妹穿的比我還像新娘。我一直安慰自己股淡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布廷区。 她就那樣靜靜地躺著唯灵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙轻。 梳的紋絲不亂的頭發(fā)上埠帕,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音玖绿,去河邊找鬼敛瓷。 笑死,一個胖子當(dāng)著我的面吹牛斑匪,可吹牛的內(nèi)容都是我干的呐籽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蚀瘸,長吁一口氣:“原來是場噩夢啊……” “哼狡蝶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贮勃,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤贪惹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后寂嘉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奏瞬,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年泉孩,在試婚紗的時候發(fā)現(xiàn)自己被綠了硼端。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡寓搬,死狀恐怖显蝌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情订咸,我是刑警寧澤曼尊,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站脏嚷,受9級特大地震影響骆撇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜父叙,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一神郊、第九天 我趴在偏房一處隱蔽的房頂上張望肴裙。 院中可真熱鬧,春花似錦涌乳、人聲如沸蜻懦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宛乃。三九已至,卻和暖如春蒸辆,著一層夾襖步出監(jiān)牢的瞬間征炼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工躬贡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留谆奥,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓拂玻,卻偏偏與公主長得像酸些,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子檐蚜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 在iOS中隨處都可以看到絢麗的動畫效果擂仍,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌熬甚。在這里你可以看...
    每天刷兩次牙閱讀 8,465評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果逢渔,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌乡括。在這里你可以看...
    F麥子閱讀 5,094評論 5 13
  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫肃廓,核心動畫,幀動畫诲泌,自定義轉(zhuǎn)場動畫盲赊。 1.UIView...
    請叫我周小帥閱讀 3,078評論 1 23
  • - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *...
    七里田間的守望者閱讀 1,422評論 0 4
  • 前言 本文只要描述了iOS中的Core Animation(核心動畫:隱式動畫、顯示動畫)敷扫、貝塞爾曲線哀蘑、UIVie...
    GitHubPorter閱讀 3,600評論 7 11