UI动图的制作

创建一个协议文件,把screen的width,height用宏定义

ifndef UI_05_02_PrefixHeader_pch

define UI_05_02_PrefixHeader_pch

define Screen_Width [[UIScreen mainScreen] bounds].size.width

define Screen_Height [[UIScreen mainScreen] bounds].size.height

endif

接着在ViewController.m文件中的interface.h声明如下对象的属性

import “ViewController.h”

@interface ViewController ()
{
UIView *animationView;

UIView *layerView;

int CATransactionCount;


UIView *keyframeView;


CALayer *CATransactionLayer;

}
@end

然后初始化animationView对象

@implementation ViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    animationView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 80, 80)];
    animationView.backgroundColor = [UIColor redColor];
    [self.view addSubview:animationView];

    //layer那点事,layer相当于图片的图层
    // CALayer *layer1 = [CALayer layer];
    // layer1.frame = CGRectMake(0, 0, 40, 40);
    // layer1.backgroundColor = [UIColor yellowColor].CGColor;
    // [animationView.layer addSublayer:layer1];
    // 接着初始化layerView

//让layer本身做动画
layerView = [[UIView alloc] initWithFrame:CGRectMake(Screen_Width/2-100, Screen_Height/2-100, 200, 200)];
[self.view addSubview:layerView];

//导入图片”1”

UIImage *image = [UIImage imageNamed:@"1"];
layerView.layer.contents = (__bridge id)(image.CGImage);
layerView.layer.contentsGravity = kCAGravityResizeAspect;
layerView.layer.contentsScale = image.scale;
CATransactionCount = 0;
//关于核心动画编程,就是给layer的属性做动画
//设置三个按钮
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"做动画" forState:0];
button.frame = CGRectMake(Screen_Width-80, 20, 60, 30);
[self.view addSubview:button];

button = [UIButton buttonWithType:UIButtonTypeSystem];
[button addTarget:self action:@selector(CATransactionbuttonAction:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"做动画" forState:0];
button.frame = CGRectMake(Screen_Width-80, 80, 60, 30);
[self.view addSubview:button];

button = [UIButton buttonWithType:UIButtonTypeSystem];
[button addTarget:self action:@selector(keyframeAnimation:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"做动画" forState:0];
button.frame = CGRectMake(Screen_Width-80, 130, 60, 30);
[self.view addSubview:button];

//初始化keyframeView,不过后面那个调用是什么意思?
keyframeView = [[UIView alloc] initWithFrame:CGRectMake(100, 120, 60, 30)];
keyframeView.backgroundColor = [UIColor clearColor];
keyframeView.layer.borderColor = [UIColor grayColor].CGColor;
keyframeView.layer.borderWidth = 1.0;
[self.view insertSubview:keyframeView aboveSubview:button];
//创建一个按钮,关联的方法为CATransactionLayerAnimation
button = [UIButton buttonWithType:UIButtonTypeSystem];
[button addTarget:self action:@selector(CATransactionLayerAnimation:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@”做动画” forState:0];
button.frame = CGRectMake(Screen_Width-80, 180, 60, 30);
[self.view addSubview:button];

//初始化CATransactionLayer

CATransactionLayer = [CALayer layer];
CATransactionLayer.frame = CGRectMake(100, 100, 50, 50);
CATransactionLayer.backgroundColor = [UIColor yellowColor].CGColor;
[self.view.layer addSublayer:CATransactionLayer];
}

//下面是按钮方法的实现

-(void)buttonAction:(UIButton *)sender{
/*

// CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@”opacity”];
// fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
// fadeAnim.toValue = [NSNumber numberWithFloat:0.0];
// fadeAnim.duration = 1.0;
// [animationView.layer addAnimation:fadeAnim forKey:@”opacity”];

CGMutablePathRef thePath = CGPathCreateMutable();
CGPathMoveToPoint(thePath,NULL,74.0,74.0);
CGPathAddCurveToPoint(thePath,NULL,74.0,500.0,
                      320.0,500.0,
                      320.0,74.0);
CGPathAddCurveToPoint(thePath,NULL,320.0,500.0,
                      566.0,500.0,
                      566.0,74.0);

CAKeyframeAnimation * theAnimation;

// Create the animation object, specifying the position property as the key path.
theAnimation=[CAKeyframeAnimation animationWithKeyPath:@"position"];
theAnimation.path=thePath;
theAnimation.duration=5.0;

// Add the animation to the layer.
[animationView.layer addAnimation:theAnimation forKey:@"position"];
 */
/*
    transform
    transform.rotation
    transform.translation
    transform.scale
 */
//旋转
/*
CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotation.fromValue = @0;
rotation.toValue = @(M_PI/2);
rotation.duration = 1.f;
rotation.repeatCount = FLT_MAX;
rotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[animationView.layer addAnimation:rotation forKey:@"vincent"];
*/

CABasicAnimation *xRotation = [CABasicAnimation animationWithKeyPath:@”transform”];
xRotation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
xRotation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 1)];
xRotation.duration = 1.f;
xRotation.repeatCount = FLT_MAX;
xRotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[animationView.layer addAnimation:xRotation forKey:@”vincent”];}

//改变大白的形态
-(void)CATransactionbuttonAction:(UIButton *)sender{

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(changeDabai:) userInfo:nil repeats:YES];}

//实现大白跳的速度的改变

-(void)changeDabai:(NSTimer *)sender{
UIImage *image = [UIImage imageNamed:@”1”];
CGRect rect = CGRectZero;
if (CATransactionCount > 5) {
CATransactionCount = 0;
}
switch (CATransactionCount) {
case 0:
{
rect = CGRectMake(0, 0, 1, 0.75);
}
break;
case 1:
{
rect = CGRectMake(0, 0, 1, 0.5);
}
break;
case 2:
{
rect = CGRectMake(0, 0.25, 1, 0.5);
}
break;
case 3:
{
rect = CGRectMake(0, 0.25, 1, 0.5);
}
break;
case 4:
{
rect = CGRectMake(0, 0.5, 1, 1);
}
break;
case 5:
{
rect = CGRectMake(0, 0.25, 1, 1);
}
break;

    default:
        break;
}

CATransactionCount++;

layerView.layer.contents = (__bridge id)image.CGImage;
layerView.layer.contentsCenter = rect;

}

-(void)keyframeAnimation:(UIButton *)sender{
CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animationWithKeyPath:@”transform.scale.y”];
keyAnimation.values = @[@0,@-10,@10,@-10,@0];
// keyAnimation.path
keyAnimation.duration = 0.4;
keyAnimation.additive = YES;
[keyframeView.layer addAnimation:keyAnimation forKey:@”shake”];
}

-(void)CATransactionLayerAnimation:(UIButton *)sender{
[CATransaction begin];
//设置动画时间
[CATransaction setValue:@1.0f forKey:kCATransactionAnimationDuration];
//改变layer位置
CGFloat pointY = CATransactionLayer.position.y> 250 ? 125:425;
CATransactionLayer.position = CGPointMake(CATransactionLayer.position.x, pointY);

[CATransaction commit];

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    这里写图片描述
    @end

效果如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值