iOS动画编程
IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKeyframeAnimation>,NSTimer
一:UIView动画
一般方式
- [UIView beginAnimations:@"ddd" context:nil];//设置动画
- [UIView commitAnimations]; //提交动画
- 这两个是必须有的,然后在两句的中间添加动画的代码
- [UIView beginAnimations:@"ddd" context:nil];//设置动画 ddd为动画名称
- [UIView setAnimationDuration:3];//定义动画持续时间
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //setAnimationCurve来定义动画加速或减速方式
- [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.window cache:YES];
- //设置动画的样式 forView为哪个view实现这个动画效果
- [UIView setAnimationDelay:3]; //设置动画延迟多久执行
- [UIView setAnimationDelegate:self]; //设置动画的代理 实现动画执行前后的方法 在commitAnimation之前设置
- [UIView setAnimationDidStopSelector:@selector(stop)];//设置动画结束后执行的方法
- [UIView setAnimationWillStartSelector:@selector(star)];//设置动画将要开始执行的方法
- [UIView commitAnimations]; //提交动画
- typedef enum {
- UIViewAnimationTransitionNone, //普通状态
- UIViewAnimationTransitionFlipFromLeft, //从左往右翻转
- UIViewAnimationTransitionFlipFromRight, //从右往左翻转
- UIViewAnimationTransitionCurlUp, //向上翻页
- UIViewAnimationTransitionCurlDown, //向下翻页
- } UIViewAnimationTransition;
- typedef enum {
- UIViewAnimationCurveEaseInOut,
- UIViewAnimationCurveEaseIn,
- UIViewAnimationCurveEaseOut,
- UIViewAnimationCurveLinear
- } UIViewAnimationCurve;
- [UIView beginAnimations:@"ddd" context:nil]; //设置动画
- view.frame = CGRectMake(200, 200, 100, 100);
- [UIView commitAnimations]; //提交动画
- 当view从本来的frame移动到新的frame时会慢慢渐变 而不是一下就完成了 中间也可以添加到上面那段中间 只是多种效果重叠
- 以下这些也可以加到 [UIView beginAnimations:@"ddd" context:nil]; [UIView commitAnimations];之间
- view.transform = CGAffineTransformMakeTranslation(10, 10);//设置偏移量 相对于最初的 只能偏移一次
- view.transform = CGAffineTransformTranslate(view.transform, 10, 10); //设置偏移量 偏移多次
- self.view.transform = CGAffineTransformMakeRotation(M_PI);//设置旋转度 只能旋转一次
- self.view.transform = CGAffineTransformRotate(self.view.transform, M_PI); //旋转多次
- self.view.transform = CGAffineTransformMakeScale(1.1, 1.1); //设置大小 只能改变一次 数值时相对于本来的几倍
- self.view.transform = CGAffineTransformScale(self.view.transform, 1.1, 1.1);//改变多次
- self.view.transform = CGAffineTransformIdentity;//回到当初的样子 执行一次
- self.view.transform = CGAffineTransformInvert(self.view.transform);//得到相反的样子 大小 方向 位置执行多次
这里我实现了一个自定义的动画方法,方便使用,只需要调用就可以实现很好的功能。
方法的实现
-(void)UIViewAnimation:(UIView* )view frame:(CGRect)frame type:(int)type alpha:(float)alpha duration:(float)duration
{
//将对应的参数实现在方法中,调用的时候只需要输入方法中所需要的参数就能很好的调用这个方法,并且实现想要的功能!
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:type];
[UIView setAnimationDelegate:self];
view.alpha=alpha;
view.frame=frame;
[UIView commitAnimations];
}
调用方法
[self UIViewAnimation:downView frame:CGRectMake(0, height, 320, 58) type:UIViewAnimationCurveEaseOut alpha:1 duration:0.3];
Block方式
- [UIView animateWithDuration:3 animations:^(void){
- //这里相当于在begin和commint之间
- }completion:^(BOOL finished){
- //这里相当于动画执行完成后要执行的方法,可以继续嵌套block
- }];
高级一点的block动画(Next)内嵌
- (void)changeUIView{ [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^(void){ moveView.alpha = 0.0; }completion:^(BOOL finished){ [UIView animateWithDuration:1 delay:1.0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^(void){ [UIView setAnimationRepeatCount:2.5]; moveView.alpha = 1.0; }completion:^(BOOL finished){ }]; }]; }
二:.CAAnimation
需要添加库,和包含头文件
caanimation有多个子类
CABasicAnimation
- CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
- //@""里的字符串有多种,可以自己找相关资料,一定要填对,动画才会执行 opacity设置透明度 bounds.size设置大小
- [animation setFromValue:[NSNumber numberWithFloat:1.0]]; //设置透明度从几开始
- [animation setToValue:[NSNumber numberWithFloat:0.3]];//设置透明度到几结束
- [animation setDuration:0.1]; //设置动画时间
- [animation setRepeatCount:100000];//设置重复时间
- [animation setRepeatDuration:4]; //会限制重复次数
- [animation setAutoreverses:NO];//设置是否从1.0到0.3 再从0.3到1.0 为一次 如果设置为NO则 1.0到0.3为一次
- [animation setRemovedOnCompletion:YES]; //完成时移出动画 默认也是
- [view.layer addAnimation:animation forKey:@"abc"];//执行动画
CAKeyframeAnimation
- CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];//设置view从初始位置经过一系列点
- NSArray *postionAraay = [NSArray arrayWithObjects:[NSValuevalueWithCGPoint:CGPointMake(100, 20)], [NSValue valueWithCGPoint:CGPointMake(40, 80)],[NSValue
- valueWithCGPoint:CGPointMake(30, 60)],[NSValue valueWithCGPoint:CGPointMake(20, 40)],[NSValue valueWithCGPoint:CGPointMake(0, 100)],nil];//设置点
- NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.3],[NSNumber numberWithFloat:0.5],[NSNumber numberWithFloat:0.6],[NSNumber numberWithFloat:0.1],[NSNumber
- numberWithFloat:1.0], nil]; //设置移动过程的时间
- [animation setKeyTimes:times];
- [animation setValues:postionAraay];
- [animation setDuration:5]; //设置动画时间
- [bigImage.layer addAnimation:animation forKey:@"dd"]; //执行动画
CATransition
- CATransition *animation = [CATransition animation];
- animation.duration = 0.5f;
- animation.timingFunction = UIViewAnimationCurveEaseInOut;
- animation.fillMode = kCAFillModeForwards;
- /*
- kCATransitionFade;
- kCATransitionMoveIn;
- kCATransitionPush;
- kCATransitionReveal;
- */
- /*
- kCATransitionFromRight;
- kCATransitionFromLeft;
- kCATransitionFromTop;
- kCATransitionFromBottom;
- */
- animation.type = kCATransitionPush;
- animation.subtype = kCATransitionFromBottom;
- [view.layer addAnimation:animation forKey:animation];
- type也可以直接用字符串
- /*
- cube
- suckEffect 卷走
- oglFlip 翻转
- rippleEffect 水波
- pageCurl 翻页
- pageUnCurl
- cameraIrisHollowOpen
- cameraIrisHollowClose
- */
三:NSTimer
这是一种定时器来操作动画的方法,他可以结合上面的方法来实现动画的多样化!
- -(void) onTimer {
- imageView.center = CGPointMake(imageView.center.x + delta.x,
- imageView.center.y + delta.y);
- if (imageView.center.x > self.view.bounds.size.width - ballRadius ||
- imageView.center.x < ballRadius)
- delta.x = -delta.x;
- if (imageView.center.y > self.view.bounds.size.height - ballRadius ||
- imageView.center.y < ballRadius)
- delta.y = -delta.y;
- }
- - (void) viewDidLoad {
- ballRadius = imageView.bounds.size.width / 2;
- [slider setShowValue:YES];
- delta = CGPointMake(12.0,4.0);
- timer = [NSTimer scheduledTimerWithTimeInterval:slider.value
- target:self
- selector:@selector(onTimer)
- userInfo:nil
- repeats:YES];
- [super viewDidLoad];
- }
- -(IBAction) sliderMoved:(id) sender {
- [timer invalidate];
- timer = [NSTimer scheduledTimerWithTimeInterval:slider.value
- target:self
- selector:@selector(onTimer)
- userInfo:nil
- repeats:YES];
- //
- timer = [NSTimer scheduledTimerWithTimeInterval:?
- invocation:?
- repeats:YES];
- }
iOS动画编程的更多相关文章
- iOS开发之动画编程的几种方法
iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...
- iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程
iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程 一.引言 二.初识CoreAnimation 三.锚点对几何属性的影响 四.Layer与View之间的关系 ...
- 转一篇简洁的UIView动画编程方法
iOS 中的 UIView 动画编程其实还是很简单的,像 CSS3 一样,在给定的时间内完成状态连续性的变化呈现.比如背景色,Frame 大小,位移.翻转,特明度等. 以前我使用的编程方式都是用下面 ...
- Swift动画编程指南-01 简介
大家好,我是老镇,这段时间家里和工作上发生了很多的事情,所以很长一段时间都没有出来搞什么小动作了.在接下来的一段时间内我会制作一些列关于使用Swift进行动画编程的视频,希望和大家胃口. 在iOS的世 ...
- iOS 6编程Cookbook(影印版)
<iOS 6编程Cookbook(影印版)> 基本信息 原书名:iOS 6 Programming Cookbook 作者: Vandad Nahavandipoor 出版社:东南大学出版 ...
- ios 动画效果CATransition笔记
初学ios开发,很多概念还不清楚,所以只有边学边做例子.又怕学了后面忘了前面,因此用自己的博客来纪录自己的学习历程,也是对自己学习不要懈怠做个监督. 刚学ios做动画效果.因为ios封装得很好,实现i ...
- IOS动画总结
IOS动画总结 一.基本方式:使用UIView类的UIViewAnimation扩展 + (void)beginAnimations:(NSString *)animationID context ...
- iOS网络编程模型
iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...
- (转)iOS动画Core Animation
文章转载:http://blog.sina.com.cn/s/blog_7b9d64af0101b8nh.html 在iOS中动画实现技术主要是:Core Animation. Core Animat ...
随机推荐
- HDU 5904 LCIS
$dp$. 这题的突破口在于要求数字是连续的. 可以分别记录两个串以某个数字为结尾的最长上升长度,然后枚举一下以哪个数字为结尾就可以得到答案了. 因为$case$有点多,不能每次$memset$,额外 ...
- [HMLY]3.如何使用Xcode Targets管理开发和生产版本?
本文原地址:http://www.appcoda.com/using-xcode-targets/ 在开始此教程之前,我们假设你已经完成了应用程序的开发和测试,现在准备提交生产发布.问题是,某些web ...
- 【JS】倒计时
描述: 先要链接jquery.js,这样写法可以直接放JS文件运行. //放在图片里定位的倒计时 //顶图里面定位才使用的代码 document.writeln("<style> ...
- html-----vedio标签(HTML5新标签VIDEO在IOS上默认全屏播放)
今天做一个app时发现一个问题,应用html5中的video标签加载视频,在Android手机上默认播放大小,但是换成iPhone手机上出问题了,默认弹出全屏播放,查找了好多论坛,都没有谈论这个的.然 ...
- [SQL基础教程] 2-1 SELECT语句基础
[SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...
- CF Round #353 Div.2
http://codeforces.com/contest/675 A. Infinite Sequence 题意:给出等差数列的首项a以及公差c,问数b是不是该数列中的数,若是输出YES否则输出NO ...
- Zeppelin使用报错
报错信息: INFO [2016-11-03 17:05:08,481] ({pool-2-thread-2} SchedulerFactory.java[jobFinished]:137) - Jo ...
- Zeppelin0.5.6使用hive解释器
此zeppelin为官方0.5.6版,可能还在孵化阶段,可能出现一些bug吧. 配置 cp zeppelin-env.sh.template zeppelin-env.sh vi zeppelin-e ...
- 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版
一.前言 多条件查询分页以及排序 每个系统里都会有这个的代码 做好这块 可以大大提高开发效率 所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...
- Oracle表锁住处理
select object_id,session_id,locked_mode from v$locked_object; select b.owner,b.object_name,l.session ...