第一范文网 - 专业文章范例文档资料分享平台

iOS开发系列

来源:用户分享 时间:2025/11/25 6:01:04 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

} @end

@implementation KCMainViewController

- (void)viewDidLoad { [super viewDidLoad];

//设置背景(注意这个图片其实在根图层)

UIImage *backgroundImage=[UIImage imageNamed:@\

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:@\ [self.view.layer addSublayer:_layer]; }

#pragma mark 移动动画

-(void)translatonAnimation:(CGPoint)location{ //1.创建动画并指定动画属性

CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@\

//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=self; //存储当前位置在动画结束后使用

[basicAnimation setValue:[NSValue valueWithCGPoint:location] forKey:@\

//3.添加动画到图层,注意key相当于给动画进行命名,以后获得该图层时可以使用此名称获取 [_layer addAnimation:basicAnimation forKey:@\}

#pragma mark 旋转动画 -(void)rotationAnimation{ //1.创建动画并指定动画属性

CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@\

//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=self;

//4.添加动画到图层,注意key相当于给动画进行命名,以后获得该动画时可以使用此名称获取 [_layer addAnimation:basicAnimation forKey:@\}

#pragma mark 点击事件

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch=touches.anyObject;

CGPoint location= [touch locationInView:self.view]; //判断是否已经常见过动画,如果已经创建则不再创建动画

CAAnimation *animation= [_layer animationForKey:@\ if(animation){

if (_layer.speed==0) { [self animationResume]; }else{

[self animationPause]; } }else{

//创建并开始动画

[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.timeOffset; //设置偏移量

_layer.timeOffset=0; //设置开始时间

_layer.beginTime=beginTime; //设置动画速度,开始运动 _layer.speed=1.0; }

#pragma mark - 动画代理方法 #pragma mark 动画开始

-(void)animationDidStart:(CAAnimation *)anim{

NSLog(@\

NSLog(@\animationForKey:@\通过前面的设置的key获得动画 }

#pragma mark 动画结束

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

NSLog(@\

//开启事务

[CATransaction begin]; //禁用隐式动画

[CATransaction setDisableActions:YES];

搜索更多关于: iOS开发系列 的文档
iOS开发系列.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8xkrx387kc9o8y39xxfa_9.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top