UI动图的制作

来源:互联网 发布:怎么看网络测试仪 编辑:程序博客网 时间:2024/04/28 05:05

创建一个协议文件,把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

效果如图

0 0
原创粉丝点击