属性动画

属性动画的常用方法属性

 属性动画:通过改变图层绘制视图上面的属性值(支持动画的属性)产生的动画。

 1、初始化

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

 path:需要产生动画的属性

 例如:改变中心点会移动

 2keyPath->描述动画的属性

可以产生动画的属性:

 transform.scale = 比例转换

 transform.scale.x

 transform.scale.y

 transform.rotation.z

 opacity = 透明度

 zPosition

 backgroundColor 背景颜色

 cornerRadius 拐角

 borderWidth 边框的宽度

 bounds

 contents 内容

 contentsRect

 cornerRadius

 frame

 hidden

 masksToBounds

 opacity

 position

 shadowColor

 shadowOffset

 shadowOpacity

 shadowRadius

 

 基础动画

 CABasicAnimation:基础动画

 介绍:通过改变某个属性的值到某一个值->只能设置两个值

 frameValue:开始值,如果不设置不会返回到初始位置

 toValue:结束值

 byValue:通过哪个值

 

 CAAnimation:核心动画,是所有动画的父类

 1CAMediaTiming媒体时间类协议,核心动画关于时间类的控制,是遵守了CAMediaTiming中的协议内容

  1.beginTime 动画开始的时间默认为0

  2.duration:动画持续时间,默认为0,持续时间受速度的影响,实际动画完成时间 =持续时间/速度

  3.speed动画播放的速度默认为1速度设置成0可以暂停动画 speed2 duration60

 动画真正播放完成的时间 30

  4.timeOffset

 动画播放时间的偏移量

  5.repeatCount动画的循环次数

 默认是0只播放一次

  6.repeatDuration

 动画循环的持续时间

 只能设置其中的一个属性

 repeatCount/repeatDuration

  7.autoreverses:是否以动画的形式返回到播放之前的状态

  8.fillMode设置当前对象在非活动时间段的状态

 要想fillMode有效需设置removedOnCompletion = NO

 kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态

 kCAFillModeBackwards 立即进入动画的初始状态并等待动画开始

 kCAFillModeBoth动画加入后开始之前 layer处于动画初始状态动画结束后layer保持动画最后的状态

 kCAFillModeRemoved 默认值动画结束后 layer会恢复到之前的状态

 

 2CAAnimation动画属性方法介绍

 1)初始化:animation

 2timingFunction速度控制类,控制动画运行节奏

 3removedOnCompletion动画完成的术后,是否移除动画效果

 4delegate

    代理方法

    timingFunction 速度控制类 控制动画运行的节奏

    初始化:functionWithName

    kCAMediaTimingFunctionLinear 匀速

    kCAMediaTimingFunctionEaseIn 慢进快出

    kCAMediaTimingFunctionEaseOut 快进慢出

    kCAMediaTimingFunctionEaseInEaseOut慢进慢出中间加速

    kCAMediaTimingFunctionDefault 默认


#import "ViewController.h"


@interface ViewController ()


//背景

@property (nonatomic,strong) CALayer *layer;


//花瓣

@property (nonatomic,strong) CALayer *petalLayer;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    self.view.backgroundColor = [UIColorwhiteColor];

    self.edgesForExtendedLayout =UIRectEdgeNone;

    

    

    [self.view.layeraddSublayer:self.layer];

    [self.view.layeraddSublayer:self.petalLayer];

}


- (CALayer *)petalLayer{

    if (_petalLayer) {

        return_petalLayer;

    }

    _petalLayer = [CALayerlayer];

    _petalLayer.position =CGPointMake(self.view.center.x,50);

    UIImage *image =[UIImageimageNamed:@"fly_1"];

    _petalLayer.bounds =CGRectMake(0,0, image.size.width/5, image.size.height/5);

    _petalLayer.contents = (id)image.CGImage;

    

    return_petalLayer;

}


- (CALayer *)layer{

    if (_layer) {

        return_layer;

    }

    _layer = [CALayerlayer];

    _layer.position =CGPointMake(self.view.center.x,self.view.center.y+100);

    UIImage *image =[UIImageimageNamed:@""];

    _layer.bounds =CGRectMake(0,0, image.size.width/10, image.size.height/10);

    _layer.contents = (id)image.CGImage;

    

    return_layer;

}


//移动中心点

- (void)demo1:(CGPoint)toValue{

    

    CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"position"];

    

//    CGPoint -> id

//    NSValue -> NSValue

    animation.fromValue = [NSValuevalueWithCGPoint:self.petalLayer.position];

    

    animation.toValue = [NSValuevalueWithCGPoint:toValue];

    

//    CAMdediaTiming——>duration动画的持续时间

    animation.duration =3;

    

//    动画执行的总时间受动画速度的影响

    animation.speed =2;

    

//    设置动画在完成的时候,固定在完成状态,这个属性必须把removedOnCompletion设置成NO,才会有效果

    animation.removedOnCompletion =NO;

    animation.fillMode =kCAFillModeBoth;

    

//    速度控制

//    设置成快进慢出

    animation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut];

//    layer -> addAnimation :添加动画

//    Animation:动画

//    forKey 表示动画的字符串,可以通过key来找到这个动画

    [self.petalLayeraddAnimation:animation forKey:@"可以通过这个key,找到此动画"];

    

//    查找某个key对应的动画

//   CABasicAnimation *an = [self.petalLayer animationForKey:@"可以通过这个key,找到此动画"];

    

}


/*

 - (CABasicAnimation *)moveAnimation{

 if (_moveAnimation) {

 return _moveAnimation;

 }

 _moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"];

 //    CGPoint -> id

 //    CGPoint -> NSValue

 _moveAnimation.fromValue = [NSValue valueWithCGPoint:self.petalLayer.position];

 _moveAnimation.toValue = [NSValue valueWithCGPoint:toValue];

 return _moveAnimation;

 }

 */


- (void)dome2{

  self.view.backgroundColor = [UIColorwhiteColor];

    UIImage *image = [UIImageimageNamed:@""];

    self.layer.contents = (id)image.CGImage;

    self.layer.bounds =CGRectMake(0,0,image.size.width/10, image.size.height/10);

    CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"bounds"];

    /*

     1、放大后还原到原来的位置,以动画的方法

     2、先慢后快

     3、一直循环

     */

    animation.fromValue = [NSValuevalueWithCGRect:self.layer.bounds];

    animation.toValue =  [NSValuevalueWithCGRect:CGRectMake(0,0, image.size.width/7, image.size.height/7)];

    

    animation.repeatCount =HUGE;

    animation.duration =0.5;

//    以动画的效果,还原到开始的状态

    animation.autoreverses =YES;

    

    animation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn];

    [self.view.layeraddAnimation:animation forKey:@"heartJamp"];

}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//    [self demo1:[[touches anyObject]  ]];

    [selfdome2];


}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值