IOS動畫講解

來源:互聯網
上載者:User

標籤:

CAMediaTiming是一個協議(protocol),CAAnimation是所有動畫類的父類,但是它不能直接使用,應該使用它的子類。

繼承關係:

       CoreAnmiation 核心動畫 簡寫CA                                                                                                         CoreAnimation 中文翻譯為核心動畫,它是一組非常強大的動畫處理API,使用它能做出非常炫麗的動畫效果,而且往往是事半功倍。也就是說,使用少量的代碼就可以實現非常強大的功能

我們之前使用過的UIView動畫,其實本質上也是CoreAnimation實現的,只是對他裡面的動畫進行了封裝

 視圖(UIView)支援動畫的屬性有 frame  bounds center alpha transform 以及動畫延遲  動畫曲線( 淡入淡出 動畫過渡) 重複次數

方法: 

**********************************************************************

 + (void)setAnimationDelegate:(id)delegate;代理

 + (void)setAnimationWillStartSelector:(SEL)selector   當動畫即將開始時,執行delegate對象的selector,並且把beginAnimations:context:中傳入的參數傳進selector

 + (void)setAnimationDidStopSelector:(SEL)selector  當動畫結束時,執行delegate對象的selector,並且把beginAnimations:context:中傳入的參數傳進selector

 + (void)setAnimationDuration:(NSTimeInterval)duration   動畫的期間,秒為單位

 + (void)setAnimationDelay:(NSTimeInterval)delay  動畫延遲delay秒後再開始

 + (void)setAnimationStartDate:(NSDate *)startDate   動畫的開始時間,預設為now

 + (void)setAnimationCurve:(UIViewAnimationCurve)curve  動畫的節奏控制

 + (void)setAnimationRepeatCount:(float)repeatCount  動畫的重複次數

 + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses  如果設定為YES,代表動畫每次重複執行的效果會跟上一次相反

 + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache  設定視圖view的過渡效果, transition指定過渡類型, cache設定YES代表使用視圖緩衝,效能較好 */

**********************************************************************

 但CAAnimation是所有動畫類的父類,但是它不能直接使用,應該使用它的子類。CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup(CAPropertyAnimation也不能直接使用,需要使用它的兩個子類)

說明以上所有的方法和它的屬性,子類都可以使用。

使用案例:

 1 -(void)viewanimation1{ 2  3    /** 4      *  動畫方向 5      * 6      UIViewAnimationTransitionNone, 7      UIViewAnimationTransitionFlipFromLeft,從左翻轉 8      UIViewAnimationTransitionFlipFromRight,從右面翻轉 9      UIViewAnimationTransitionCurlUp,向上翻頁10      UIViewAnimationTransitionCurlDown,向下翻頁11      */12 13  /**14      *  過渡狀態15      *16      UIViewAnimationCurveEaseInOut,慢進慢出      // slow at beginning and end17      UIViewAnimationCurveEaseIn,慢進            // slow at beginning18      UIViewAnimationCurveEaseOut,  慢出         // slow at end19      UIViewAnimationCurveLinear 勻速20      */21 //*********************************************************************22 //   注意: 執行一個動畫 必須有一個開始動畫 和提交動畫 才能運行一個動畫23     24 //    UIView的過渡動畫·······25 //        開始動畫26     [UIView beginAnimations:@"jk" context:nil];27 28 //    設定動畫的方向29     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:imageView cache:YES];30 31 //    設定動畫期間32     [UIView setAnimationDuration:5];33 34 //    設定動畫效果過渡的狀態35     [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];36     37 //    提交動畫38     [UIView commitAnimations];39 40 //    檢測 動畫結束41     [UIView setAnimationDelegate:self];42 43 //    動畫快要結束時,調用另一個方法44     [UIView setAnimationDidStopSelector:@selector(finishanimation)];45 }

 

CAPropertyAnimation屬性動畫                                                                                                 、

       CALayer和UIView的關係

  •  在UIView中有一個layer屬性作為圖層,根圖層沒有隱式動畫 根圖層上可以放其他子圖層,在UIView中所有能夠看到的內容都包含在layer中
  • Core Animation是直接作用在CALayer上的,並非UIView。
  •  CAlayer負責視圖中顯示的內容和動畫
  •  UIView負責監聽和響應事件
  •  由於CALayer在設計之初就考慮它的動畫操作功能,CALayer很多屬性在修改時都能形成動畫效果,這種屬性稱為“隱式動畫屬性”。

           CALayer在修改他的屬性時都能形成動畫效果  這種動畫效果  叫做隱式動畫。

/**

     *    屬性                 說明                是否支援隱式動畫   

     anchorPoint       錨點、錨點  錨點的描述是相對於 *自己* x、y位置比例而言的 預設在映像中心點(0.5,0.5)的位置  決定圖層的哪一個點 顯示在中心點的位置         是  

     backgroundColor    圖層背景顏色              是

     borderColor     邊框顏色         是 

     borderWidth         邊框寬度     是        

     bounds         圖層大小           是

     contents         圖層顯示內容,例如可以將圖片作為圖層內容顯示   是

     contentsRect       圖層顯示內容的大小和位置           是

     cornerRadius        圓角半徑                  是

     doubleSided        圖層背面是否顯示,預設為YES              否

     frame           圖層大小和位置,不支援隱式動畫,所以CALayer中很少使用frame,通常使用bounds和position代替                     否

     hidden     是否隱藏                     是

     mask     圖層蒙版                   是

     maskToBounds          子圖層是否剪下圖層邊界,預設為NO             是

     opacity            透明度 ,類似於UIView的alpha             是

     position         決定圖層在父視圖的位置 圖層位於 *父視圖* 中心點位置,類似於UIView的center   是

     shadowColor         陰影顏色                   是

     shadowOffset       陰影位移               是

     shadowOpacity     陰影透明度,注意預設為0,如果設定陰影必須設定此屬性 是

     shadowPath          陰影的形狀                           是

     shadowRadius       陰影模糊半徑               是

     sublayers             子圖層  是                                 

     sublayerTransform         子圖層形變         是

     transform  圖層形變                  是

     *  @  以上支援隱式動畫的屬性 本質是這些屬性的變動預設隱含了CABasicAnimation動畫實現

1.CABasicAnimation的使用:                                                                                    

 1 #pragma mark-------------------改變position-------------------- 2 -(void)animation1{ 3      4 //  ***************初始化***************** 5 //    注意:CABasicAnimation 使用屬性動畫 需告訴它 我們要改變的屬性 是哪個(把屬性當做字串傳遞)這裡很重要,字串不         能有錯 6     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 7      8 //  ***************初始化***************** 9 //    NSValue 有可以把結構體轉為id類型10 //    設定動畫要到那一個位置11     animation.toValue = [NSValue valueWithCGPoint:CGPointMake(400, showlayer.position.y)];12     animation.duration = 3;13 14 //    以動畫效果出發 以動畫效果出發回到初始位置15     animation.autoreverses = YES;16 //17 //    如果要使用 fillMode 必須要把removedOnCompletion禁用18     animation.removedOnCompletion = NO;19     20 //    以動畫效果出發 不會以動畫效果出發回到初始位置21     animation.fillMode = kCAFillModeRemoved;22 //****************************23 //    kCAFillModeForwards  不會回來了24 //    kCAFillModeBackwards 會返回來25 //    kCAFillModeBoth  不會回來了26 //    kCAFillModeRemoved  會返回來27 //****************************28     29 //    設定 慢進慢出30     animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];31 //   添加一個動畫到圖層32     [showlayer addAnimation:animation forKey:@"move ke bu xie"];33     34 }35 36 #pragma mark-------------------改變transform的z的旋轉--------------------37 -(void)animation3{38     39 //    基礎動畫師繼承於屬性動畫的 通過屬性名稱當作一個key來確定圍繞那個屬性 進行動畫40     CABasicAnimation *antimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];41     antimation.fromValue = @(-0.1);//從這位置出發42     antimation.toValue = @(0.1);//到這位置結束43     antimation.duration = 0.05;//期間44     antimation.repeatCount = 2;//重複次數45 //    是否以動畫的效果方式返回46     antimation.autoreverses = YES;47 //    給圖層添加動畫48     [showlayer addAnimation:antimation forKey:@"shake"];49   }

 

2.CAKeyframeAnimation(主要畫面格動畫)的使用:                                                         

  •   主要畫面格動畫 可以讓我們精準的控制動畫效果 它的原理是把動畫序列裡面比較關鍵的幀提取出來,設定它的動畫效果
  •  主要畫面格:  1. path屬性 執行動畫軌跡的路徑  2.value屬性 執行動畫軌跡的路徑
 1 #import "ViewController.h" 2  3 @interface ViewController () 4 { 5     CALayer *petalayer; 6 } 7 @end 8  9 @implementation ViewController10 11 - (void)viewDidLoad {12     [super viewDidLoad];13 //    背景圖14     UIImageView *iamgeView = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];15     iamgeView.image = [UIImage imageNamed:@"11"];16     [self.view addSubview:iamgeView];17     [self addflower];18 }19 20 -(void)addflower21 {22     UIImage *petal = [UIImage imageNamed:@"22"];23     petalayer = [[CALayer alloc]init];24     petalayer.bounds = CGRectMake(0, 0,petal.size.width , petal.size.height);25     petalayer.position = CGPointMake(100, 250);26     petalayer.contents = (id)petal.CGImage;27     [self.view.layer addSublayer:petalayer];28     29 }30 31 -(void)dropAanimation{32 //初始化33     CAKeyframeAnimation *drop = [CAKeyframeAnimation animationWithKeyPath:@"position"];34     drop.duration = 5;35     36 // 1.******************************************************************37 //    放入改變position的幾個點38     drop.values = @[[NSValue valueWithCGPoint:CGPointMake(50, 100)],[self getPointWithX:20 andY:200],[self getPointWithX:-20 andY:200],[self getPointWithX:100 andY:300]];39 //*********************************************************************40     41 //2.*****************也可以採用路徑的方式也可以達到效果**********************42 //    建立路徑43     CGMutablePathRef path = CGPathCreateMutable();44 //    給路徑添加一個起始點45     CGPathMoveToPoint(path, NULL, petalayer.position.x, petalayer.position.y);46 //    有起始點 可以通過起始點 到另外一個點 畫一條線47     CGPathAddLineToPoint(path, NULL, petalayer.position.x + 100, petalayer.position.y + 100);48      CGPathAddLineToPoint(path, NULL, petalayer.position.x - 100, petalayer.position.y - 30);49     // 關閉路徑50     CGPathCloseSubpath(path);51      drop.path = path;52 53     // 釋放路徑54     path = nil;55 // ********************************************************************56     57     drop.removedOnCompletion = NO;58     drop.fillMode = kCAFillModeBoth;//不返回59     [petalayer addAnimation:drop forKey:@"djg"];60     61 }62 63 - (NSValue *)getPointWithX:(CGFloat)x andY:(CGFloat)y{64     65     return [NSValue valueWithCGPoint:CGPointMake(x+petalayer.position.x , y+petalayer.position.y)];66 }67 68 69 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{70     [self dropAanimation];71 }72 73 @end
本連結來自http://www.cnblogs.com/chenhongios/p/4853970.html

IOS動畫講解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.