CAKeyframeAnimation應(yīng)用之-仿windows加載樣式

效果圖:

代碼解析:

gitHub地址

主要原理是使用UIBezierPath繪制運動軌跡,并使用CAKeyframeAnimation實現(xiàn)動畫.通過設(shè)置timingFunction來改變動畫的速度,設(shè)置timeOffset改變動畫的初始位置.原理比較簡單直接看代碼吧

- (void)configPoint {
    NSInteger pointCount = self.pointNumber;
    CGFloat countFloat = (CGFloat)pointCount;
    
    //每個點動畫之間的時間間隔;
    CGFloat timeInterval = 0.75 * _animationDuration / countFloat;
    [self clearPoints];
    for (NSInteger i = 0; i < pointCount; i++) {
        UIView *pointView = [self getPoint];
        [self addSubview:pointView];
        [self.pointArray addObject:pointView];
        pointView.alpha = 1;
        
        CAKeyframeAnimation *animation = [self getKeyAnimation];
        //設(shè)置timeOffset,即初始偏移量
        animation.timeOffset = ( 2 - i ) * timeInterval;
        [pointView.layer addAnimation:animation forKey:@"animation"];
    }
}

- (CAKeyframeAnimation *)getKeyAnimation {
    CGFloat radius = (self.frame.size.width - _pointWidth) / 2;
    CGPoint centerPoint = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
    
    //使用UIBezierPath繪制運動軌跡
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:[self getBeginPoint]];
    [path addArcWithCenter:centerPoint radius:radius startAngle:- M_PI / 2 endAngle:M_PI * 3 / 2 clockwise:1];
    
    CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    keyAnimation.repeatCount = MAXFLOAT;
    keyAnimation.path = path.CGPath;
    keyAnimation.duration = _animationDuration;
    keyAnimation.autoreverses = NO;
    keyAnimation.fillMode = kCAFillModeBoth;
    keyAnimation.removedOnCompletion = NO;
    keyAnimation.calculationMode = kCAAnimationPaced;
    //設(shè)置動畫速度.
    keyAnimation.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.95 :0.35 :0.05 :0.7];
    return keyAnimation;
}

輔助工具:

設(shè)置timingFunction時可以用 這個工具 獲取合適的動畫參數(shù).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末间唉,一起剝皮案震驚了整個濱河市邑狸,隨后出現(xiàn)的幾起案子褐隆,更是在濱河造成了極大的恐慌溃列,老刑警劉巖呻畸,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烫罩,死亡現(xiàn)場離奇詭異胸完,居然都是意外死亡公条,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來覆享,“玉大人鸠姨,你說我怎么就攤上這事⊙驼妫” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵连茧,是天一觀的道長核蘸。 經(jīng)常有香客問我,道長啸驯,這世上最難降的妖魔是什么客扎? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮罚斗,結(jié)果婚禮上徙鱼,老公的妹妹穿的比我還像新娘。我一直安慰自己针姿,他們只是感情好袱吆,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著距淫,像睡著了一般绞绒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榕暇,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天蓬衡,我揣著相機與錄音,去河邊找鬼彤枢。 笑死狰晚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缴啡。 我是一名探鬼主播壁晒,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盟猖!你這毒婦竟也來了讨衣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤式镐,失蹤者是張志新(化名)和其女友劉穎反镇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娘汞,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡歹茶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊豺。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡燎孟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尸昧,到底是詐尸還是另有隱情揩页,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布烹俗,位于F島的核電站爆侣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏幢妄。R本人自食惡果不足惜兔仰,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕉鸳。 院中可真熱鬧乎赴,春花似錦、人聲如沸潮尝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勉失。三九已至友题,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戴质,已是汗流浹背度宦。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留告匠,地道東北人戈抄。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像后专,于是被迫代替她去往敵國和親划鸽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

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