本文只为记录,自学 CAAnaimation 中正在学习中...

#import "ViewController.h"


@interface ViewController ()

{

    /**

     *  angle     :旋转的弧度需要转换成角度

     *  rotation_X:Y轴方向旋转。

     *  rotation_Y:Y轴方向旋转。

     *  rotation_Z:Z轴方向旋转。

     */

    float angle;

    float rotation_X;

    float rotation_Y;

    float rotation_Z;

    BOOL isBoundary;

    

    CALayer *layer;

    CATransform3D Trans3D;

    dispatch_source_t _timer;

}


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    

//    IOS--CALayer实现,界限、透明度、位置、旋转、缩放组合动画(转)

//    http://www.cocoachina.com/bbs/read.php?tid=124506

    

//    iOS开发基础知识:Core Animation(核心动画)

//    http://www.jianshu.com/p/8c1c1697c0ce  本工程参考网址

    

//    非常清楚的CATransform3D 讲解

//    http://blog.sina.com.cn/s/blog_51a995b70101mz3q.html 参考网址

    

    

//    .

//    CATransform3D CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz)

//    txX轴偏移位置,往下为正数。

//    tyY轴偏移位置,往右为正数。

//    tzZ轴偏移位置,往外为正数。

    

    

//    .

//    CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);

//    t:就是上一个函数。其他的都一样。

//    就可以理解为:函数的叠加,效果的叠加。

    

    

//    .

//    CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);

//    sxX轴缩放,代表一个缩放比例,一般都是 0 --- 1之间的数字。

//    syY轴缩放。

//    sz:整体比例变换时,也就是m11sx== m22sy)时,若m33sz>1,图形整体缩小,若0<1,图形整体放大,若m33sz<0,发生关于原点的对称等比变换。


    

//    .

//    CATransform3D   CATransform3DMakeRotation(190*M_PI/180.0, 0, 0, 0);

//    旋转效果。

//    angle:旋转的弧度,所以要把角度转换成弧度:角度 * M_PI / 180

//    x:向X轴方向旋转。值范围-1 --- 1之间

//    y:向Y轴方向旋转。值范围-1 --- 1之间

//    z:向Z轴方向旋转。值范围-1 --- 1之间

    

    isBoundary = YES;

    [selfBasicAnimation2];

    NSTimeInterval period = .10; //设置时间间隔

    

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    

     _timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0, 0, queue);

    

    dispatch_source_set_timer(_timer,dispatch_walltime(NULL,0), period *NSEC_PER_SEC,0); //每秒执行

    

    dispatch_source_set_event_handler(_timer, ^{

        //在这里执行事件

        if (-1.0<=rotation_X<=1.0||0.0<=angle<=360.0) {

            if (isBoundary) {

                rotation_X+=.1;

                rotation_Y+=.1;

                rotation_Z+=.1;

                angle+=36;

            }

        }else{

            isBoundary = NO;

            rotation_X-=.1;

            rotation_Y-=.1;

            rotation_Z-=.1;

            angle-=36;

            if (rotation_X==-1||angle==0) {

                isBoundary= YES;

            }

        }

        

        dispatch_async(dispatch_get_main_queue(), ^{

            Trans3D =CATransform3DMakeRotation(angle*M_PI/180.0,rotation_X, rotation_Y,rotation_Z);

            layer.transform       =Trans3D;

        });

    });

    

    dispatch_resume(_timer);

}


- (void)BasicAnimation2{

//    CATransform3D Trans3D = CATransform3DMakeScale(1, 1, 1);

    

    //创建一个CALayer

    layer        = [CALayerlayer];

    

    //设置背景颜色类型为CGColorRef

    layer.backgroundColor = [UIColorblueColor].CGColor;

    

    //设置中心点

    layer.position        =self.view.center;

    

    layer.transform       =Trans3D;

    

    //设置大小

    layer.bounds          =CGRectMake(0,0, 100, 100);

    

    //添加到self.viewlayer

    [self.view.layeraddSublayer:layer];

    

    //创建一个基本动画

    CABasicAnimation *basic = [CABasicAnimationanimation];

    

    //动画时间

    basic.duration = 2.0;

    

    //重复次数

    basic.repeatCount = MAXFLOAT;

    

    //通过指定CALayer的一个属性名称为keyPathNSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@“position”keyPath,就修改CALayerposition属性的值,以达到平移的动画效果

    //keyPath内容是CALayer的可动画Animatable属性

    basic.keyPath  =@"transform.scale";

    

    //keyPath相应属性的初始值

    basic.fromValue = @1;

    

    //keyPath相应属性的结束值

    basic.toValue  = @1;

    

    //layer 添加一个基础动画

//    [layer addAnimation:basic forKey:nil];

    

    //创建一个CABasicAnimation对象 (改变颜色动画)

    CABasicAnimation *animation=[CABasicAnimationanimation];

    

    //设置颜色

    animation.toValue=(id)[UIColorredColor].CGColor;

    

    //动画时间

    animation.duration=1;

    

    //重复次数

    animation.repeatCount = MAXFLOAT;

    

    //是否反转变为原来的属性值

    animation.autoreverses=NO;

    

    //animation添加到图层的layer中,便可以播放动画了。forKey指定要应用此动画的属性

    [layer addAnimation:animationforKey:@"backgroundColor"];

}



- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end





http://www.jianshu.com/p/88ab3415a3fe  这个写的比较好大家可以移步到这里查看





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值