iOS 實現簡單的加載等待動畫(思路與實現)

先看下最后基本要實現的效果
加載動畫.gif
總結一下自己的實現思路與所用到的類

1.這個肯定是要自定義的View類,起名為XDColorCircle吧文虏,最后用的時候達到這樣的效果

//創(chuàng)建XDColorCircle的實例化對象
 XDColorCircle *circle=[[XDColorCircle alloc]initWithFrame:CGRectMake(0  ,100,self.view.frame.size.width,200)];
//添加到視圖上展示
 [self.view addSubview:circle];

2.然后就是在XDColorCircle里面代碼思路

  • 需要先有一個漸變的圖層(漸變由白到靛)且圖層需只顯示一個圓圈形狀
  • 漸變圖層用CAGradientLayer這個類繪制
  • 為這個CAGradientLayer的mask賦值一個圓圈的圖層讓它只展示一個圓圈CAShapeLayer
  • 為CAGradientLayer圖層添加基礎動畫就用CABasicAnimation來實現圖層的旋轉
  • 中間需要一個大Label但肯定這個Label不能繪制在這個CAGradientLayer所在的圖層之上了节视,因這個圖層設置mask了 怎么繪制都顯示個圈 ╮( ̄▽ ̄"")╭
  • 所以最后確定了圈圈應該在另創(chuàng)建一個View上繪制然后與中間的Label一同做為XDColorCircle的子視圖

3.思路捋順代碼就很方便

//先都寫在這個構造方法里面吧
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
    }
    return self;
}

創(chuàng)建圈圈所在的View

        self.backgroundColor=[UIColor clearColor];
        UIView *circleView=[[UIView alloc]init];
        circleView.frame=CGRectMake(0, 0,frame.size.width,frame.size.height);
        circleView.backgroundColor=[UIColor blueColor];
        [self addSubview: circleView];

創(chuàng)建漸變圖層并添加到圈圈視圖

       CAGradientLayer * gradientLayer = [CAGradientLayer layer];
        gradientLayer.colors = @[(__bridge id)[UIColor whiteColor].CGColor,(__bridge id)[UIColor cyanColor].CGColor];
        gradientLayer.locations = @[@0.2,@1.0];
        gradientLayer.startPoint = CGPointMake(0, 0);
        gradientLayer.endPoint = CGPointMake(1.0, 0);
        gradientLayer.frame =CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
        [circleView.layer insertSublayer:_gradientLayer atIndex:0];

添加mask屬性只讓圖層只顯示一個圈圈

        CAShapeLayer *layer=[[CAShapeLayer alloc]init];
        CGMutablePathRef pathRef=CGPathCreateMutable();
        CGPathAddRelativeArc(pathRef, nil,frame.size.width/2.0,frame.size.height/2.0,frame.size.width<frame.size.height?frame.size.width/2.0-5:frame.size.height/2.0-5,0, 2*M_PI);
        layer.path=pathRef;
        layer.lineWidth=5;
        layer.fillColor=[UIColor clearColor].CGColor;
        layer.strokeColor=[UIColor blackColor].CGColor;
        CGPathRelease(pathRef);
        circleView.layer.mask=layer;

讓圈圈轉起來添加動畫

        CABasicAnimation *animation=[CABasicAnimation         animationWithKeyPath:@"transform.rotation.z"];  ;
        // 設定動畫選項
        animation.duration = 1;
        animation.removedOnCompletion = NO;
        animation.fillMode = kCAFillModeForwards;
        animation.repeatCount =HUGE_VALF;
        // 設定旋轉角度
        animation.fromValue = [NSNumber numberWithFloat:0.0]; // 起始角度
        animation.toValue = [NSNumber numberWithFloat:2 * M_PI]; // 終止角度
        [circleView.layer addAnimation:animation forKey:@"rotate-layer"];

添加中間的大文字Label

       UILabel *label=[[UILabel alloc]init];
        label.text=@"測試中";
        label.font=[UIFont systemFontOfSize:32];
        label.textAlignment=NSTextAlignmentCenter;
        label.frame=CGRectMake(0, 0,frame.size.width,frame.size.height);
        label.backgroundColor=[UIColor clearColor];
        [self addSubview:label];

4.然后在controller里面使用

//創(chuàng)建XDColorCircle的實例化對象
 XDColorCircle *circle=[[XDColorCircle alloc]initWithFrame:CGRectMake(0  ,100,self.view.frame.size.width,200)];
//添加到視圖上展示
 [self.view addSubview:circle];
效果圖.png

#######只是個簡單的動畫實現小例子,可以看出活用CAShapeLayer和CABasicAnimation可以做出更炫的動畫效果

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末益楼,一起剝皮案震驚了整個濱河市猾漫,隨后出現的幾起案子点晴,更是在濱河造成了極大的恐慌,老刑警劉巖悯周,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粒督,死亡現場離奇詭異,居然都是意外死亡禽翼,警方通過查閱死者的電腦和手機屠橄,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闰挡,“玉大人锐墙,你說我怎么就攤上這事〕ば铮” “怎么了溪北?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夺脾。 經常有香客問我之拨,道長,這世上最難降的妖魔是什么劳翰? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任敦锌,我火速辦了婚禮,結果婚禮上佳簸,老公的妹妹穿的比我還像新娘乙墙。我一直安慰自己,他們只是感情好生均,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布听想。 她就那樣靜靜地躺著,像睡著了一般马胧。 火紅的嫁衣襯著肌膚如雪汉买。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天佩脊,我揣著相機與錄音蛙粘,去河邊找鬼。 笑死威彰,一個胖子當著我的面吹牛出牧,可吹牛的內容都是我干的。 我是一名探鬼主播歇盼,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼舔痕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起伯复,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤慨代,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啸如,有當地人在樹林里發(fā)現了一具尸體侍匙,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年组底,在試婚紗的時候發(fā)現自己被綠了丈积。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐骇。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡债鸡,死狀恐怖,靈堂內的尸體忽然破棺而出铛纬,到底是詐尸還是另有隱情厌均,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布告唆,位于F島的核電站棺弊,受9級特大地震影響,放射性物質發(fā)生泄漏擒悬。R本人自食惡果不足惜模她,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懂牧。 院中可真熱鬧侈净,春花似錦、人聲如沸僧凤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躯保。三九已至旋膳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間途事,已是汗流浹背验懊。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尸变,地道東北人义图。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像振惰,于是被迫代替她去往敵國和親歌溉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 轉載:http://www.cnblogs.com/jingdizhiwa/p/5601240.html 1.ge...
    F麥子閱讀 1,544評論 0 1
  • 專業(yè)化是每一個復雜組織的特性⊥炊猓——Catharine R.Stimpson 到目前為止草慧,我們使用過CALayer類...
    liril閱讀 1,792評論 14 5
  • 目錄: 主要繪圖框架介紹 CALayer 繪圖 貝塞爾曲線-UIBezierPath CALayer子類 補充:i...
    Ryan___閱讀 1,673評論 1 9
  • 今天寫下這封信的沖動是因為在辦公室和其他班老師談到孩子的學習狀況時,一個老師說:“我班有兩個孩子表現不很好匙头,我向他...
    踏歌前行閱讀 430評論 0 1
  • 《金黃燦燦似圓盤蹂析,碩果累累是葵盤舔示。》 千里共嬋娟 2017.09.19 兒時不懂你电抚, 為何迎著太陽笑惕稻? 有人告訴我...
    千里共嬋娟_1b4f閱讀 382評論 0 1