核心动画02——CABasicAnimation(基本动画)
一、简介
CABasicAnimation(基本动画),是 CAPropertyAnimation 的子类
属性说明:
fromValue:keyPath相应属性的初始值
toValue: keyPath相应属性的结束值
动画过程说明:
随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue
keyPath内容是CALayer的可动画Animatable属性
如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。
创建动画有两个方法可以使用
/* Creates a new animation object. */
+ (instancetype)animation;
/* Creates a new animation object with its `keyPath' property set to
* 'path'. */
+ (instancetype)animationWithKeyPath:(nullable NSString *)path;
二、位移动画小例子
2.1 代码
//
// ViewController.m
// 03_UIView68_CABasecAnimation
//
// Created by 杞文明 on 17/6/13.
// Copyright © 2017年 杞文明. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *redView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//1.创建动画对象
CABasicAnimation * anim = [CABasicAnimation animation];
//2.设置属性值
anim.keyPath = @"position.x";
anim.toValue = @300;
//动画完成时会自动删除动画
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeForwards;
//3.添加动画
[self.redView.layer addAnimation:anim forKey:nil];
}
@end
2.2 图示
三、心跳效果小例子
3.1 代码
//
// ViewController.m
// 03_UIView69_心跳效果
//
// Created by 杞文明 on 17/6/14.
// Copyright © 2017年 杞文明. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *heartView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// [self mode1Anima];
[self mode2Anima];
}
//使用类方法 animation
-(void)mode1Anima{
//创建动画对象
CABasicAnimation *anim = [CABasicAnimation animation];
//设置属性值
anim.keyPath = @"transform.scale";
anim.toValue = @0;
//次数
anim.repeatCount = MAXFLOAT;
//时长
anim.duration = 2;
//自动反转(怎么样去 怎么样回来)
anim.autoreverses = YES;
[self.heartView.layer addAnimation:anim forKey:nil];
}
//使用类方法 CABasicAnimation animationWithKeyPath:
-(void)mode2Anima{
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
anim.toValue = @0;
anim.repeatCount = MAXFLOAT;
anim.duration = 2;
anim.autoreverses = YES;
[self.heartView.layer addAnimation:anim forKey:nil];
}
@end