zoukankan      html  css  js  c++  java
  • CAAnimation动画--(旋转/缩放/移动/闪烁)

    //

    //  ViewController.m

    //  animation

    //

    //  Created by xueshan on 16/12/15.

    //  Copyright © 2016 xueshan. All rights reserved.

    //

     

    #import "ViewController.h"

    #define kDegreesToRadian(x) (M_PI * (x) / 180.0)

     

    #define kRadianToDegrees(radian) (radian*180.0)/(M_PI)

     

    @interface ViewController ()

    {

        UILabel *myTest1;

    }

    @end

     

    @implementation ViewController

     

     

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        self.title = @"测试动画";

        self.view.backgroundColor = [UIColor lightGrayColor];

        

        

        myTest1 = [[UILabel alloc]initWithFrame:CGRectMake(150, 100, 100, 100)];

        myTest1.backgroundColor = [UIColor blueColor];

        myTest1.textAlignment = NSTextAlignmentCenter;

        myTest1.text = @"张明炜";

        myTest1.textColor = [UIColor whiteColor];

        [self.view addSubview:myTest1];

        

        //闪烁效果。

        //    [myTest1.layer addAnimation:[self opacityForever_Animation:0.5] forKey:nil];

        ///移动的动画。

        //    [myTest1.layer addAnimation:[self moveX:1.0f X:[NSNumber numberWithFloat:200.0f]] forKey:nil];

        //缩放效果。

        //    [myTest1.layer addAnimation:[self scale:[NSNumber numberWithFloat:1.0f] orgin:[NSNumber numberWithFloat:3.0f] durTimes:2.0f Rep:MAXFLOAT] forKey:nil];

        //组合动画。

        //    NSArray *myArray = [NSArray arrayWithObjects:[self opacityForever_Animation:0.5],[self moveX:1.0f X:[NSNumber numberWithFloat:200.0f]],[self scale:[NSNumber numberWithFloat:1.0f] orgin:[NSNumber numberWithFloat:3.0f] durTimes:2.0f Rep:MAXFLOAT], nil];

        //    [myTest1.layer addAnimation:[self groupAnimation:myArray durTimes:3.0f Rep:MAXFLOAT] forKey:nil];

        //路径动画。

        //    CGMutablePathRef myPah = CGPathCreateMutable();

        //    CGPathMoveToPoint(myPah, nil,30, 77);

        //    CGPathAddCurveToPoint(myPah, nil, 50, 50, 60, 200, 200, 200);//这里的是控制点。

        //    [myTest1.layer addAnimation:[self keyframeAnimation:myPah durTimes:5 Rep:MAXFLOAT] forKey:nil];

        //旋转动画。

        [myTest1.layer addAnimation:[self rotation:1 degree:kRadianToDegrees(360) direction:1 repeatCount:MAXFLOAT] forKey:nil];

        

        

    }

     

    #pragma mark === 永久闪烁的动画 ======

    -(CABasicAnimation *)opacityForever_Animation:(float)time

    {

        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];//必须写opacity才行。

        animation.fromValue = [NSNumber numberWithFloat:1.0f];

        animation.toValue = [NSNumber numberWithFloat:0.0f];//这是透明度。

        animation.autoreverses = YES;

        animation.duration = time;

        animation.repeatCount = MAXFLOAT;

        animation.removedOnCompletion = NO;

        animation.fillMode = kCAFillModeForwards;

        animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];///没有的话是均匀的动画。

        return animation;

    }

     

    #pragma mark =====横向、纵向移动===========

    -(CABasicAnimation *)moveX:(float)time X:(NSNumber *)x

    {

        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];///.y的话就向下移动。

        animation.toValue = x;

        animation.duration = time;

        animation.removedOnCompletion = NO;//yes的话,又返回原位置了。

        animation.repeatCount = MAXFLOAT;

        animation.fillMode = kCAFillModeForwards;

        return animation;

    }

     

    #pragma mark =====缩放-=============

    -(CABasicAnimation *)scale:(NSNumber *)Multiple orgin:(NSNumber *)orginMultiple durTimes:(float)time Rep:(float)repertTimes

    {

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

        animation.fromValue = Multiple;

        animation.toValue = orginMultiple;

        animation.autoreverses = YES;

        animation.repeatCount = repertTimes;

        animation.duration = time;//不设置时候的话,有一个默认的缩放时间.

        animation.removedOnCompletion = NO;

        animation.fillMode = kCAFillModeForwards;

        return  animation;

    }

     

    #pragma mark =====组合动画-=============

    -(CAAnimationGroup *)groupAnimation:(NSArray *)animationAry durTimes:(float)time Rep:(float)repeatTimes

    {

        CAAnimationGroup *animation = [CAAnimationGroup animation];

        animation.animations = animationAry;

        animation.duration = time;

        animation.removedOnCompletion = NO;

        animation.repeatCount = repeatTimes;

        animation.fillMode = kCAFillModeForwards;

        return animation;

    }

     

    #pragma mark =====路径动画-=============

    -(CAKeyframeAnimation *)keyframeAnimation:(CGMutablePathRef)path durTimes:(float)time Rep:(float)repeatTimes

    {

        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

        animation.path = path;

        animation.removedOnCompletion = NO;

        animation.fillMode = kCAFillModeForwards;

        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

        animation.autoreverses = NO;

        animation.duration = time;

        animation.repeatCount = repeatTimes;

        return animation;

    }

     

    #pragma mark ====旋转动画======

    -(CABasicAnimation *)rotation:(float)dur degree:(float)degree direction:(int)direction repeatCount:(int)repeatCount

    {

        CATransform3D rotationTransform = CATransform3DMakeRotation(degree, 0, 0, direction);

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

        animation.toValue = [NSValue valueWithCATransform3D:rotationTransform];

        animation.duration  =  dur;

        animation.autoreverses = NO;

        animation.cumulative = YES;

        animation.fillMode = kCAFillModeForwards;

        animation.repeatCount = 100;

        animation.delegate = self;

        

        return animation;

        

        

        

        //以下两行同时设置才能保持移动后的位置状态不变

        

        //rotationAnimation.fillMode=kCAFillModeForwards;

        //rotationAnimation.removedOnCompletion = NO;

    }

     

     

    //图片旋转

    + (UIImageView *)rotate360DegreeWithImageView:(UIImageView *)imageView{

        CABasicAnimation *animation = [ CABasicAnimation

                                       animationWithKeyPath: @"transform" ];

        animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];

        

        //围绕Z轴旋转,垂直与屏幕

        animation.toValue = [ NSValue valueWithCATransform3D:

                             

                             CATransform3DMakeRotation(M_PI, 0.0, 0.0, 1.0) ];

        animation.duration = 0.5;

        //旋转效果累计,先转180度,接着再旋转180度,从而实现360旋转

        animation.cumulative = YES;

        animation.repeatCount = 1000;

        

        //在图片边缘添加一个像素的透明区域,去图片锯齿

        CGRect imageRrect = CGRectMake(0, 0,imageView.frame.size.width, imageView.frame.size.height);

        UIGraphicsBeginImageContext(imageRrect.size);

        [imageView.image drawInRect:CGRectMake(1,1,imageView.frame.size.width-2,imageView.frame.size.height-2)];

        imageView.image = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        

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

        return imageView;

    }

     

    //animation.repeatCount = 1000;

    //这个你要想一直旋转,设置一个无穷大就得了

    //

    //停止的话直接这样就停止了

    //[self.view.layer removeAllAnimates];

     

     

     

     

     

     

     

     

     

     

     

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

  • 相关阅读:
    Power BI 根据用户权限动态生成导航跳转目标
    Power BI Tooltips 增强功能
    Power BI refresh error “could not load file or assembly…provided impersonation level is invalid”
    SQL 错误代码 18456
    如何使用SQL Server Integration Services从多个Excel文件读取数据
    通过表格编辑器将现有表引入Power BI数据流
    Power BI 中动态增长的柱状图
    ambari2.7.3离线安装hdp3.1.0时,ambari-hdp-1.repo中baseurl无值
    ambari 安装 cannot download file mysql-connector-java from http://8080/resource/mysql-connector-java.jar
    洛谷P4180 [BJWC2010]严格次小生成树
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6184664.html
Copyright © 2011-2022 走看看