iOS:核心动画之基本动画CABasicAnimation

时间:2022-10-03 12:17:01
基本动画,是CAPropertyAnimation的子类
属性说明:
fromValue:keyPath相应属性的初始值
toValue:keyPath相应属性的结束值
动画过程说明:
随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue
keyPath内容是CALayer的可动画Animatable属性
如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。
 
具体的演示实例如下:
功能实现:点击视图中的按钮,可以控制器动画过程的恢复运行和运行停止,等到动画运行到指定位置时,动画就停在此处,不在返回原处。
 
操作步骤:
1、拖一个按钮控件到故事板控制器的视图中,名字为play/stop,然后关联按钮事件(改变按钮的tag,调用播放或暂停方法)
2、创建核心动画子层并加到父核心动画层中,然后再创建一个tap触摸手势,并对触摸事件做处理(创建动画的过程)
3、完成之前定义的所有事件,同时实现动画的协议。
 
 
具体的代码如下:
//拖控件,关联事件
iOS:核心动画之基本动画CABasicAnimation  iOS:核心动画之基本动画CABasicAnimation
iOS:核心动画之基本动画CABasicAnimation
 
 
 
//在-(void)viewDidLoad{}方法中,创建子层,并添加到父层中
    //创建子层
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];
//在-(void)viewDidLoad{}方法中,创建手势,添加手势事件
    //创建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的更多相关文章

  1. iOS核心动画详解(CABasicAnimation)

    前言 上一篇已经介绍了核心动画在UI渲染中的位置和基本概念,但是没有具体介绍CAAnimation子类的用法,本文将介绍CABasicAnimation及其子类CASpringAnimation的用法 ...

  2. iOS开发UI篇—核心动画(UIView封装动画)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

  3. iOS开发UI篇—核心动画(转场动画和组动画)

    转自:http://www.cnblogs.com/wendingding/p/3801454.html iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的 ...

  4. iOS核心动画学习整理

    最近利用业余时间终于把iOS核心动画高级技巧(https://zsisme.gitbooks.io/ios-/content/chapter1/the-layer-tree.html)看完,对应其中一 ...

  5. IOS 核心动画之CAKeyframeAnimation - iBaby

    - IOS 核心动画之CAKeyframeAnimation - 简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation ...

  6. iOS 核心动画

    核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...

  7. IOS 动画专题 --iOS核心动画

    iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...

  8. iOS 核心动画 Core Animation浅谈

    代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...

  9. iOS核心动画高级技巧之核心动画(三)

    iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...

随机推荐

  1. JavaScript使用XMLHttpRequest 發送GET/Post 請求

    <!DOCTYPE HTML> <html> <head> <title>Demo</title> <script type=&quo ...

  2. Entity Framework 5&period;0系列之EF概览

    概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种 ...

  3. flappy bird游戏源代码揭秘和下载

    转:http://blog.csdn.net/touchsnow/article/details/19071961 背景: 最近火爆全球的游戏flappy bird让笔者叹为观止,于是花了一天的时间山 ...

  4. Android - &amp&semi;quot&semi;cause failed to find target android-14&amp&semi;quot&semi; 问题

    "cause failed to find target android-14" 问题 本文地址: http://blog.csdn.net/caroline_wendy Andr ...

  5. maven入门(1-1)maven是什么?

    Maven是一个项目管理工具,它包含了 一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle), 一个依赖管理系统(D ...

  6. 物联网架构成长之路&lpar;17&rpar;-SpringCloud目前遇到的注意事项

    1. STS插件最好是要安装的. 2. 对应的Decompiler插件也是要安装的. 3. 如果遇到maven工程因为找不到包问题的, 在确认pom.xml 文件没有问题的情况下, 右键项目-Mave ...

  7. python ---多进程 Multiprocessing

    和 threading 的比较 多进程 Multiprocessing 和多线程 threading 类似, 他们都是在 python 中用来并行运算的. 不过既然有了 threading, 为什么 ...

  8. Windows CMD常用命令大全 运行命令

    http://blog.163.com/lixunhuan@126/blog/static/122060620075124142658/ CMD命令大全 net use \\ip\ipc$ &quot ...

  9. C&num;学习笔记-外观模式

    题目:股民买卖股票 实现: static void Main(string[] args) { Stock1 gu1 = new Stock1(); Stock2 gu2 = new Stock2() ...

  10. (原创)Stanford Machine Learning &lpar;by Andrew NG&rpar; --- &lpar;week 3&rpar; Logistic Regression &amp&semi; Regularization

    coursera上面Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 我曾经使用Logistic Regressio ...