Core Animation | 核心動畫 | 轉(zhuǎn)場動畫 | 抖動效果 | 過山車動畫并改變大小和顏色

Core Animation | 核心動畫簡介

核心動畫位于UIKit的下一層俏站,相比UIView動畫,它可以實現(xiàn)更復雜的動畫效果,Core Animation是一組功能強大、效果華麗的動畫API,無論在iOS系統(tǒng)或者在你開發(fā)的App中嚎货,都會有大量的應用場景

  • 核心動畫位置

在UIKit框架中位置
  • 核心動畫表現(xiàn)得兩張形式

顯示動畫/隱式動畫
  • 核心動畫中可以直接使用的類

  • CABasicAnimation (基本動畫)
  • CAKeyframeAnimation (關(guān)鍵幀動畫)
  • CATransition (轉(zhuǎn)場動畫)
  • CAAnimationGroup (動畫組)
  • CASpringAnimation (彈簧動畫)

效果演示One / 抖動

點擊屏幕觸發(fā)抖動效果
  • 需要定義的角度宏
#define angleToRadians(angle) ((angle) / 180.0 *M_PI)
  • 核心代碼
- (void)ShakeDemo {
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    anim.keyPath = @"transform.rotation";
    anim.values = @[@angleToRadians(-6), @angleToRadians(6)];
    anim.repeatCount = MAXFLOAT;
    //    anim.duration = 2;
    anim.autoreverses = YES;
    anim.speed = 2;
    [_imgView.layer addAnimation:anim forKey:nil];
}

說明

  1. keyPath是設置動畫的type,大家可以根據(jù)自己的需求設置
  2. repeatCount是重復的意思,如果不設置的話需要在values中在次添加6到-6的值蔫浆,否知-6到6有動畫殖属,反過來就沒有動畫了
  3. 如果設置repeatCount屬性,那么speed就是設置頻率瓦盛,默認是0.5
  4. repeatCount是重復次數(shù)洗显,默認我們設置最大即可

效果演示Two / 過山車動畫并隨機改變顏色和大小

  • 效果演示

移動中并隨機改變顏色和大小
  • 核心代碼

- (void)Demo{
    //    曲線
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(50, 200)];
    [path addCurveToPoint:CGPointMake(300, 200) controlPoint1:CGPointMake(180, 100) controlPoint2:CGPointMake(200, 300)];
    //需要添加在layer上
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.path = path.CGPath;
    shapeLayer.fillColor = nil;
    shapeLayer.strokeColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer:shapeLayer];
    
    CALayer *colorLayer = [CALayer layer];
    colorLayer.frame = CGRectMake(0, 0, 60, 60);
    colorLayer.position = CGPointMake(50, 200);
    colorLayer.backgroundColor = [UIColor blueColor].CGColor;
    [self.view.layer addSublayer:colorLayer];
    
    //    過山車的動畫
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    anim.keyPath = @"position";
    anim.path = path.CGPath;
    //    anim.duration = 4.0f;
    //    anim.removedOnCompletion = NO;
    //    anim.fillMode = kCAFillModeForwards;
    //    anim.rotationMode = kCAAnimationRotateAuto;
    //    [colorLayer addAnimation:anim forKey:nil];
    //    改變大小
    CABasicAnimation *sizeAnim = [CABasicAnimation animation];
    sizeAnim.keyPath = @"transform.scale";
    sizeAnim.toValue = @.5;
    //    sizeAnim.duration = 4.0;
    //    sizeAnim.fillMode = kCAFillModeForwards;
    //    sizeAnim.removedOnCompletion = NO;
    //
    //    [colorLayer addAnimation:sizeAnim forKey:nil];
    
    //    修改顏色
    CGFloat red = arc4random() / (CGFloat)INT_MAX;
    CGFloat green = arc4random() / (CGFloat)INT_MAX;
    CGFloat blue = arc4random() / (CGFloat)INT_MAX;
    UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:1];
    
    CABasicAnimation *colorAnim = [CABasicAnimation animation];
    colorAnim.keyPath = @"backgroundColor";
    colorAnim.toValue = (id)color.CGColor;
    //    colorAnim.duration = 4.0f;
    //    colorAnim.fillMode = kCAFillModeForwards;
    //    colorAnim.removedOnCompletion = NO;
    //    [colorLayer addAnimation:colorAnim forKey:nil];
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.animations = @[anim, sizeAnim, colorAnim];
    group.duration = 4.0f;
    group.fillMode = kCAFillModeForwards;
    group.removedOnCompletion = NO;
    [colorLayer addAnimation:group forKey:nil];
}

代碼說明/邏輯可以使用2中方法實現(xiàn)

  1. 不使用CAAnimationGroup動畫組的形式,把屏蔽的代碼打開即可
  2. 使用CAAnimationGroup動畫組形式,把重復的動畫設置全部都到動畫組中處理,即把屏蔽的代碼刪除即可
  3. 這是核心動畫幾個類的綜合使用,提供大家參考
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末原环,一起剝皮案震驚了整個濱河市挠唆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扮念,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碧库,死亡現(xiàn)場離奇詭異柜与,居然都是意外死亡,警方通過查閱死者的電腦和手機嵌灰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門弄匕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沽瞭,你說我怎么就攤上這事迁匠。” “怎么了驹溃?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵城丧,是天一觀的道長。 經(jīng)常有香客問我豌鹤,道長亡哄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任布疙,我火速辦了婚禮蚊惯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灵临。我一直安慰自己截型,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布儒溉。 她就那樣靜靜地躺著宦焦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赶诊,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天笼平,我揣著相機與錄音,去河邊找鬼舔痪。 笑死寓调,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的锄码。 我是一名探鬼主播夺英,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滋捶!你這毒婦竟也來了痛悯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤重窟,失蹤者是張志新(化名)和其女友劉穎载萌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巡扇,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡扭仁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了厅翔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乖坠。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刀闷,靈堂內(nèi)的尸體忽然破棺而出熊泵,到底是詐尸還是另有隱情,我是刑警寧澤甸昏,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布顽分,位于F島的核電站,受9級特大地震影響施蜜,放射性物質(zhì)發(fā)生泄漏怯邪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一花墩、第九天 我趴在偏房一處隱蔽的房頂上張望悬秉。 院中可真熱鬧,春花似錦冰蘑、人聲如沸和泌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽武氓。三九已至,卻和暖如春炉抒,著一層夾襖步出監(jiān)牢的瞬間余赢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工丰捷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忠烛,地道東北人属提。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像美尸,于是被迫代替她去往敵國和親冤议。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

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