请教大家一下,这种flash动画制作软件应该是用什么软件做

1261人阅读
iOS开发(59)
基础动画关键帧动画动画组转场动画逐帧动画
基础动画关键帧动画转场动画
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define WIDTH 50
@interface KCMainViewController ()
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self drawMyLayer];
#pragma mark 绘制图层
-(void)drawMyLayer{
CGSize size=[UIScreen mainScreen].bounds.
//获得根图层
CALayer *layer=[[CALayer alloc]init];
//设置背景颜色,由于QuartzCore是跨平台框架,无法直接使用UIColor
layer.backgroundColor=[UIColor colorWithRed:0 green:146/255.0 blue:1.0 alpha:1.0].CGC
//设置中心点
layer.position=CGPointMake(size.width/2, size.height/2);
//设置大小
layer.bounds=CGRectMake(0, 0, WIDTH,WIDTH);
//设置圆角,当圆角半径等于矩形的一半时看起来就是一个圆形
layer.cornerRadius=WIDTH/2;
//设置阴影
layer.shadowColor=[UIColor grayColor].CGC
layer.shadowOffset=CGSizeMake(2, 2);
layer.shadowOpacity=.9;
//设置边框
layer.borderColor=[UIColor whiteColor].CGC
layer.borderWidth=1;
//设置锚点
layer.anchorPoint=CGPointZ
[self.view.layer addSublayer:layer];
#pragma mark 点击放大
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=[touches anyObject];
CALayer *layer=self.view.layer.sublayers[0];
CGFloat width=layer.bounds.size.
if (width==WIDTH) {
width=WIDTH*4;
width=WIDTH;
layer.bounds=CGRectMake(0, 0, width, width);
layer.position=[touch locationInView:self.view];
layer.cornerRadius=width/2;
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define PHOTO_HEIGHT 150
@interface KCMainViewController ()
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//自定义图层
CALayer *layer=[[CALayer alloc]init];
layer.bounds=CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT);
layer.position=CGPointMake(160, 200);
layer.backgroundColor=[UIColor redColor].CGC
layer.cornerRadius=PHOTO_HEIGHT/2;
//注意仅仅设置圆角,对于图形而言可以正常显示,但是对于图层中绘制的图片无法正确显示
//如果想要正确显示则必须设置masksToBounds=YES,剪切子图层
layer.masksToBounds=YES;
//阴影效果无法和masksToBounds同时使用,因为masksToBounds的目的就是剪切外边框,
//而阴影效果刚好在外边框
layer.shadowColor=[UIColor grayColor].CGC
layer.shadowOffset=CGSizeMake(2, 2);
layer.shadowOpacity=1;
//设置边框
layer.borderColor=[UIColor whiteColor].CGC
layer.borderWidth=2;
//设置图层代理
layer.delegate=
//添加图层到根图层
[self.view.layer addSublayer:layer];
//调用图层setNeedDisplay,否则代理方法不会被调用
[layer setNeedsDisplay];
#pragma mark 绘制图形、图像到图层,注意参数中的ctx是图层的图形上下文,其中绘图位置也是相对图层而言的
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
NSLog(@&%@&,layer);//这个图层正是上面定义的图层
CGContextSaveGState(ctx);
//图形上下文形变,解决图片倒立的问题
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -PHOTO_HEIGHT);
UIImage *image=[UIImage imageNamed:@&photo.png&];
//注意这个位置是相对于图层而言的不是屏幕
CGContextDrawImage(ctx, CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT), image.CGImage);
CGContextFillRect(ctx, CGRectMake(0, 0, 100, 100));
CGContextDrawPath(ctx, kCGPathFillStroke);
CGContextRestoreGState(ctx);
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define PHOTO_HEIGHT 150
@interface KCMainViewController ()
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
CGPoint position= CGPointMake(160, 200);
CGRect bounds=CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT);
CGFloat cornerRadius=PHOTO_HEIGHT/2;
CGFloat borderWidth=2;
//阴影图层
CALayer *layerShadow=[[CALayer alloc]init];
layerShadow.bounds=
layerShadow.position=
layerShadow.cornerRadius=cornerR
layerShadow.shadowColor=[UIColor grayColor].CGC
layerShadow.shadowOffset=CGSizeMake(2, 1);
layerShadow.shadowOpacity=1;
layerShadow.borderColor=[UIColor whiteColor].CGC
layerShadow.borderWidth=borderW
[self.view.layer addSublayer:layerShadow];
//容器图层
CALayer *layer=[[CALayer alloc]init];
layer.bounds=
layer.position=
layer.backgroundColor=[UIColor redColor].CGC
layer.cornerRadius=cornerR
layer.masksToBounds=YES;
layer.borderColor=[UIColor whiteColor].CGC
layer.borderWidth=borderW
//设置图层代理
layer.delegate=
//添加图层到根图层
[self.view.layer addSublayer:layer];
//调用图层setNeedDisplay,否则代理方法不会被调用
[layer setNeedsDisplay];
#pragma mark 绘制图形、图像到图层,注意参数中的ctx是图层的图形上下文,其中绘图位置也是相对图层而言的
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
NSLog(@&%@&,layer);//这个图层正是上面定义的图层
CGContextSaveGState(ctx);
//图形上下文形变,解决图片倒立的问题
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -PHOTO_HEIGHT);
UIImage *image=[UIImage imageNamed:@&photo.jpg&];
//注意这个位置是相对于图层而言的不是屏幕
CGContextDrawImage(ctx, CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT), image.CGImage);
CGContextFillRect(ctx, CGRectMake(0, 0, 100, 100));
CGContextDrawPath(ctx, kCGPathFillStroke);
CGContextRestoreGState(ctx);
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define PHOTO_HEIGHT 150
@interface KCMainViewController ()
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
CGPoint position= CGPointMake(160, 200);
CGRect bounds=CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT);
CGFloat cornerRadius=PHOTO_HEIGHT/2;
CGFloat borderWidth=2;
//阴影图层
CALayer *layerShadow=[[CALayer alloc]init];
layerShadow.bounds=
layerShadow.position=
layerShadow.cornerRadius=cornerR
layerShadow.shadowColor=[UIColor grayColor].CGC
layerShadow.shadowOffset=CGSizeMake(2, 1);
layerShadow.shadowOpacity=1;
layerShadow.borderColor=[UIColor whiteColor].CGC
layerShadow.borderWidth=borderW
[self.view.layer addSublayer:layerShadow];
//容器图层
CALayer *layer=[[CALayer alloc]init];
layer.bounds=
layer.position=
layer.backgroundColor=[UIColor redColor].CGC
layer.cornerRadius=cornerR
layer.masksToBounds=YES;
layer.borderColor=[UIColor whiteColor].CGC
layer.borderWidth=borderW
//利用图层形变解决图像倒立问题
layer.transform=CATransform3DMakeRotation(M_PI, 1, 0, 0);
//设置图层代理
layer.delegate=
//添加图层到根图层
[self.view.layer addSublayer:layer];
//调用图层setNeedDisplay,否则代理方法不会被调用
[layer setNeedsDisplay];
#pragma mark 绘制图形、图像到图层,注意参数中的ctx时图层的图形上下文,其中绘图位置也是相对图层而言的
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
NSLog(@&%@&,layer);//这个图层正是上面定义的图层
UIImage *image=[UIImage imageNamed:@&photo.jpg&];
//注意这个位置是相对于图层而言的不是屏幕
CGContextDrawImage(ctx, CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT), image.CGImage);
图层内容设置
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define PHOTO_HEIGHT 150
@interface KCMainViewController ()
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
CGPoint position= CGPointMake(160, 200);
CGRect bounds=CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT);
CGFloat cornerRadius=PHOTO_HEIGHT/2;
CGFloat borderWidth=2;
//阴影图层
CALayer *layerShadow=[[CALayer alloc]init];
layerShadow.bounds=
layerShadow.position=
layerShadow.cornerRadius=cornerR
layerShadow.shadowColor=[UIColor grayColor].CGC
layerShadow.shadowOffset=CGSizeMake(2, 1);
layerShadow.shadowOpacity=1;
layerShadow.borderColor=[UIColor whiteColor].CGC
layerShadow.borderWidth=borderW
[self.view.layer addSublayer:layerShadow];
//容器图层
CALayer *layer=[[CALayer alloc]init];
layer.bounds=
layer.position=
layer.backgroundColor=[UIColor redColor].CGC
layer.cornerRadius=cornerR
layer.masksToBounds=YES;
layer.borderColor=[UIColor whiteColor].CGC
layer.borderWidth=borderW
//设置内容(注意这里一定要转换为CGImage)
UIImage *image=[UIImage imageNamed:@&photo.jpg&];
layer.contents=(id)image.CGI
[layer setContents:(id)image.CGImage];
//添加图层到根图层
[self.view.layer addSublayer:layer];
[layer setValue:@M_PI forKeyPath:@&transform.rotation.x&];
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCLayer.h&
@implementation KCLayer
-(void)drawInContext:(CGContextRef)ctx{
NSLog(@&3-drawInContext:&);
NSLog(@&CGContext:%@&,ctx);
CGContextRotateCTM(ctx, M_PI_4);
CGContextSetRGBFillColor(ctx, 135.0/255.0, 232.0/255.0, 84.0/255.0, 1);
CGContextSetRGBStrokeColor(ctx, 135.0/255.0, 232.0/255.0, 84.0/255.0, 1);
CGContextFillRect(ctx, CGRectMake(0, 0, 100, 100));
CGContextFillEllipseInRect(ctx, CGRectMake(50, 50, 100, 100));
CGContextMoveToPoint(ctx, 94.5, 33.5);
//// Star Drawing
CGContextAddLineToPoint(ctx,104.02, 47.39);
CGContextAddLineToPoint(ctx,120.18, 52.16);
CGContextAddLineToPoint(ctx,109.91, 65.51);
CGContextAddLineToPoint(ctx,110.37, 82.34);
CGContextAddLineToPoint(ctx,94.5, 76.7);
CGContextAddLineToPoint(ctx,78.63, 82.34);
CGContextAddLineToPoint(ctx,79.09, 65.51);
CGContextAddLineToPoint(ctx,68.82, 52.16);
CGContextAddLineToPoint(ctx,84.98, 47.39);
CGContextClosePath(ctx);
CGContextDrawPath(ctx, kCGPathFillStroke);
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCView.h&
#import &KCLayer.h&
@implementation KCView
-(instancetype)initWithFrame:(CGRect)frame{
NSLog(@&initWithFrame:&);
if (self=[super initWithFrame:frame]) {
KCLayer *layer=[[KCLayer alloc]init];
layer.bounds=CGRectMake(0, 0, 185, 185);
layer.position=CGPointMake(160,284);
layer.backgroundColor=[UIColor colorWithRed:0 green:146/255.0 blue:1.0 alpha:1.0].CGC
//显示图层
[layer setNeedsDisplay];
[self.layer addSublayer:layer];
-(void)drawRect:(CGRect)rect{
NSLog(@&2-drawRect:&);
NSLog(@&CGContext:%@&,UIGraphicsGetCurrentContext());//得到的当前图形上下文正是drawLayer中传递的
[super drawRect:rect];
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
NSLog(@&1-drawLayer:inContext:&);
NSLog(@&CGContext:%@&,ctx);
[super drawLayer:layer inContext:ctx];
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#import &KCView.h&
@interface KCMainViewController ()
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
KCView *view=[[KCView alloc]initWithFrame:[UIScreen mainScreen].bounds];
view.backgroundColor=[UIColor colorWithRed:249.0/255.0 green:249.0/255.0 blue:249.0/255.0 alpha:1];
[self.view addSubview:view];
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController ()
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *image=[UIImage imageNamed:@&open2.png&];
UIImageView *imageView=[[UIImageView alloc]init];
imageView.image=
imageView.frame=CGRectMake(120, 140, 80, 80);
[self.view addSubview:imageView];
//两秒后开始一个持续一分钟的动画
[UIView animateWithDuration:1 delay:2 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
imageView.frame=CGRectMake(80, 100, 160, 160);
} completion:nil];
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
CALayer *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景(注意这个图片其实在根图层)
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//自定义一个图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 10, 20);
_layer.position=CGPointMake(50, 150);
_layer.contents=(id)[UIImage imageNamed:@&petal.png&].CGI
[self.view.layer addSublayer:_layer];
#pragma mark 移动动画
-(void)translatonAnimation:(CGPoint)location{
//1.创建动画并指定动画属性
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@&position&];
//2.设置动画属性初始值和结束值
basicAnimation.fromValue=[NSNumber numberWithInteger:50];//可以不设置,默认为图层初始状态
basicAnimation.toValue=[NSValue valueWithCGPoint:location];
//设置其他动画属性
basicAnimation.duration=5.0;//动画时间5秒
//basicAnimation.repeatCount=HUGE_VALF;//设置重复次数,HUGE_VALF可看做无穷大,起到循环动画的效果
basicAnimation.removedOnCompletion=NO;//运行一次是否移除动画
//3.添加动画到图层,注意key相当于给动画进行命名,以后获得该动画时可以使用此名称获取
[_layer addAnimation:basicAnimation forKey:@&KCBasicAnimation_Translation&];
#pragma mark 点击事件
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=touches.anyO
CGPoint location= [touch locationInView:self.view];
//创建并开始动画
[self translatonAnimation:location];
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
CALayer *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景(注意这个图片其实在根图层)
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//自定义一个图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 10, 20);
_layer.position=CGPointMake(50, 150);
_layer.contents=(id)[UIImage imageNamed:@&petal.png&].CGI
[self.view.layer addSublayer:_layer];
#pragma mark 移动动画
-(void)translatonAnimation:(CGPoint)location{
//1.创建动画并指定动画属性
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@&position&];
//2.设置动画属性初始值和结束值
basicAnimation.fromValue=[NSNumber numberWithInteger:50];//可以不设置,默认为图层初始状态
basicAnimation.toValue=[NSValue valueWithCGPoint:location];
//设置其他动画属性
basicAnimation.duration=5.0;//动画时间5秒
//basicAnimation.repeatCount=HUGE_VALF;//设置重复次数,HUGE_VALF可看做无穷大,起到循环动画的效果
basicAnimation.removedOnCompletion=NO;//运行一次是否移除动画
basicAnimation.delegate=
//存储当前位置在动画结束后使用
[basicAnimation setValue:[NSValue valueWithCGPoint:location] forKey:@&KCBasicAnimationLocation&];
//3.添加动画到图层,注意key相当于给动画进行命名,以后获得该动画时可以使用此名称获取
[_layer addAnimation:basicAnimation forKey:@&KCBasicAnimation_Translation&];
#pragma mark 点击事件
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=touches.anyO
CGPoint location= [touch locationInView:self.view];
//创建并开始动画
[self translatonAnimation:location];
#pragma mark - 动画代理方法
#pragma mark 动画开始
-(void)animationDidStart:(CAAnimation *)anim{
NSLog(@&animation(%@) start.\r_layer.frame=%@&,anim,NSStringFromCGRect(_layer.frame));
NSLog(@&%@&,[_layer animationForKey:@&KCBasicAnimation_Translation&]);//通过前面的设置的key获得动画
#pragma mark 动画结束
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
NSLog(@&animation(%@) stop.\r_layer.frame=%@&,anim,NSStringFromCGRect(_layer.frame));
_layer.position=[[anim valueForKey:@&KCBasicAnimationLocation&] CGPointValue];
#pragma mark 动画结束
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
NSLog(@&animation(%@) stop.\r_layer.frame=%@&,anim,NSStringFromCGRect(_layer.frame));
//开启事务
[CATransaction begin];
//禁用隐式动画
[CATransaction setDisableActions:YES];
_layer.position=[[anim valueForKey:@&KCBasicAnimationLocation&] CGPointValue];
//提交事务
[CATransaction commit];
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
CALayer *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景(注意这个图片其实在根图层)
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//自定义一个图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 10, 20);
_layer.position=CGPointMake(50, 150);
_layer.anchorPoint=CGPointMake(0.5, 0.6);//设置锚点
_layer.contents=(id)[UIImage imageNamed:@&petal.png&].CGI
[self.view.layer addSublayer:_layer];
#pragma mark 移动动画
-(void)translatonAnimation:(CGPoint)location{
//1.创建动画并指定动画属性
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@&position&];
//2.设置动画属性初始值、结束值
basicAnimation.fromValue=[NSNumber numberWithInteger:50];//可以不设置,默认为图层初始状态
basicAnimation.toValue=[NSValue valueWithCGPoint:location];
//设置其他动画属性
basicAnimation.duration=5.0;//动画时间5秒
//basicAnimation.repeatCount=HUGE_VALF;//设置重复次数,HUGE_VALF可看做无穷大,起到循环动画的效果
basicAnimation.removedOnCompletion=NO;//运行一次是否移除动画
basicAnimation.delegate=
//存储当前位置在动画结束后使用
[basicAnimation setValue:[NSValue valueWithCGPoint:location] forKey:@&KCBasicAnimationLocation&];
//3.添加动画到图层,注意key相当于给动画进行命名,以后获得该图层时可以使用此名称获取
[_layer addAnimation:basicAnimation forKey:@&KCBasicAnimation_Translation&];
#pragma mark 旋转动画
-(void)rotationAnimation{
//1.创建动画并指定动画属性
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@&transform.rotation.z&];
//2.设置动画属性初始值、结束值
basicAnimation.fromValue=[NSNumber numberWithInt:M_PI_2];
basicAnimation.toValue=[NSNumber numberWithFloat:M_PI_2*3];
//设置其他动画属性
basicAnimation.duration=6.0;
basicAnimation.autoreverses=true;//旋转后再旋转到原来的位置
//4.添加动画到图层,注意key相当于给动画进行命名,以后获得该动画时可以使用此名称获取
[_layer addAnimation:basicAnimation forKey:@&KCBasicAnimation_Rotation&];
#pragma mark 点击事件
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=touches.anyO
CGPoint location= [touch locationInView:self.view];
//创建并开始动画
[self translatonAnimation:location];
[self rotationAnimation];
#pragma mark - 动画代理方法
#pragma mark 动画开始
-(void)animationDidStart:(CAAnimation *)anim{
NSLog(@&animation(%@) start.\r_layer.frame=%@&,anim,NSStringFromCGRect(_layer.frame));
NSLog(@&%@&,[_layer animationForKey:@&KCBasicAnimation_Translation&]);//通过前面的设置的key获得动画
#pragma mark 动画结束
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
NSLog(@&animation(%@) stop.\r_layer.frame=%@&,anim,NSStringFromCGRect(_layer.frame));
//开启事务
[CATransaction begin];
//禁用隐式动画
[CATransaction setDisableActions:YES];
_layer.position=[[anim valueForKey:@&KCBasicAnimationLocation&] CGPointValue];
//提交事务
[CATransaction commit];
KCMainViewController.m
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
CALayer *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景(注意这个图片其实在根图层)
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//自定义一个图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 10, 20);
_layer.position=CGPointMake(50, 150);
_layer.anchorPoint=CGPointMake(0.5, 0.6);//设置锚点
_layer.contents=(id)[UIImage imageNamed:@&petal.png&].CGI
[self.view.layer addSublayer:_layer];
#pragma mark 移动动画
-(void)translatonAnimation:(CGPoint)location{
//1.创建动画并指定动画属性
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@&position&];
//2.设置动画属性初始值、结束值
basicAnimation.fromValue=[NSNumber numberWithInteger:50];//可以不设置,默认为图层初始状态
basicAnimation.toValue=[NSValue valueWithCGPoint:location];
//设置其他动画属性
basicAnimation.duration=5.0;//动画时间5秒
basicAnimation.repeatCount=HUGE_VALF;//设置重复次数,HUGE_VALF可看做无穷大,起到循环动画的效果
basicAnimation.removedOnCompletion=NO;//运行一次是否移除动画
basicAnimation.delegate=
//存储当前位置在动画结束后使用
[basicAnimation setValue:[NSValue valueWithCGPoint:location] forKey:@&KCBasicAnimationLocation&];
//3.添加动画到图层,注意key相当于给动画进行命名,以后获得该图层时可以使用此名称获取
[_layer addAnimation:basicAnimation forKey:@&KCBasicAnimation_Translation&];
#pragma mark 旋转动画
-(void)rotationAnimation{
//1.创建动画并指定动画属性
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@&transform.rotation.z&];
//2.设置动画属性初始值、结束值
basicAnimation.fromValue=[NSNumber numberWithInt:M_PI_2];
basicAnimation.toValue=[NSNumber numberWithFloat:M_PI_2*3];
//设置其他动画属性
basicAnimation.duration=6.0;
basicAnimation.autoreverses=true;//旋转后在旋转到原来的位置
basicAnimation.repeatCount=HUGE_VALF;//设置无限循环
basicAnimation.removedOnCompletion=NO;
basicAnimation.delegate=
//4.添加动画到图层,注意key相当于给动画进行命名,以后获得该动画时可以使用此名称获取
[_layer addAnimation:basicAnimation forKey:@&KCBasicAnimation_Rotation&];
#pragma mark 点击事件
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=touches.anyO
CGPoint location= [touch locationInView:self.view];
//判断是否已经常见过动画,如果已经创建则不再创建动画
CAAnimation *animation= [_layer animationForKey:@&KCBasicAnimation_Translation&];
if(animation){
if (_layer.speed==0) {
[self animationResume];
[self animationPause];
//创建并开始动画
[self translatonAnimation:location];
[self rotationAnimation];
#pragma mark 动画暂停
-(void)animationPause{
//取得指定图层动画的媒体时间,后面参数用于指定子图层,这里不需要
CFTimeInterval interval=[_layer convertTime:CACurrentMediaTime() fromLayer:nil];
//设置时间偏移量,保证暂停时停留在旋转的位置
[_layer setTimeOffset:interval];
//速度设置为0,暂停动画
_layer.speed=0;
#pragma mark 动画恢复
-(void)animationResume{
//获得暂停的时间
CFTimeInterval beginTime= CACurrentMediaTime()- _layer.timeO
//设置偏移量
_layer.timeOffset=0;
//设置开始时间
_layer.beginTime=beginT
//设置动画速度,开始运动
_layer.speed=1.0;
#pragma mark - 动画代理方法
#pragma mark 动画开始
-(void)animationDidStart:(CAAnimation *)anim{
NSLog(@&animation(%@) start.\r_layer.frame=%@&,anim,NSStringFromCGRect(_layer.frame));
NSLog(@&%@&,[_layer animationForKey:@&KCBasicAnimation_Translation&]);//通过前面的设置的key获得动画
#pragma mark 动画结束
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
NSLog(@&animation(%@) stop.\r_layer.frame=%@&,anim,NSStringFromCGRect(_layer.frame));
//开启事务
[CATransaction begin];
//禁用隐式动画
[CATransaction setDisableActions:YES];
_layer.position=[[anim valueForKey:@&KCBasicAnimationLocation&] CGPointValue];
//提交事务
[CATransaction commit];
//暂停动画
[self animationPause];
通过values设置关键帧动画
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
CALayer *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景(注意这个图片其实在根图层)
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//自定义一个图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 10, 20);
_layer.position=CGPointMake(50, 150);
_layer.contents=(id)[UIImage imageNamed:@&petal.png&].CGI
[self.view.layer addSublayer:_layer];
//创建动画
[self translationAnimation];
#pragma mark 关键帧动画
-(void)translationAnimation{
//1.创建关键帧动画并设置动画属性
CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animationWithKeyPath:@&position&];
//2.设置关键帧,这里有四个关键帧
NSValue *key1=[NSValue valueWithCGPoint:_layer.position];//对于关键帧动画初始值不能省略
NSValue *key2=[NSValue valueWithCGPoint:CGPointMake(80, 220)];
NSValue *key3=[NSValue valueWithCGPoint:CGPointMake(45, 300)];
NSValue *key4=[NSValue valueWithCGPoint:CGPointMake(55, 400)];
NSArray *values=@[key1,key2,key3,key4];
keyframeAnimation.values=
//设置其他属性
keyframeAnimation.duration=8.0;
keyframeAnimation.beginTime=CACurrentMediaTime()+2;//设置延迟2秒执行
//3.添加动画到图层,添加动画后就会执行动画
[_layer addAnimation:keyframeAnimation forKey:@&KCKeyframeAnimation_Position&];
通过path设置关键帧动画
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
CALayer *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景(注意这个图片其实在根图层)
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//自定义一个图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 10, 20);
_layer.position=CGPointMake(50, 150);
_layer.contents=(id)[UIImage imageNamed:@&petal.png&].CGI
[self.view.layer addSublayer:_layer];
//创建动画
[self translationAnimation];
#pragma mark 关键帧动画
-(void)translationAnimation{
//1.创建关键帧动画并设置动画属性
CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animationWithKeyPath:@&position&];
//2.设置路径
//绘制贝塞尔曲线
CGPathRef path=CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, _layer.position.x, _layer.position.y);//移动到起始点
CGPathAddCurveToPoint(path, NULL, 160, 280, -30, 300, 55, 400);//绘制二次贝塞尔曲线
keyframeAnimation.path=//设置path属性
CGPathRelease(path);//释放路径对象
//设置其他属性
keyframeAnimation.duration=8.0;
keyframeAnimation.beginTime=CACurrentMediaTime()+5;//设置延迟2秒执行
//3.添加动画到图层,添加动画后就会执行动画
[_layer addAnimation:keyframeAnimation forKey:@&KCKeyframeAnimation_Position&];
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
CALayer *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景(注意这个图片其实在根图层)
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//自定义一个图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 10, 20);
_layer.position=CGPointMake(50, 150);
_layer.contents=(id)[UIImage imageNamed:@&petal.png&].CGI
[self.view.layer addSublayer:_layer];
//创建动画
[self groupAnimation];
#pragma mark 基础旋转动画
-(CABasicAnimation *)rotationAnimation{
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@&transform.rotation.z&];
CGFloat toValue=M_PI_2*3;
basicAnimation.toValue=[NSNumber numberWithFloat:M_PI_2*3];
basicAnimation.duration=6.0;
basicAnimation.autoreverses=true;
basicAnimation.repeatCount=HUGE_VALF;
basicAnimation.removedOnCompletion=NO;
[basicAnimation setValue:[NSNumber numberWithFloat:toValue] forKey:@&KCBasicAnimationProperty_ToValue&];
return basicA
#pragma mark 关键帧移动动画
-(CAKeyframeAnimation *)translationAnimation{
CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animationWithKeyPath:@&position&];
CGPoint endPoint= CGPointMake(55, 400);
CGPathRef path=CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, _layer.position.x, _layer.position.y);
CGPathAddCurveToPoint(path, NULL, 160, 280, -30, 300, endPoint.x, endPoint.y);
keyframeAnimation.path=
CGPathRelease(path);
[keyframeAnimation setValue:[NSValue valueWithCGPoint:endPoint] forKey:@&KCKeyframeAnimationProperty_EndPosition&];
return keyframeA
#pragma mark 创建动画组
-(void)groupAnimation{
//1.创建动画组
CAAnimationGroup *animationGroup=[CAAnimationGroup animation];
//2.设置组中的动画和其他属性
CABasicAnimation *basicAnimation=[self rotationAnimation];
CAKeyframeAnimation *keyframeAnimation=[self translationAnimation];
animationGroup.animations=@[basicAnimation,keyframeAnimation];
animationGroup.delegate=
animationGroup.duration=10.0;//设置动画时间,如果动画组中动画已经设置过动画属性则不再生效
animationGroup.beginTime=CACurrentMediaTime()+5;//延迟五秒执行
//3.给图层添加动画
[_layer addAnimation:animationGroup forKey:nil];
#pragma mark - 代理方法
#pragma mark 动画完成
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
CAAnimationGroup *animationGroup=(CAAnimationGroup *)
CABasicAnimation *basicAnimation=animationGroup.animations[0];
CAKeyframeAnimation *keyframeAnimation=animationGroup.animations[1];
CGFloat toValue=[[basicAnimation valueForKey:@&KCBasicAnimationProperty_ToValue&] floatValue];
CGPoint endPoint=[[keyframeAnimation valueForKey:@&KCKeyframeAnimationProperty_EndPosition&] CGPointValue];
[CATransaction begin];
[CATransaction setDisableActions:YES];
//设置动画最终状态
_layer.position=endP
_layer.transform=CATransform3DMakeRotation(toValue, 0, 0, 1);
[CATransaction commit];
KCMainViewController.m
TransitionAnimation
Created by Kenshin Cui on 14-3-12.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define IMAGE_COUNT 5
@interface KCMainViewController (){
UIImageView *_imageV
int _currentI
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//定义图片控件
_imageView=[[UIImageView alloc]init];
_imageView.frame=[UIScreen mainScreen].applicationF
_imageView.contentMode=UIViewContentModeScaleAspectF
_imageView.image=[UIImage imageNamed:@&0.jpg&];//默认图片
[self.view addSubview:_imageView];
//添加手势
UISwipeGestureRecognizer *leftSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)];
leftSwipeGesture.direction=UISwipeGestureRecognizerDirectionL
[self.view addGestureRecognizer:leftSwipeGesture];
UISwipeGestureRecognizer *rightSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)];
rightSwipeGesture.direction=UISwipeGestureRecognizerDirectionR
[self.view addGestureRecognizer:rightSwipeGesture];
#pragma mark 向左滑动浏览下一张图片
-(void)leftSwipe:(UISwipeGestureRecognizer *)gesture{
[self transitionAnimation:YES];
#pragma mark 向右滑动浏览上一张图片
-(void)rightSwipe:(UISwipeGestureRecognizer *)gesture{
[self transitionAnimation:NO];
#pragma mark 转场动画
-(void)transitionAnimation:(BOOL)isNext{
//1.创建转场动画对象
CATransition *transition=[[CATransition alloc]init];
//2.设置动画类型,注意对于苹果官方没公开的动画类型只能使用字符串,并没有对应的常量定义
transition.type=@&cube&;
//设置子类型
if (isNext) {
transition.subtype=kCATransitionFromR
transition.subtype=kCATransitionFromL
//设置动画时常
transition.duration=1.0f;
//3.设置转场后的新视图添加转场动画
_imageView.image=[self getImage:isNext];
[_imageView.layer addAnimation:transition forKey:@&KCTransitionAnimation&];
#pragma mark 取得当前图片
-(UIImage *)getImage:(BOOL)isNext{
if (isNext) {
_currentIndex=(_currentIndex+1)%IMAGE_COUNT;
_currentIndex=(_currentIndex-1+IMAGE_COUNT)%IMAGE_COUNT;
NSString *imageName=[NSString stringWithFormat:@&%i.jpg&,_currentIndex];
return [UIImage imageNamed:imageName];
KCMainViewController.m
DisplayLink
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define IMAGE_COUNT 10
@interface KCMainViewController (){
CALayer *_
NSMutableArray *_
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景
self.view.layer.contents=(id)[UIImage imageNamed:@&bg.png&].CGI
//创建图像显示图层
_layer=[[CALayer alloc]init];
_layer.bounds=CGRectMake(0, 0, 87, 32);
_layer.position=CGPointMake(160, 284);
[self.view.layer addSublayer:_layer];
//由于鱼的图片在循环中会不断创建,而10张鱼的照片相对都很小
//与其在循环中不断创建UIImage不如直接将10张图片缓存起来
_images=[NSMutableArray array];
for (int i=0; i&10; ++i) {
NSString *imageName=[NSString stringWithFormat:@&fish%i.png&,i];
UIImage *image=[UIImage imageNamed:imageName];
[_images addObject:image];
//定义时钟对象
CADisplayLink *displayLink=[CADisplayLink displayLinkWithTarget:self selector:@selector(step)];
//添加时钟对象到主运行循环
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
#pragma mark 每次屏幕刷新就会执行一次此方法(每秒接近60次)
-(void)step{
//定义一个变量记录执行次数
static int s=0;
//每秒执行6次
if (++s%10==0) {
UIImage *image=_images[_index];
_layer.contents=(id)image.CGI//更新图片
_index=(_index+1)%IMAGE_COUNT;
UIView实现基础动画
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
UIImageView *_imageV
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//创建图像显示控件
_imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@&petal.png&]];
_imageView.center=CGPointMake(50, 150);
[self.view addSubview:_imageView];
#pragma mark 点击事件
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=touches.anyO
CGPoint location= [touch locationInView:self.view];
//方法1:block方式
/*开始动画,UIView的动画方法执行完后动画会停留在重点位置,而不需要进行任何特殊处理
duration:执行时间
delay:延迟时间
options:动画设置,例如自动恢复、匀速运动等
completion:动画完成回调方法
[UIView animateWithDuration:5.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
_imageView.center=
} completion:^(BOOL finished) {
NSLog(@&Animation end.&);
//方法2:静态方法
//开始动画
[UIView beginAnimations:@&KCBasicAnimation& context:nil];
[UIView setAnimationDuration:5.0];
//[UIView setAnimationDelay:1.0];//设置延迟
//[UIView setAnimationRepeatAutoreverses:NO];//是否回复
//[UIView setAnimationRepeatCount:10];//重复次数
//[UIView setAnimationStartDate:(NSDate *)];//设置动画开始运行的时间
//[UIView setAnimationDelegate:self];//设置代理
//[UIView setAnimationWillStartSelector:(SEL)];//设置动画开始运动的执行方法
//[UIView setAnimationDidStopSelector:(SEL)];//设置动画运行结束后的执行方法
_imageView.center=
//开始动画
[UIView commitAnimations];
UIView实现基础动画--弹性动画
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
UIImageView *_imageV
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//创建图像显示控件
_imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@&ball.png&]];
_imageView.center=CGPointMake(160, 50);
[self.view addSubview:_imageView];
#pragma mark 点击事件
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=touches.anyO
CGPoint location= [touch locationInView:self.view];
/*创建弹性动画
damping:阻尼,范围0-1,阻尼越接近于0,弹性效果越明显
velocity:弹性复位的速度
[UIView animateWithDuration:5.0 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
_imageView.center= //CGPointMake(160, 284);
} completion:nil];
UIView关键帧动画
UIViewAnimation
Created by Kenshin Cui on 14-3-22.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
@interface KCMainViewController (){
UIImageView *_imageV
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景
UIImage *backgroundImage=[UIImage imageNamed:@&background.jpg&];
self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];
//创建图像显示控件
_imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@&petal.png&]];
_imageView.center=CGPointMake(50, 150);
[self.view addSubview:_imageView];
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//UITouch *touch=touches.anyO
//CGPoint location= [touch locationInView:self.view];
/*关键帧动画
[UIView animateKeyframesWithDuration:5.0 delay:0 options: UIViewAnimationOptionCurveLinear| UIViewAnimationOptionCurveLinear animations:^{
//第二个关键帧(准确的说第一个关键帧是开始位置):从0秒开始持续50%的时间,也就是5.0*0.5=2.5秒
[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
_imageView.center=CGPointMake(80.0, 220.0);
//第三个关键帧,从0.5*5.0秒开始,持续5.0*0.25=1.25秒
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{
_imageView.center=CGPointMake(45.0, 300.0);
//第四个关键帧:从0.75*5.0秒开始,持所需5.0*0.25=1.25秒
[UIView addKeyframeWithRelativeStartTime:0.75 relativeDuration:0.25 animations:^{
_imageView.center=CGPointMake(55.0, 400.0);
} completion:^(BOOL finished) {
NSLog(@&Animation end.&);
UIView转场动画
TransitionAnimation
Created by Kenshin Cui on 14-3-12.
Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import &KCMainViewController.h&
#define IMAGE_COUNT 5
@interface KCMainViewController (){
UIImageView *_imageV
int _currentI
@implementation KCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
//定义图片控件
_imageView=[[UIImageView alloc]init];
_imageView.frame=[UIScreen mainScreen].applicationF
_imageView.contentMode=UIViewContentModeScaleAspectF
_imageView.image=[UIImage imageNamed:@&0.jpg&];//默认图片
[self.view addSubview:_imageView];
//添加手势
UISwipeGestureRecognizer *leftSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)];
leftSwipeGesture.direction=UISwipeGestureRecognizerDirectionL
[self.view addGestureRecognizer:leftSwipeGesture];
UISwipeGestureRecognizer *rightSwipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)];
rightSwipeGesture.direction=UISwipeGestureRecognizerDirectionR
[self.view addGestureRecognizer:rightSwipeGesture];
#pragma mark 向左滑动浏览下一张图片
-(void)leftSwipe:(UISwipeGestureRecognizer *)gesture{
[self transitionAnimation:YES];
#pragma mark 向右滑动浏览上一张图片
-(void)rightSwipe:(UISwipeGestureRecognizer *)gesture{
[self transitionAnimation:NO];
#pragma mark 转场动画
-(void)transitionAnimation:(BOOL)isNext{
UIViewAnimationO
if (isNext) {
option=UIViewAnimationOptionCurveLinear|UIViewAnimationOptionTransitionFlipFromR
option=UIViewAnimationOptionCurveLinear|UIViewAnimationOptionTransitionFlipFromL
[UIView transitionWithView:_imageView duration:1.0 options:option animations:^{
_imageView.image=[self getImage:isNext];
} completion:nil];
#pragma mark 取得当前图片
-(UIImage *)getImage:(BOOL)isNext{
if (isNext) {
_currentIndex=(_currentIndex+1)%IMAGE_COUNT;
_currentIndex=(_currentIndex-1+IMAGE_COUNT)%IMAGE_COUNT;
NSString *imageName=[NSString stringWithFormat:@&%i.jpg&,_currentIndex];
return [UIImage imageNamed:imageName];
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:71391次
积分:1368
积分:1368
排名:千里之外
原创:59篇
转载:39篇
评论:12条
(2)(1)(1)(1)(7)(3)(6)(1)(15)(5)(2)(1)(2)(7)(20)(24)}

我要回帖

更多关于 大家都在看什么动画片 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信