圓球沿著橢圓軌跡做動(dòng)畫(huà)

前言:最近公司項(xiàng)目有個(gè)需求紊遵,需要實(shí)現(xiàn)讓一個(gè)view沿著橢圓軌跡做動(dòng)畫(huà),效果實(shí)現(xiàn)后侥蒙,就自己封裝做了一個(gè)小demo暗膜,使用更方便。先看效果:

橢圓.gif

效果圖中的白色橢圓軌跡線其實(shí)是用貝塞爾曲線畫(huà)出來(lái)的辉哥,為了清晰的看出來(lái)運(yùn)動(dòng)的軌跡桦山。其實(shí)項(xiàng)目中是不顯示軌跡線的攒射,也就是小球是懸空運(yùn)動(dòng)的。若不需要?jiǎng)h除掉即可恒水。

**
實(shí)現(xiàn)步驟:
**

1.首先設(shè)定關(guān)鍵幀動(dòng)畫(huà)CAKeyframeAnimation的一些屬性会放,比如運(yùn)動(dòng)時(shí)間和重復(fù)次數(shù)和calculationMode模式,我們選擇kCAAnimationPaced 使得動(dòng)畫(huà)均勻進(jìn)行钉凌。

    CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    pathAnimation.calculationMode = kCAAnimationPaced;
    pathAnimation.fillMode = kCAFillModeForwards;
    pathAnimation.removedOnCompletion = NO;
    pathAnimation.duration = 5.0;
    pathAnimation.repeatCount = 2;

2.設(shè)定好關(guān)鍵幀動(dòng)畫(huà)的path咧最,即一個(gè)橢圓形的路徑。需要使用CGPathAddArc御雕,CGPathAddArc經(jīng)常用于畫(huà)正圓矢沿,比如下面就是一個(gè)正圓,各個(gè)參數(shù)的意義:

 //160,200為圓心,100為半徑 (startAngle酸纲,endAngle)為起始角度和結(jié)束角度捣鲸,1為順時(shí)針,0 為逆時(shí)針
 CGPathAddArc(curvedPath, NULL, 160,200, 100, startAngle, endAngle, 0);

需要注意的是由于iOS中的坐標(biāo)體系是和Quartz坐標(biāo)體系中Y軸相反的闽坡,所以iOS UIView在做Quartz繪圖時(shí)栽惶,Y軸已經(jīng)做了Scale為-1的轉(zhuǎn)換,因此造成CGPathAddArc函數(shù)最后一個(gè)是否是順時(shí)針的參數(shù)結(jié)果正好是相反的疾嗅,也就是說(shuō)如果設(shè)置最后的參數(shù)為YES外厂,根據(jù)參數(shù)定義應(yīng)該是順時(shí)針的,但實(shí)際繪圖結(jié)果會(huì)是逆時(shí)針的代承!

我們需要畫(huà)的是橢圓啊汁蝶,別急,接下來(lái)稍作更改即可论悴。正圓第二個(gè)參數(shù)默認(rèn)為NULL掖棉,我們要改成橢圓,

    //短半軸和長(zhǎng)半軸的比例
    float radiuscale = 0.5;
    //橢圓頂點(diǎn)的坐標(biāo)值
    CGFloat origin_x = self.frame.size.width/2;
    CGFloat origin_y = self.frame.size.height/2;
    //長(zhǎng)半軸的長(zhǎng)
    CGFloat radiusX = 100;
    
    CGMutablePathRef curvedPath = CGPathCreateMutable();
    CGAffineTransform t2 = CGAffineTransformConcat(CGAffineTransformConcat(
                                                                           CGAffineTransformMakeTranslation(-origin_x, -origin_y),
                                                                           CGAffineTransformMakeScale(1, radiuscale)),
                                                   CGAffineTransformMakeTranslation(origin_x, origin_y));
    CGPathAddArc(curvedPath, &t2, origin_x, origin_y, radiusX,startAngle,endAngle, 1);
    pathAnimation.path = curvedPath;
    CGPathRelease(curvedPath);

好了膀估,至此啊片,動(dòng)畫(huà)的軌跡和屬性都寫(xiě)好了。添加到view上就ok了玖像。

3.貝塞爾畫(huà)橢圓
如果是整個(gè)橢圓的話紫谷,只需要設(shè)定好理想中的橢圓的外切圓即可。

    //整個(gè)橢圓
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    UIBezierPath *arc = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(origin_x-100, origin_y-50, 200, 100)];
    [[UIColor whiteColor] setStroke];
    [arc stroke];
    CGContextRestoreGState(context);

**總結(jié): 希望本文能對(duì)你有幫助捐寥。如果你有更好的想法,歡迎和我交流! **
demo地址:https://github.com/xiaochenyi/CircleAnimateDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笤昨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子握恳,更是在濱河造成了極大的恐慌瞒窒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乡洼,死亡現(xiàn)場(chǎng)離奇詭異崇裁,居然都是意外死亡匕坯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)拔稳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葛峻,“玉大人,你說(shuō)我怎么就攤上這事巴比∈踅保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵轻绞,是天一觀的道長(zhǎng)采记。 經(jīng)常有香客問(wèn)我,道長(zhǎng)政勃,這世上最難降的妖魔是什么唧龄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮奸远,結(jié)果婚禮上选侨,老公的妹妹穿的比我還像新娘。我一直安慰自己然走,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布戏挡。 她就那樣靜靜地躺著芍瑞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褐墅。 梳的紋絲不亂的頭發(fā)上拆檬,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音妥凳,去河邊找鬼竟贯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逝钥,可吹牛的內(nèi)容都是我干的屑那。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼艘款,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼持际!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起哗咆,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蜘欲,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后晌柬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體姥份,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郭脂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澈歉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片展鸡。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闷祥,靈堂內(nèi)的尸體忽然破棺而出娱颊,到底是詐尸還是另有隱情,我是刑警寧澤凯砍,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布箱硕,位于F島的核電站,受9級(jí)特大地震影響悟衩,放射性物質(zhì)發(fā)生泄漏剧罩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一座泳、第九天 我趴在偏房一處隱蔽的房頂上張望惠昔。 院中可真熱鬧,春花似錦挑势、人聲如沸镇防。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)来氧。三九已至,卻和暖如春香拉,著一層夾襖步出監(jiān)牢的瞬間啦扬,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工凫碌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扑毡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓盛险,卻偏偏與公主長(zhǎng)得像瞄摊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苦掘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果泉褐,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌鸟蜡。在這里你可以看...
    F麥子閱讀 5,104評(píng)論 5 13
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果膜赃,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫(huà)全貌揉忘。在這里你可以看...
    每天刷兩次牙閱讀 8,471評(píng)論 6 30
  • 概覽 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜疲眷,今天將帶大家一窺iOS動(dòng)畫(huà)全貌禾蚕。在這里你...
    被吹落的風(fēng)閱讀 1,554評(píng)論 1 2
  • 每天的閱讀已成習(xí)慣,最近雨比較多狂丝,晚上吃完飯也不能出去散步换淆,一家人就會(huì)坐在兒子的活動(dòng)區(qū)閱讀,老公陪兒子讀繪...
    小玲兒_閱讀 112評(píng)論 2 8
  • 清晨打開(kāi)手機(jī)几颜,看到上面日期:8月23日倍试。 突然意識(shí)到今天是我來(lái)簡(jiǎn)書(shū)寫(xiě)作整整一年的時(shí)間。 此時(shí)想起了慕芝妹妹的約稿:...
    RainbowPeng閱讀 4,130評(píng)論 127 161