iOS:核心动画之基本动画CABasicAnimation
//创建子层
self.subLayer = [CALayer layer]; self.subLayer.bounds = CGRectMake(, , , ); self.subLayer.position = CGPointMake(, ); self.subLayer.backgroundColor = [[UIColor redColor]CGColor]; self.subLayer.cornerRadius = ; [self.view.layer addSublayer:self.subLayer];
//创建tap手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Tap:)];
tap.numberOfTapsRequired = ;
tap.numberOfTouchesRequired = ;
[self.view addGestureRecognizer:tap];
#pragma mark -tap手势处理
-(void)Tap:(UITapGestureRecognizer *)sender
{
//获取当前的点击的位置
CGPoint location = [sender locationInView:self.view]; //创建基本动画
CABasicAnimation *basicAnimation = [[CABasicAnimation alloc]init]; basicAnimation.duration = 5.0f;
//设置动画改变的值为position
basicAnimation.keyPath = @"position"; //BasicAnimation.fromValue用当前位置,不用设置
basicAnimation.toValue = [NSValue valueWithCGPoint:location]; //动画执行完,停留下来,不返回原值,需要设置下面的两个属性
basicAnimation.removedOnCompletion = NO;
basicAnimation.fillMode = kCAFillModeForwards; //设置代理
basicAnimation.delegate = self; //设置一个键区分动画,将指定的动画添加到子层中
[self.subLayer addAnimation:basicAnimation forKey:@"BasicAnimation"]; //没有具体实现代理方法的情况下,subLayer虽然发生移动,但是它的真正位置并没有发生改变
//NSLog(@"%@",NSStringFromCGPoint(self.subLayer.position));
}
- (IBAction)buttonClicked:(UIButton *)sender
{
if (sender.tag == )
{
//动画暂停
[self animationPause];
sender.tag = ;
}
else
{
//动画恢复
[self animationResume];
sender.tag = ;
}
}
//动画暂停
-(void)animationPause
{
//获取当前暂停时间
//CFTimeInterval pauseTime = [self.subLayer convertTime:CACurrentMediaTime() fromLayer:nil];
CFTimeInterval pauseTime = CACurrentMediaTime(); //层的速度为0,停止动画
self.subLayer.speed = ; //保存暂停时间,便于恢复
self.subLayer.timeOffset = pauseTime;
}
//动画恢复
-(void)animationResume
{
//获取暂停时保存的时间
CFTimeInterval pauseTime = self.subLayer.timeOffset;
self.subLayer.timeOffset = ; //设置速度
self.subLayer.speed = 1.0; //清除开始时间
self.subLayer.beginTime = 0.0; //计算开始时间
CFTimeInterval beginTime = [self.subLayer convertTime:CACurrentMediaTime() fromLayer:nil] - pauseTime; //重设开始时间
self.subLayer.beginTime = beginTime;
}
#pragma mark -动画代理的方法
//动画开始时触发的方法
-(void)animationDidStart:(CAAnimation *)anim
{
//开始时的当前值
//NSLog(@"animationDisStart:%@",((CABasicAnimation *)anim).fromValue);
} //动画停止时触发的方法
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
//停止时的终点值
//NSLog(@"animationDidStop,%@",((CABasicAnimation*)anim).toValue); //将subLayer的属性值真正变为动画停止时的属性值
NSValue *toValue = ((CABasicAnimation*)anim).toValue;
CGPoint point = [toValue CGPointValue];
self.subLayer.position = point;
}
@end
iOS:核心动画之基本动画CABasicAnimation的更多相关文章
- iOS核心动画详解(CABasicAnimation)
前言 上一篇已经介绍了核心动画在UI渲染中的位置和基本概念,但是没有具体介绍CAAnimation子类的用法,本文将介绍CABasicAnimation及其子类CASpringAnimation的用法 ...
- iOS开发UI篇—核心动画(UIView封装动画)
iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...
- iOS开发UI篇—核心动画(转场动画和组动画)
转自:http://www.cnblogs.com/wendingding/p/3801454.html iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的 ...
- iOS核心动画学习整理
最近利用业余时间终于把iOS核心动画高级技巧(https://zsisme.gitbooks.io/ios-/content/chapter1/the-layer-tree.html)看完,对应其中一 ...
- IOS 核心动画之CAKeyframeAnimation - iBaby
- IOS 核心动画之CAKeyframeAnimation - 简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation ...
- iOS 核心动画
核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...
- IOS 动画专题 --iOS核心动画
iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...
- iOS 核心动画 Core Animation浅谈
代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...
- iOS核心动画高级技巧之核心动画(三)
iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...
随机推荐
- SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]
一.完整备份.差异备份和事务日志备份的脚本 --完整备份数据库 BACKUP DATABASE Test_Bak TO DISK = 'E:\20150609_75\bak\Test_bak_full ...
- 受限玻尔兹曼机RBM—简易详解
- android开发 两张bitmap图片合成一张图片
场景:对android4.4解码gif(解码文章见前面一篇)后的图片进行每帧处理,android4.3 解码出来的每帧都很完整,但是到android4.4版本就不完整了,每帧都是在第一帧的基础上把被改 ...
- 【Length of Last Word】cpp
题目: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return t ...
- Json Serialize 忽略特定属性
Json Serialize 忽略特定属性 Json Serialize SerializeFilter 忽略特定属性 key words:Json Serialize jackson fastjso ...
- 【BZOJ】【1069】【SCOI2007】最大土地面积
计算几何/旋转卡壳 从已知点中选出四个使得选出的四边形面积最大,很明显我们应该在凸包上搞. 我一开始的思路是:枚举 i ,找到 i 的对锺点cur1,这两个点将凸包分成了两半,我们在左半中枚举一个 j ...
- 【CodeForces】【311C】Fetch the Treasures
最短路 神题一道…… //CF 311C #include<queue> #include<cstdio> #include<cstdlib> #include&l ...
- 【BZOJ】【3442】学习小组
网络流/费用流 orz zyf 裸的费用流,根据题目描述即可建出如下的图: S->i 费用表示每有一个加入第 i 个小组的学生,需要花的钱,由于是跟流量(人数)的二次方相关,所以要拆边……然后每 ...
- java 验证电话号码(手机和固话)
- zip&rar格式压缩包的解压缩
实际工作中例子: 首先需要引入两个jar包: 注意:支持压缩软件4.20及以上版本 (1)压缩包的解压: (2)压缩包的压缩打包 zip格式: