Objective-C 使用核心動畫CAAnimation實現(xiàn)動畫

寫在前面
弄了下個人站...防止內(nèi)容再次被鎖定...所有東西都在這里面
welcome~
個人博客

先來看看效果吧

動畫效果.gif

整個核心動畫就不多做介紹了,隨便一搜就能有很多很詳細的解釋蝌蹂,主要使用以下四種

CABasicAnimation          //經(jīng)典動畫
CAKeyframeAnimation       //關(guān)鍵幀動畫
CATransition              //轉(zhuǎn)場動畫
CAAnimationGroup          //組動畫

分析下本次demo的動畫構(gòu)成

主要動畫是對音頻控制面板的操作龟糕。

  • 分解
    • 看做兩個view 一個是播放面板的小圓 一個是整個控制面板
    • 播放面板的曲線運動 使用核心動畫中的 CAKeyframeAnimation
    • 播放面板的變大縮小洗出、控制面板消失出現(xiàn) 使用CABasicAnimation并加入組動畫序列CAAnimationGroup
    • 歌曲信息面板的消失和出現(xiàn)

bounds動畫
對播放面板進行變大和變小静檬,下面是變小宽档,變大同理尉姨。

//startView變小
- (void)startViewChangeSmaller {

    //設(shè)置一組動畫
    //變小
    CABasicAnimation *animation1 = [[CABasicAnimation alloc] init];
    animation1.keyPath = @"bounds";
    animation1.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, kStartRadius*2, kStartRadius*2)];
    //變圓
    CABasicAnimation *animation2 = [[CABasicAnimation alloc] init];
    animation2.keyPath = @"cornerRadius";
    animation2.toValue = [NSNumber numberWithFloat:kStartRadius];
    //加入組動畫
    CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
    group.animations = @[animation1,animation2];
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    group.duration = kAnimationDuration;
    group.delegate = self;
    [self.startView.layer addAnimation:group forKey:nil];
    self.layer.masksToBounds = YES;
    
    [self performSelector:@selector(startViewBackAnimation) withObject:nil afterDelay:kAnimationDuration];
}

曲線動畫
這里我們使用的是貝塞爾曲線 先說代碼

//通過曲線路徑將startView移到中間
- (void)startViewToCenter {
    
    //設(shè)置貝塞爾曲線路徑動畫
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:self.startView.center];
    [path addCurveToPoint:CGPointMake(self.frame.size.width/2, self.frame.size.height/2 ) controlPoint1:CGPointMake(self.frame.size.width - kStartRadius, 0 ) controlPoint2:CGPointMake(self.frame.size.width * 1.3, self.frame.size.height/2)];
    CAKeyframeAnimation *anmiation0 = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    anmiation0.path = path.CGPath;
    anmiation0.duration = kAnimationDuration;
    anmiation0.removedOnCompletion = NO;
    anmiation0.fillMode = kCAFillModeForwards;
    [self.startView.layer addAnimation:anmiation0 forKey:nil];
    [self performSelector:@selector(startViewChangeAnimation) withObject:nil afterDelay:1];
}

這里就要提到貝塞爾曲線的控制點了,這里有個簡單的方法去定義曲線吗冤。

  • 打開PS 或者其他制圖軟件
  • 使用鋼筆畫一條線又厉,通過拖動控制點(錨點)就能更改成曲線的樣子
  • 二階的貝塞爾曲線是有2個控制點


    二階貝塞爾曲線控制點.png
  • 切換鋼筆工具為錨點選擇工具,我們來拖動錨點椎瘟,讓曲線變成你想要的樣子


    選擇錨點工具拖動錨點變換曲線.png
  • 知道控制點的大概位置這樣我們就能定義控制點坐標了覆致。

最后的小貼士:view超出superview的范圍了怎么辦?

很簡單給當前view添加一個響應(yīng)函數(shù)

//響應(yīng)超出view的事件
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    return YES;
}

再試試看 超出部分的button也可以點擊了肺蔚!

Demo地址

https://github.com/gongxiaokai/CAAnimationDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末煌妈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌璧诵,老刑警劉巖汰蜘,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異之宿,居然都是意外死亡族操,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門比被,熙熙樓的掌柜王于貴愁眉苦臉地迎上來色难,“玉大人,你說我怎么就攤上這事姐赡±吃ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵项滑,是天一觀的道長依沮。 經(jīng)常有香客問我,道長枪狂,這世上最難降的妖魔是什么危喉? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮州疾,結(jié)果婚禮上辜限,老公的妹妹穿的比我還像新娘。我一直安慰自己严蓖,他們只是感情好薄嫡,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颗胡,像睡著了一般毫深。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毒姨,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天哑蔫,我揣著相機與錄音,去河邊找鬼弧呐。 笑死闸迷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的俘枫。 我是一名探鬼主播腥沽,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼崩哩!你這毒婦竟也來了巡球?” 一聲冷哼從身側(cè)響起言沐,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酣栈,沒想到半個月后险胰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡矿筝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年起便,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窖维。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡榆综,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铸史,到底是詐尸還是另有隱情鼻疮,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布琳轿,位于F島的核電站判沟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏崭篡。R本人自食惡果不足惜挪哄,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琉闪。 院中可真熱鬧迹炼,春花似錦、人聲如沸颠毙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛀蜜。三九已至咱扣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涵防,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工沪铭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留壮池,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓杀怠,卻偏偏與公主長得像椰憋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赔退,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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