iOS中一些關於動畫的總結

 

    在平時的開發過程當中,咱們爲了讓應用更絢麗,常常會加入一些動畫效果。實現iOS漂亮的動畫效果主要有兩種方法,一種是UIView層面的,一種是使用CATransition,UIview只能用於一些簡單的,經常使用的效果展示;CATransition則能夠進行更低層次的控制動畫

    1.UIView
url

    UIView的簡單動畫就能夠知足咱們的應用開發,UIView支持的動畫屬性包括:frame,center,bounds,transfrom,alpha,backgroundcolor等spa

    2.CATransition
orm

    若是是將控制器內的子視圖轉場到另外一個子視圖,就將動畫加入到視圖控制器的圖層
對象

    要令一個轉場生效,要將動畫添加到將要變爲動畫視圖所附着的圖層。例如在兩個視圖控制器之間進行轉場,那就將動畫添加到窗口的圖層中。
事務

動畫類型ip

    1.全局變量形式
ci

        kCATransitionFade 交叉淡化過分
開發

        kCATransitionMoveIn 新視圖移動到舊視圖上
字符串

        kCATransitionPush 新視圖把舊視圖推出去

        kCATransitionReveal 將舊視圖移開,顯示下面的新視圖

    2.字符串表示

        fade 交叉淡化過渡

        moveIn 新視圖移動到舊視圖上

        push 新視圖把舊視圖推出去

        reveal 將舊視圖移開,顯示下面的新視圖

        pageCurl 向上翻一頁

        pageUnCurl 向下翻一頁

        rippleEffect 滴水效果

        suckEffect  收縮效果,如一塊布被抽走

        cube 立方體效果

        oglFlip 上下翻轉效果

動畫的速度/節奏

        kCAMediaTimingFunctionLinear 線性(勻速)

        kCAMediaTimingFunctionEaseIn 先慢

        kCAMediaTimingFunctionEaseOut後慢

        kCAMediaTimingFunctionEaseInEaseOut先慢 後慢 中間快

        kCAMediaTimingFunctionDefault默認

動畫對象

        隱式動畫&顯示動畫

    //生成一個layer

        self.layer = [CALayer layer];

        self.layer.backgroundColor = [UIColor blueColor].CGColor;

        //設置layer的中心點座標

        self.layer.position = CGPointMake(100100);

        self.layer.bounds = CGRectMake(00100100);

        //設置圓角

        self.layer.cornerRadius = 50;

        

        //layer添加到viewlayer

        [self.view.layer addSublayer:self.layer];

    

     //CATransaction 事務

        [CATransaction begin];

    //修改隱式動畫的默認時間

    [CATransaction setValue:[NSNumber numberWithFloat:10.0fforKey:kCATransactionAnimationDuration];

    //經過修改屬性而產生的動畫,叫作隱式動畫

        self.layer.position = CGPointMake(300200);

        

        //

        [CATransaction commit];


    顯示動畫

     //CATransaction 事務

        [CATransaction begin];

        

        //關閉隱士動畫效果

         [CATransaction setDisableActions:YES];

    

        //實例化一個CABasicAnimation

        CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];

        //fromValue 從那個地方開始

        basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(100100)];

        //toValue 結束的位置

        basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(300200)];

        //duration 指定持續時間

        basicAnimation.duration = 2;

    

        //經過addAnimation顯示添加的指定的動畫,顯式動畫

        [self.layer addAnimation:basicAnimation forKey:@"base"];

        self.layer.position = CGPointMake(300200);

        //

        [CATransaction commit];


    基本動畫

    //@"opacity" 修改透明度

        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];

        //透明度變換到0

        animation.toValue = [NSNumber numberWithFloat:0.0f];

        animation.duration = 2;

        animation.repeatCount = 1;

        [_myView.layer addAnimation:animation forKey:nil];


    動畫組

        //旋轉的動畫

        CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

        //變換到那個值

        rotationAnimation.toValue = [NSNumber numberWithFloat:(4 * M_PI)];

        //週期

        rotationAnimation.duration = 0.35f;

        //節奏

        rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

        

        //比例動畫

        CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

        //比例變換哪一個值

        scaleAnimation.toValue = [NSNumber numberWithFloat:0.0];//比例變換到0縮小到0

        scaleAnimation.duration = 0.35f;

        scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

        

        //動畫組

        CAAnimationGroup *animationGroup = [CAAnimationGroup animation];

        //設置動畫時間

        animationGroup.duration = 0.35f;

        //動畫結束後,自動從新開始

        animationGroup.autoreverses = YES;

        //重複次數

        animationGroup.repeatCount = 2;

        //把兩個動畫同時加到動畫組中

        animationGroup.animations =[NSArray arrayWithObjects:rotationAnimation, scaleAnimation, nil];

        //增長動畫  _myView動畫組

        //若是要同時增長兩個動畫 先放到動畫組中

        [_myView.layer addAnimation:animationGroup forKey:@"animationGroup"];

相關文章
相關標籤/搜索