你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 動畫-IOS開發

動畫-IOS開發

編輯:IOS開發綜合

IOS中的動畫右兩大類1.UIView的視圖動畫2.Layer的動畫 UIView的動畫也是基於Layer的動畫
動畫的代碼格式都很固定

1.UIView動畫

一般方式
[UIView beginAnimations:@"ddd" context:nil];//設置動畫
[UIView commitAnimations]; //提交動畫
這兩個是必須有的,然後在兩句的中間添加動畫的代碼

[UIView beginAnimations:@"ddd" context:nil];//設置動畫 ddd為動畫名稱
[UIView setAnimationDuration:3];//定義動畫持續時間
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //setAnimationCurve來定義動畫加速或減速方式
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.window cache:YES];
//設置動畫的樣式  forView為哪個view實現這個動畫效果
[UIView setAnimationDelay:3]; //設置動畫延遲多久執行
[UIView setAnimationDelegate:self];  //設置動畫的代理 實現動畫執行前後的方法 在commitAnimation之前設置
[UIView setAnimationDidStopSelector:@selector(stop)];//設置動畫結束後執行的方法
[UIView setAnimationWillStartSelector:@selector(star)];//設置動畫將要開始執行的方法
[UIView commitAnimations]; //提交動畫
typedef enum {
        UIViewAnimationTransitionNone,  //普通狀態
        UIViewAnimationTransitionFlipFromLeft,  //從左往右翻轉
        UIViewAnimationTransitionFlipFromRight,  //從右往左翻轉
        UIViewAnimationTransitionCurlUp, //向上翻頁
        UIViewAnimationTransitionCurlDown, //向下翻頁
    } UIViewAnimationTransition;
typedef enum {
        UIViewAnimationCurveEaseInOut,        
        UIViewAnimationCurveEaseIn,           
        UIViewAnimationCurveEaseOut,          
        UIViewAnimationCurveLinear
    } UIViewAnimationCurve;

[UIView beginAnimations:@"ddd" context:nil]; //設置動畫
view.frame = CGRectMake(200, 200, 100, 100);
[UIView commitAnimations]; //提交動畫
當view從本來的frame移動到新的frame時會慢慢漸變 而不是一下就完成了 中間也可以添加到上面那段中間 只是多種效果重疊

以下這些也可以加到  [UIView beginAnimations:@"ddd" context:nil]; [UIView commitAnimations];之間

view.transform = CGAffineTransformMakeTranslation(10, 10);//設置偏移量 相對於最初的 只能偏移一次
view.transform = CGAffineTransformTranslate(view.transform, 10, 10); //設置偏移量 偏移多次

self.view.transform = CGAffineTransformMakeRotation(M_PI);//設置旋轉度 只能旋轉一次
self.view.transform = CGAffineTransformRotate(self.view.transform, M_PI); //旋轉多次

self.view.transform = CGAffineTransformMakeScale(1.1, 1.1); //設置大小 只能改變一次 數值時相對於本來的幾倍
self.view.transform = CGAffineTransformScale(self.view.transform, 1.1, 1.1);//改變多次

self.view.transform = CGAffineTransformIdentity;//回到當初的樣子 執行一次
self.view.transform = CGAffineTransformInvert(self.view.transform);//得到相反的樣子 大小 方向 位置執行多次

Block方式
[UIView animateWithDuration:3 animations:^(void){
           
      //這裡相當於在begin和commint之間
    }completion:^(BOOL finished){
         //這裡相當於動畫執行完成後要執行的方法,可以繼續嵌套block
    }];

2.CAAnimation
需要添加庫,和包含頭文件


caanimation有多個子類

CABasicAnimation

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
//@""裡的字符串有多種,可以自己找相關資料,一定要填對,動畫才會執行 opacity設置透明度 bounds.size設置大小
[animation setFromValue:[NSNumber numberWithFloat:1.0]]; //設置透明度從幾開始
[animation setToValue:[NSNumber numberWithFloat:0.3]];//設置透明度到幾結束
[animation setDuration:0.1]; //設置動畫時間
[animation setRepeatCount:100000];//設置重復時間
[animation setRepeatDuration:4];  //會限制重復次數
[animation setAutoreverses:NO];//設置是否從1.0到0.3 再從0.3到1.0 為一次  如果設置為NO則 1.0到0.3為一次
[animation setRemovedOnCompletion:YES]; //完成時移出動畫 默認也是
[view.layer addAnimation:animation forKey:@"abc"];//執行動畫

CAKeyframeAnimation

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];//設置view從初始位置經過一系列點
NSArray *postionAraay = [NSArray arrayWithObjects:[NSValue valueWithCGPoint:CGPointMake(100, 20)], [NSValue valueWithCGPoint:CGPointMake(40, 80)],[NSValue valueWithCGPoint:CGPointMake(30, 60)],[NSValue valueWithCGPoint:CGPointMake(20, 40)],[NSValue valueWithCGPoint:CGPointMake(0, 100)],nil];//設置點
   
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.3],[NSNumber numberWithFloat:0.5],[NSNumber numberWithFloat:0.6],[NSNumber numberWithFloat:0.1],[NSNumber numberWithFloat:1.0], nil];  //設置移動過程的時間

[animation setKeyTimes:times];
[animation setValues:postionAraay];
[animation setDuration:5]; //設置動畫時間
[bigImage.layer addAnimation:animation forKey:@"dd"]; //執行動畫

CATransition

CATransition *animation = [CATransition animation];
animation.duration = 0.5f;
animation.timingFunction = UIViewAnimationCurveEaseInOut;
animation.fillMode = kCAFillModeForwards;
    /*
     kCATransitionFade;
     kCATransitionMoveIn;
     kCATransitionPush;
     kCATransitionReveal;
     */
    /*
     kCATransitionFromRight;
     kCATransitionFromLeft;
     kCATransitionFromTop;
     kCATransitionFromBottom;
     */
animation.type = kCATransitionPush;
animation.subtype = kCATransitionFromBottom;
[view.layer addAnimation:animation forKey:animation];
type也可以直接用字符串
/*
     cube
     suckEffect 卷走
     oglFlip    翻轉
     rippleEffect  水波
     pageCurl   翻頁
     pageUnCurl
     cameraIrisHollowOpen
     cameraIrisHollowClose
*/

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved