动画组(花瓣)以曲线落下

/*

 

 CAAnimationGroup 动画组

 1、animations 动画的数组

 2、beginTime  启动的时间

 3、动画组设置了“持续时间(duration)”,可能会导致动画组里面的“动画持续时间”失效

 

 */

#import "ViewController.h"

 

 

@interface ViewController ()

{

    CALayer *petal;

}

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    [self addBgView];

    [self addAnimationGroup];

//    [self addPetalLayer];

 

 

 

}

 

#pragma mark - 添加背景图

- (void)addBgView {

    UIImageView *bgView = [[UIImageView alloc] initWithFrame:self.view.frame];

    bgView.image = [UIImage imageNamed:@"落叶.jpg"];

    [self.view addSubview:bgView];

    [self addPetalLayer];

}

 

#pragma mark - 添加需要动画的图片

- (void)addPetalLayer {

    

    UIImage *image = [UIImage imageNamed:@"petal.jpg"];

    petal = [[CALayer alloc] init];

    petal.position = CGPointMake(100, 200);

    petal.bounds = CGRectMake(0, 0, image.size.width, image.size.height);

    petal.contents = (id)image.CGImage;

    [self.view.layer addSublayer:petal];

    

}

 

#pragma mark - 旋转动画(属于“基础动画”)

- (CABasicAnimation *)rotationAnimation {

    CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];  // 旋转z轴

    rotation.toValue = @(M_PI_2*3);    // 旋转角度

    rotation.removedOnCompletion = NO;

    

    return rotation;

}

 

#pragma mark - 往下落的动画 

- (CAKeyframeAnimation *)dropAnimation {

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

    CGPathRef pathRef = CGPathCreateMutable();

    CGPathMoveToPoint(pathRef, NULL, petal.position.x, petal.position.y);

    //    //    CGPathAddCurveToPoint cp1x y cpx y 设置两个点 在这两个点之间画曲线

    //    x y 终止点

    CGPoint endPoint = CGPointMake(40, 500);

    CGPathAddCurveToPoint(pathRef, NULL, 160, 280, -30, 300, endPoint.x, endPoint.y);

    

    drop.path = pathRef;

    CGPathRelease(pathRef);

    return drop;

}

 

#pragma mark - 添加动画组

- (void)addAnimationGroup {

    CAAnimationGroup *animationGroup = [CAAnimationGroup animation];

    animationGroup.animations = @[[self rotationAnimation], [self dropAnimation]];

    animationGroup.duration = 10;

    // beginTime 动画开始时间

    // CACurrentMediaTime() 获得当前时间  从调用该方法开始后 10 秒开始执行

    animationGroup.beginTime = CACurrentMediaTime() + 1;

    animationGroup.removedOnCompletion = NO;

    animationGroup.fillMode = kCAFillModeBoth;

    animationGroup.repeatCount = 5;

    [petal addAnimation:animationGroup forKey:@"group"];

    

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

 

时间: 2024-11-29 03:19:41

动画组(花瓣)以曲线落下的相关文章

iOS开发——动画编程OC篇&(五)动画组

一:组动画简单说明 CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行 属性解析: animations:用来保存一组动画对象的NSArray 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间 二:分组动画代码示例 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController (

iOS:核心动画之动画组CAAnimationGroup

CAAnimationGroup——动画组 动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行 属性说明: –animations:用来保存一组动画对象的NSArray 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间 具体的实例如下: 实现功能:在创建的动画组中存入两个基本动画,一个是沿着Z轴旋转360度的动画,另一个是放大2倍的动画,这两个动画并

核心动画之CAAnimationGroup动画组和CATransition 转场动画以及UIView的转场动画

1.动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup 对象加入层后,组中所有动画对象可以同时并发运行 1.1属性说明: animations:用来保存一组动画对象的NSArray ·默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // 

Core Animation 动画的使用:关键帧动画、基础动画、动画组

效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController 4 @property (strong, nonatomic) IBOutlet UIImageView *imgVAnimation; 5 @property (strong, nonatomic) IBOutlet UIButton *btnAnimation1; 6 @property (str

CAKeyframeAnimation——关键帧动画和动画组~

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

【笔试】10、一球从100米高度自由落下,求相关数据

/** * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? * 时间:2015年7月28日15:34:18 * 文件:Lianxi10.java * 作者:cutter_point */ package bishi.zuixin50.t2015728; public class Lianxi10 { //这个是一个等比数列 public static double getAn(double begin, doubl

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

/** * 一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? * */ public class Test2 { public static void main(String[] args) { double num = 100, sum = 0; for (int i = 0; i < 10; i++) { sum += num*2; num /= 2; } sum -= 100; System.out.println(

IOS开发核心动画六:动画组

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *redView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typic

问题:一球从某高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?

import java.util.Scanner; //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? public class BallTest { public static void main(String[] args) { double firsthight; int n; Scanner in = new Scanner (System.in);//从键盘读取两个数据 System.out.println