objective-c 动画 花瓣飘落

//

//  ViewController.m

//  花瓣飘落

//



#import "ViewController.h"


@interface ViewController ()

{

    CALayer *_layer;//创建一个图层

}


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    //设置背景

    UIImage *backgroundImage = [UIImage imageNamed:@"background"];

    self.view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];

    

    //自定义一个图层(花瓣)

    _layer = [[CALayer alloc]init];

    _layer.bounds = CGRectMake(0, 0, 16, 30);

    _layer.position = CGPointMake(50, 200);

    _layer.contents = (id)[UIImage imageNamed:@"petal"].CGImage;

    [self.view.layer addSublayer:_layer];

    //执行动画

    [self keyFrameAnimation];

}



#pragma mark 关键帧动画

- (void)keyFrameAnimation

{

    //1.创建关键帧动画

    CAKeyframeAnimation *keyframeAni = [CAKeyframeAnimation animationWithKeyPath:@"position"];

    

    //2.设置关键帧

    //绘制贝塞尔曲线

    CGMutablePathRef path = CGPathCreateMutable();

    CGPathMoveToPoint(path, NULL, _layer.position.x, _layer.position.y);//路径移动到起点

    CGPathAddCurveToPoint(path, NULL, 160, 280, -30, 300, 50, 400);//绘制2次贝塞尔曲线

    keyframeAni.path = path;//设置动画沿路径进行

    

    //设置一些其它的属性

    keyframeAni.duration = 10.0;

    keyframeAni.beginTime = CACurrentMediaTime() + 2;//设置延迟2秒执行

    keyframeAni.autoreverses = YES;

    keyframeAni.repeatCount = HUGE_VALF;

    //添加动画到图层

    [_layer addAnimation:keyframeAni forKey:@"keyFrameAnimation"];

}



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

//{

//    //获取点击位置

//    UITouch *touch = [touches anyObject];

//    CGPoint location = [touch locationInView:self.view];

//    

//    //1.创建动画并指定动画属性

//    CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];

//    //2.设置动画属性初始值和结束值

//    //初始值可以不设置,默认图层初始位置

//    basicAnimation.toValue = [NSValue valueWithCGPoint:location];

//    //3.设置其他动画属性

//    basicAnimation.duration = 5.0;//动画时间

//    basicAnimation.repeatCount = 1;//循环次数

//    basicAnimation.delegate = self;

//    //记录鼠标点击位置,在动画结束后使用

//    [basicAnimation setValue:[NSValue valueWithCGPoint:location] forKey:@"animationLocation"];

//    

//    //4.添加动画。注意key相当于给动画命名,以后可以使用此名称获取该动画

//    [_layer addAnimation:basicAnimation forKey:@"basicAnimation"];

//}

//

//#pragma mark 动画代理方法

//#pragma mark 动画结束

//-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag

//{

//    //开启动画事务

//    [CATransaction begin];

//    //禁用隐式动画

//    [CATransaction setDisableActions:YES];

//    _layer.position = [[anim valueForKey:@"animationLocation"] CGPointValue];

//    //递交动画事务

//    [CATransaction commit];

//}




@end


转载于:https://my.oschina.net/u/2483781/blog/551249

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值