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"];

相关文章
相关标签/搜索