IOS中的动画

转载 2013年12月03日 16:50:20

IOS中的动画右两大类1.UIView的视图动画2.Layer的动画 UIView的动画也是基于Layer的动画
动画的代码格式都很固定

1.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);//得到相反的样子 大小 方向 位置执行多次

Block方式
[UIView animateWithDuration:3 animations:^(void){
           
      //这里相当于在begin和commint之间
    }completion:^(BOOL finished){
         //这里相当于动画执行完成后要执行的方法,可以继续嵌套block
    }];

2.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:[NSValue valueWithCGPoint: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
*/

相关文章推荐

ios基础动画

  • 2017-08-11 10:44
  • 633KB
  • 下载

IOS核心动画高级五:变换

在第四章“视觉效果”中,我们研究了一些增强图层和它的内容显示效果的一些技术,在这一章中,我们将要研究可以用来对图层旋转、摆放或者扭曲的CGAffineTransform。以及可以将扁平物体转换成三维空...

iOS动画高级讲解

  • 2016-11-03 14:23
  • 20.71MB
  • 下载

IOS 仿微博小动画

iOS开发之CAAnimation核心动画

我们先来看看核心动画的组成,或者说事分类:如下图 核心动画简介:  核心动画:    1、在iOS中核心动画分为几类:基础动画(CABasi...

IOS 层动画

  • 2015-10-09 17:41
  • 541KB
  • 下载

iOS上的图形和动画处理

  • 2013-01-25 11:25
  • 5.32MB
  • 下载

iOS开发 - 关于启动页动画的杂谈

博主在这里要再次声明,启动页直接显示动画是不可能的!如果你告诉我你见过启动页是动画的,没关系,博主会向你解析下是怎么做出来并欺骗用户的眼睛的。总结一点,LaunchImage无法跳过,要想一开始进来看...

ios上的图形和动画处理

  • 2013-07-18 19:42
  • 5.02MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)