前幾篇博客詳細介紹了有關UIView層的動畫使用與相關的效果,然而這些動畫是UIKit爲咱們封裝好的核心動畫層的方法,經過這些方法,咱們能夠用的更加簡便,固然功能也十分強大,基本能達到咱們項目的大多需求。可是若是你想更加自由的經過動畫操做視圖的屬性,你就須要跳過UIKit的封裝,使用CoreAnimation核心動畫層的方法來實現動畫。編程
在開始介紹核心動畫的內容前,咱們須要先搞明白一個東西:Layer。你可能不多據說他,但是他卻無處不在,在iOS的UI開發中,任何一個View包括繼承於UIView的子類上面都會有一個Layer,能夠理解爲Layer爲單獨的一層,專門負責視圖的顯示,而view除此以外更多負責觸摸時間等邏輯處理。所以,iOS也將全部動畫的操做都交給你Layer來負責。數組
Layer如此神祕,那他究竟能夠作到哪些事?他確實能夠作不少view作不了的事情.動畫
view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:view]; view.backgroundColor=[UIColor redColor]; view.layer.masksToBounds=YES;//設置layer層的切割屬性 view.layer.cornerRadius=10;//設置layer層的圓角半徑
效果以下:spa
view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:view]; view.backgroundColor=[UIColor redColor]; CALayer *layer=view.layer; layer.borderWidth=10;//設置邊框的寬度 layer.borderColor=[[UIColor magentaColor]CGColor];//設置邊框的顏色
注意:由於CoreAnimation層是UI層的底層,因此這裏的顏色爲CGColor對象。code
效果以下:對象
view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:view]; view.backgroundColor=[UIColor redColor]; CALayer *layer=view.layer; layer.shadowOffset=CGSizeMake(30, 30);//設置陰影方向 layer.shadowColor=[[UIColor blackColor] CGColor];//設置陰影顏色 layer.shadowOpacity=0.5;//設置陰影透明度 layer.shadowRadius=10;//設置陰影圓角
效果以下:繼承
這樣的立體效果是否已經很酷了?NO,在加上動畫纔對。ci
CABasicAnimation是核心動畫中對屬性操做須要用到了一個動畫類,示例以下:開發
CALayer *layer=view.layer; CABasicAnimation * ani= [CABasicAnimation animationWithKeyPath:@"opacity"];//建立對象,參數關鍵字爲layer的屬性 ani.duration=3;//設置執行時間 ani.repeatCount=1;//設置執行次數 ani.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];//設置線性效果 [layer addAnimation:ani forKey:@"test"];//添加動畫 layer.opacity=0;//透明度改變時執行動畫動做
經過上面的示例,咱們能夠發現,layer的屬性均可以來進行動畫動做,這樣,咱們對動畫的操做就自由的不少。animation
關鍵幀動畫除了動畫改變layer的屬性外,能夠設置幾個關鍵幀點,經過這些點,能夠實現路徑更加負責的動畫,例如:
CALayer *layer=view.layer; CAKeyframeAnimation * ani = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];//建立一個關鍵幀動畫對象 ani.duration=3; ani.values=@[@1,@0,@1];//傳入三個關鍵幀,動畫會將試圖先慢慢隱藏,再慢慢展示 [layer addAnimation:ani forKey:@"test"];
類好比上代碼,咱們還能夠經過關鍵幀讓試圖按照咱們預約的路線移動,同時咱們還能夠設置兩個數組,分別爲keyTimes和timingFunctions。這兩個數組中的值能夠設置動畫每一段的運動線性特徵和每一段的運動時間比例。
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592