iOS核心动画-属性动画

作者: 七月上 | 来源:发表于2016-04-11 14:35 被阅读834次

属性动画 CAPropertyAnimation 基类 不能直接使用
子类:
1.CABasicAnimation 基础动画
2.CAKeyframeAnimation 关键帧动画

通过改变图层或者视图上面的属性值(支持动画的属性)产生的动画
属性动画的常用方法属性
1.初始化

+ (instancetype)animationWithKeyPath:(nullable NSString *)path

path:需要产生动画的属性 如:中心点 -> 移动
2.KeyPath 描述 动画的属性

可以通过改变animationWithKeyPath来改变动画的属性:
改变动画的属性:

 transform.scale = 比例转换
 transform.scale.x
 transform.scale.y
 transform.rotation.z
 opacity   透明度
 zPosition
 backgroundColor 背景颜色
 cornerRadius 拐角
 borderWidth  边框的宽度
 bounds
 contents     内容
 contentsRect
 frame
 hidden
 masksToBounds
 opacity
 position
 shadowColor
 shadowOffset
 shadowOpacity
 shadowRadius

基础动画 CABasicAnimation
介绍:通过改变某个属性的值 到某个值 只能设置两个值 产生的动画
fromValue 开始值 如果不设置不会返回到初始位置
toValue 结束值
byValue 通过哪个值

心跳效果.gif


#import "ViewController.h"

@interface ViewController ()

//背景
@property(nonatomic,strong)CALayer *layer;
//花瓣
@property(nonatomic,strong)CALayer *petalLayer;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    [self.view.layer addSublayer:self.layer];
//    [self.view.layer addSublayer:self.petalLayer];
    
}

-(CALayer *)layer{

    if (_layer) {
        return _layer;
    }
    _layer = [CALayer layer];
    _layer.position= CGPointMake(self.view.center.x, self.view.center.y+100);
    UIImage *image = [UIImage imageNamed:@"4"];
    _layer.bounds = CGRectMake(0, 0, image.size.width/2, image.size.height/2);
    _layer.contents = (id)image.CGImage;
    return _layer;
}
-(CALayer *)petalLayer{
    
    if (_petalLayer) {
        return _petalLayer;
    }
    _petalLayer = [CALayer layer];
    _petalLayer.position= CGPointMake(self.view.center.x, 50);
    UIImage *image = [UIImage imageNamed:@"2"];
    _petalLayer.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
    _petalLayer.contents = (id)image.CGImage;
    return _petalLayer;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//    [self demo1:[[touches anyObject] locationInView:self.view]];
    [self demo2];
}

//移动中心点
-(void)demo1:(CGPoint)toValue{

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
    //CGPoint -> 转id类型
    //CGPoint -> NSValue
    animation.fromValue = [NSValue valueWithCGPoint:self.petalLayer.position];
    //动画的持续时间
    animation.duration = 3;
    //动画执行的总时间 受动画速度的影响
//    animation.speed = 2;
    //设置动画完成的时候  固定在完成的状态
    //这个属性必须把removedOnCompletion 设置为NO 这个属性 才可以有效果
    animation.removedOnCompletion = NO;
    animation.toValue = [NSValue valueWithCGPoint:toValue];
    animation.fillMode = kCAFillModeBoth;
    //timingFunction可以控制动画的速度
    //快进慢出
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    //layer上添加动画效果 addAnimation: forKey:
    //forKey 表示动画的字符串 可以通过key 来找到这个动画
    [self.petalLayer addAnimation:animation forKey:@"可以通过这个key,找到此动画"];
    //查找某个key对应的动画
//    CABasicAnimation *an = (CABasicAnimation *)[self.petalLayer animationForKey:@"可以通过这个key,找到此动画"];
    
}
//心跳
-(void)demo2{
    self.view.backgroundColor = [UIColor whiteColor];
    UIImage *image = [UIImage imageNamed:@"心跳"];
    self.layer.contents = (id)image.CGImage;//为了方便,直接更换self.layer内容
    self.layer.bounds = CGRectMake(0, 0, image.size.width/10, image.size.height/10);
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"];
    /*
       目标
     1.放大后还原到原来的位置 以动画的方法
     2.先慢后快
     3.一直循环
     */
    animation.fromValue = [NSValue valueWithCGRect:self.layer.bounds];
    animation.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, image.size.width/5, image.size.height/5)];
    animation.repeatCount = HUGE;//无限循环
    animation.duration = 0.5;
    animation.autoreverses = YES;//以动画的效果返回到开始的状态
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    [self.layer addAnimation:animation forKey:@"heartJamp"];
}

花瓣飘落,心跳的效果

Demo:https://github.com/AmazingWow/CAPropertyAnimation--DEMO

相关文章

  • iOS让push跳转动画像modal跳转动画那样效果

    iOS让push跳转动画像modal跳转动画那样效果(从下往上推上来),iOS核心动画有很多,转场啊,属性动画,基...

  • iOS核心动画高级技巧 - 8

    iOS核心动画高级技巧 - 1iOS核心动画高级技巧 - 2iOS核心动画高级技巧 - 3iOS核心动画高级技巧 ...

  • iOS动画

    iOS动画有隐式和显示之分。隐式动画指的是,无须创建动画对象,只需改变动画层的属性,让核心动画自己去完成动画效果,...

  • iOS视频学习教程分享

    音视频 iOS核心动画技术:完美的iOS转场动画 iOS核心动画技巧:完美的iOS高级转场动画(2) iOS高级音...

  • iOS核心动画-属性动画

    属性动画 CAPropertyAnimation 基类 不能直接使用子类:1.CABasicAnimation ...

  • iOS动画总结(收集)

    iOS动画 1.iOS动画专题·UIView二维形变动画与CAAnimation核心动画 2.iOS动画总结(Co...

  • IOS 核心动画CoreAniamation总结

    iOS 核心动画是基于CALayer层的动画,UIView动画是系统对核心动画的封装,核心动画相对UIView来说...

  • iOS篇-UI篇-CoreAnimation(核心动画)

    iOS篇-UI篇-CoreAnimation(核心动画) iOS篇-UI篇-CoreAnimation(核心动画)

  • iOS基础 - 核心动画(转)

    iOS基础 - 核心动画 一、核心动画 l核心动画基本概念 l基本动画 l关键帧动画 l动画组 l转场动画 lCo...

  • iOS动画篇:自定义View

    引言 在iOS动画篇:核心动画中讲到如何给一个视图添加动画效果,但是其仅局限在系统控件的具有动画效果的属性。假设现...

网友评论

本文标题:iOS核心动画-属性动画

本文链接:https://www.haomeiwen.com/subject/pdcilttx.html