核心动画(关键帧动画)-转

一.简单介绍 
是CAPropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值。

属性解析: 
values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧。 
path:可以设置一个CGPathRef\CGMutablePathRef,让层跟路径移动。path只对CALayer的anchorPoint和position起作用。如果你设置了path,那么values将被忽略 
keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧。当keyTimes没有设置的时候,各个关键帧的时间是平分的。

说明: 
CABasicAnimation可看做最多只有2个关键帧的CAKeyframeAnimation。

二.代码示例

第一种方式

@interface ViewController ()

@property(nonatomic,strong) UIView *customView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _customView = [[UIView alloc] initWithFrame:CGRectMake(0,
                                                           100,
                                                           100,
                                                           100)];
    _customView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:_customView];
}

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

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //创建核心动画
    CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animation];
    //平移
    keyAnimation.keyPath = @"position";
    //告诉系统要执行什么动画
    NSValue *value1 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
    NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(200, 100)];
    NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
    NSValue *value4 = [NSValue valueWithCGPoint:CGPointMake(100, 200)];
    NSValue *value5 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
    keyAnimation.values = @[value1,value2,value3,value4,value5];
    //设置动画完毕后,不删除动画
    keyAnimation.removedOnCompletion = NO;
    //设置保持动画的最新状态
    keyAnimation.fillMode = kCAFillModeForwards;
    //设置动画执行的时间
    keyAnimation.duration = 4.0;
    //设置动画的节奏
    keyAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    //设置代理,开始-结束
    keyAnimation.delegate = self;
    //添加核心动画
    [_customView.layer addAnimation:keyAnimation forKey:nil];
}

#pragma mark Core Animation Delegate
- (void)animationDidStart:(CAAnimation *)anim{
    NSLog(@"开始动画");
}

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
    NSLog(@"结束动画");
}

@end

第二种方式(使用path)让layer在指定的路径上移动

@interface ViewController ()

@property(nonatomic,strong) UIView *customView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _customView = [[UIView alloc] initWithFrame:CGRectMake(0,
                                                           100,
                                                           100,
                                                           100)];
    _customView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:_customView];
}

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

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //创建核心动画
    CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animation];
    keyAnimation.keyPath = @"position";
    //告诉系统要执行什么动画
    //创建一条路径
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddEllipseInRect(path, NULL, CGRectMake(150, 100, 100, 100));
    keyAnimation.path = path;

    //有create就一定要有release
    CGPathRelease(path);

    //设置动画执行完毕后,不删除动画
    keyAnimation.removedOnCompletion = NO;
    //设置保存动画的最新状态
    keyAnimation.fillMode = kCAFillModeForwards;
    //设置动画执行的时间
    keyAnimation.duration = 5.0;
    //设置动画的节奏
    keyAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    //设置代理,开始-结束
    keyAnimation.delegate = self;
    //添加核心动画
    [_customView.layer addAnimation:keyAnimation forKey:nil];
}

#pragma mark Core Animation Delegate
- (void)animationDidStart:(CAAnimation *)anim{
    NSLog(@"开始动画");
}

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
    NSLog(@"结束动画");
}

@end

说明:可以通过path属性,让layer在指定的路径上运动。 
停止动画:

//添加核心动画
[self.customView.layer addAnimation:keyAnima forKey:@"wendingding"];
//停止self.customView.layer上名称标示为wendingding的动画
[self.customView.layer removeAnimationForKey:@"wendingding"];

三.图标抖动

#import "ViewController.h"

#define angle2Radian(angle)  ((angle)/180.0*M_PI)

@interface ViewController ()

@property(nonatomic,strong) UIImageView *iconView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _iconView = [[UIImageView alloc] initWithFrame:CGRectMake(160,
                                                              150,
                                                              100,
                                                              100)];
    _iconView.image = [UIImage imageNamed:@"logo_100.jpg"];
    [self.view addSubview:_iconView];
}

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

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //创建核心动画
    CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animation];
    keyAnimation.keyPath = @"transform.rotation";
    //设置动画时间
    keyAnimation.duration = 0.1;
    //把度数转换为弧度  度数/180*M_PI
    keyAnimation.values = @[@(-angle2Radian(4)),@(angle2Radian(4)),@(-angle2Radian(4))];
    //设置动画的重复次数(设置为最大值)
    keyAnimation.repeatCount = MAXFLOAT;

    keyAnimation.fillMode = kCAFillModeForwards;
    keyAnimation.removedOnCompletion = NO;
    //添加动画
    [self.iconView.layer addAnimation:keyAnimation
                               forKey:nil];
}
@end

原文地址:https://www.cnblogs.com/jiuyi/p/10105120.html

时间: 2024-08-28 23:30:53

核心动画(关键帧动画)-转的相关文章

iOS开发UI篇—核心动画(关键帧动画)

iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 属性解析: values:就是上述的NSArray对象.里面的元素称为”关键帧”(keyframe).动画对象会在指定的时间(duration)内,依次显示values数组

核心动画(关键帧动画)

核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 属性解析: values:就是上述的NSArray对象.里面的元素称为”关键帧”(keyframe).动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧

iOS开发UI篇—核心动画(关键帧动画)(转摘)

iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 属性解析: values:就是上述的NSArray对象.里面的元素称为”关键帧”(keyframe).动画对象会在指定的时间(duration)内,依次显示values数组

iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果

先说下基本动画部分 基本动画部分比较简单, 但能实现的动画效果也很局限 使用方法大致为: #1. 创建原始UI或者画面 #2. 创建CABasicAnimation实例, 并设置keypart/duration/fromValue/toValue #3. 设置动画最终停留的位置 #4. 将配置好的动画添加到layer层中 举个例子, 比如实现一个圆形从上往下移动, 上代码: 1 //设置原始画面 2 UIView *showView = [[UIView alloc] initWithFrame

动画: 线性动画, 关键帧动画

线性动画 - ColorAnimation, DoubleAnimation, PointAnimation 关键帧动画 - ColorAnimationUsingKeyFrames, DoubleAnimationUsingKeyFrames, PointAnimationUsingKeyFrames, ObjectAnimationUsingKeyFrames 示例1.演示线性动画的应用Animation/LinearAnimation.xaml <Page x:Class="Wind

iOS:核心动画之关键帧动画CAKeyframeAnimation

CAKeyframeAnimation——关键帧动画 关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: –CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 – 属性说明: –values:上述的NSArray对象.里面的元素称为“关键帧”(keyframe).动画对象会在指定的时间(duration)内,依次显

核心动画基础动画(CABasicAnimation)关键帧动画

1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATransition) 2.CAAnimation:核心动画的基础类,不能直接使用,负责动画运行时间,速度的控制,本身实现了CAMediaTiming协议 3.CAPropertyAnimation:属性动画也是基类(通过属性进行动画设置,注意是动画属性),不能直接使用. CABasicAnimation:

缓动函数与关键帧动画

缓动函数与关键帧动画 缓动函数指定动画效果在执行时的速度,使其看起来更加真实. 现实物体照着一定节奏移动,并不是一开始就移动很快的.当我们打开抽屉时,首先会让它加速,然后慢下来.当某个东西往下掉时,首先是越掉越快,撞到地上后回弹,最终才又碰触地板. http://easings.net/zh-cn 缓动函数能让动画效果看起来更加真实:). iOS开发中,能用到缓动函数的地方就属于关键帧动画了,以下是我用关键帧动画做出来的模拟真实时钟效果的动画,效果相当逼真哦,只是这个gif图片的效果不好而已.

iOS开发——动画编程OC篇&amp;(三)关键帧动画

一.简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的 区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而 CAKeyframeAnimation会使用一个NSArray保存这些数值 属性解析: values:就是上述的NSArray对象.里面的元素称为”关键帧”(keyframe).动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧 path:可以设置一