iOS 动画测试

老牛浏览 334评论 0发表于

ios 动画测试代码,多种动画效果。

//  ViewController.m
//  AnimationDemo
//
//  Created by ilaoniu on 15-9-11.
//  Copyright (c) 2015年 ilaoniu. 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 *_testLabel;

}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.title = @" 测试动画 " ;

    self.view.backgroundColor = [UIColor lightGrayColor];

    _testLabel = [[UILabel alloc]initWithFrame:CGRectMake ( 100, 100, 60, 40)];

    _testLabel.backgroundColor = [UIColor blueColor];

    _testLabel.textAlignment = NSTextAlignmentCenter;

    _testLabel.text = @"ilaoniu";

    _testLabel.textColor = [UIColor whiteColor];

    [self.view addSubview:_testLabel];

    // 闪烁效果。

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

    /// 移动的动画。

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

    // 缩放效果。

    //    [_testLabel.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];

     //   [_testLabel.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);// 这里的是控制点。

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

    // 旋转动画。

    // [ _testLabel.layer addAnimation:[ self rotation : 2 degree : kRadianToDegrees ( 90 ) 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 = NO ;

    animation. fillMode = kCAFillModeForwards ;

    animation. repeatCount = repeatCount;

    animation. delegate = self ;

    return animation;

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于