博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIViewAnimation动画与CATransition类动画
阅读量:6880 次
发布时间:2019-06-27

本文共 6612 字,大约阅读时间需要 22 分钟。

CATransition

 

CATransition is an Objective-C wrapper for creating view transitions. As of 3.1.2, there are 11 types of transitions. 4 of them are SDK-compatible, but are the most boring ones. The following shows all 11 types of transition from picture "A" to "B" at 40%. The subtypes, if any, is "fromLeft".

subtype and filter

Many transitions have are further divided into several discrete subtypes. They often control the movement direction of the animation.

Some transitions accept addition arguments through the filter property, for example, you can set the location of suckEffect using

... CAFilter* filter = [CAFilter filterWithName:@"suckEffect"]; [filter setValue:[NSValue valueWithCGPoint:CGPointMake(160, 240)] forKey:@"inputPosition"]; transition.filter = filter; ...
Transition Subtypes Accepted parameters
moveIn
push
reveal
fromLeft, fromRight, fromBottom, fromTop -
pageCurl, pageUnCurl fromLeft, fromRight, fromTop, fromBottom float inputColor[];
cube
alignedCube
fromLeft, fromRight, fromTop, fromBottom float inputAmount; (perspective)
flip
alignedFlip
oglFlip
fromLeft, fromRight, fromTop, fromBottom float inputAmount;
cameraIris - CGPoint inputPosition;
rippleEffect - -
rotate 90cw, 90ccw, 180cw, 180ccw -
suckEffect - CGPoint inputPosition;

Availability

The following shows the availability of different CATransitions starting from 2.0

CATransition Availability
fade
moveIn
push
reveal
(Public API) 2.0–
flip
alignedFlip
oglFlip
2.0–
cube
alignedCube
2.0–
pageCurl
pageUnCurl
2.0–
rippleEffect 2.0–
suckEffect 2.0–
cameraIris
cameraIrisHollowOpen
cameraIrisHollowClose
2.0–
rotate 4.0–
spewEffect
genieEffect
unGenieEffect
twist
swirl
charminUltra
reflection
zoomyIn
zoomyOut 
mapCurl
mapUnCurl
oglApplicationSuspend
cameraIrisHollow
2.0–2.2

References

  • Official reference: 
  • Header: 

 

1.使用UIView类函数实现:

//UIViewAnimationTransitionFlipFromLeft, 向左转动
//UIViewAnimationTransitionFlipFromRight, 向右转动
//UIViewAnimationTransitionCurlUp, 向上翻动
//UIViewAnimationTransitionCurlDown, 向下翻动

 

[UIView beginAnimations:@"animationID" context:nil];

[UIView setAnimationDuration:0.5f]; //动画时长
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES]; //给视图添加过渡效果
//在这里写你的代码.
[UIView commitAnimations]; //提交动画

 

2.使用CATransition对象来实现:

CATransition比较强大,一般可以使用CATransition模拟UIView的动画。

    /* 过渡效果
fade     //交叉淡化过渡(不支持过渡方向)
push     //新视图把旧视图推出去
moveIn   //新视图移到旧视图上面
reveal   //将旧视图移开,显示下面的新视图
cube     //立方体翻滚效果
oglFlip  //上下左右翻转效果
suckEffect   //收缩效果,如一块布被抽走(不支持过渡方向)
rippleEffect //滴水效果(不支持过渡方向)
pageCurl     //向上翻页效果
pageUnCurl   //向下翻页效果
cameraIrisHollowOpen  //相机镜头打开效果(不支持过渡方向)
cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)
*/

 

/* 过渡方向

fromRight;
fromLeft;
fromTop;
fromBottom;
*/
CATransition *animation = [CATransition animation];
animation.delegate = self;
animation.duration = 0.5f; //动画时长
animation.timingFunction = UIViewAnimationCurveEaseInOut;
animation.fillMode = kCAFillModeForwards;
animation.type = @”cube”; //过度效果
animation.subtype = @”formLeft”; //过渡方向
animation.startProgress = 0.0 //动画开始起点(在整体动画的百分比)
animation.endProgress = 1.0;  //动画停止终点(在整体动画的百分比)
animation.removedOnCompletion = NO;
[self.view.layer addAnimation:animation forKey:@"animation"];

 

转自:http://www.cnblogs.com/project/archive/2011/09/27/2193556.html

 

实现iPhone漂亮的动画效果主要有两种方法

  一种是UIView层面的,
  一种是使用CATransition进行更低层次的控制,
  第一种是UIView,UIView方式可能在低层也是使用CATransition进行了封装,它只能用于一些简单的、常用的效果展现,这里写一个常用的示例代码,供大家参考。
  Cpp代码
  [UIView beginAnimations:@"Curl"context:nil];//动画开始
  [UIView setAnimationDuration:0.75];
  [UIView setAnimationDelegate:self];
  [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:myview cache:YES];
  [myview removeFromSuperview];
  [UIView commitAnimations];
  第二种方式相对复杂一些,但如果更好的进行控制,还是使用这种方法吧,
  基本使用方法可以看一下如下例子:
  Cpp代码
  CATransition *animation = [CATransition animation];
  [animation setDuration:1.25f];
  [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
  [animation setType:kCATransitionReveal];
  [animation setSubtype: kCATransitionFromBottom];
  [self.view.layer addAnimation:animation forKey:@"Reveal"];
  这里使用了setType与setSubtype组合,这使用个比较保险,因为他的参数就是官方API里定义的,他们的参数说明可以参考如下:
  [animation setType:@"suckEffect"];
  这里的suckEffect就是效果名称,可以用的效果主要有:
  Cpp代码
  pageCurl 向上翻一页
  pageUnCurl 向下翻一页
  rippleEffect 滴水效果
  suckEffect 收缩效果,如一块布被抽走
  cube 立方体效果
  oglFlip 上下翻转效果

 

 

 

iphone中CABasicAnimation和UIView动画的区别[转]

关于UIView动画:

  1. [UIView beginAnimations :@ "zoom out" context :nil ] ;
  2. [UIView setAnimationDuration : 1. f ] ;
  3. [UIView setAnimationCurve :UIViewAnimationCurveEaseOut ] ;
  4. cover. transform  = CGAffineTransformMakeScale ( 9.25, 7.05 ) ;
  5. cover. center  = CGPointMake ( 430,  512 ) ;
  6. [UIView commitAnimations ]

UIView动画是应用在一个view上面的。

关于CABasicAnimation动画:

  1. -  (CAAnimation  * )animationMove : (CGPoint )rootCenter
  2. {
  3.     CABasicAnimation  *animationMove
  4.      =  [CABasicAnimation animationWithKeyPath :@ "position" ] ;
  5.     animationMove. duration  =  1 ;
  6.     animationMove. autoreverses  = NO ;
  7. //    animationMove.delegate = self;
  8.     animationMove. removedOnCompletion  = NO ;
  9.     animationMove. fillMode  = kCAFillModeForwards ;
  10.     animationMove. fromValue  =  [NSValue valueWithCGPoint :self. oldCoverCenter ] ;
  11.     animationMove. toValue  = [NSValue valueWithCGPoint :rootCenter ] ;
  12.  
  13.      return animationMove ;
  14. }

CABasicAnimation动画是应用在一个layer上面的。

注:

1,把一个image放在一个view的layer上来放大的时候,如果用UIView来做,图片不会太多的失真和闪烁的效果,但是用CABasicAnimation来做失真和闪烁现象会很严重,效果很不好。
2,做 动画的叠加效果 很简单,只要把各自的动画放在一起就可以了。请看这个效果:一本书边移动到屏幕中间,边放大,边打开封面的效果。

  1. [imageLayer addAnimation : [self animationOpen ] forKey :@ "Open" ] ;
  2. [UIView beginAnimations :@ "zoom out" context :nil ] ;
  3. [UIView setAnimationDuration : 1. f ] ;
  4. [UIView setAnimationCurve :UIViewAnimationCurveEaseOut ] ;
  5. cover. transform  = CGAffineTransformMakeScale ( 5.5, 5.5 ) ;
  6. cover. center  = CGPointMake ( 629,  384 ) ;
  7. [UIView commitAnimations ] ;
  8.  
  9. -  (CAAnimation  * )animationOpen
  10. {
  11.     CABasicAnimation  *animationOpen
  12.      =  [CABasicAnimation animationWithKeyPath :@ "transform.rotation.y" ] ;
  13.     animationOpen. duration  =  1 ;
  14.     animationOpen. autoreverses  = NO ;
  15.     animationOpen. delegate  = self ;   //然后执行真正地打开书的内容
  16.     animationOpen. removedOnCompletion  = NO ;
  17.     animationOpen. fillMode  = kCAFillModeForwards ;
  18.     animationOpen. fromValue  =  [NSNumber numberWithFloat :-M_PI / 5 ] ;
  19.     animationOpen. toValue  =  [NSNumber numberWithFloat :-M_PI / 1.5 ] ;
  20.  
  21.      return animationOpen ;
  22. }
 

转载于:https://www.cnblogs.com/pengyingh/articles/2339420.html

你可能感兴趣的文章
CF889E Mod Mod Mod
查看>>
LC39 Combination Sum
查看>>
2019-05-21 SpringBoot集成UReport2
查看>>
09-排序2 Insert or Merge
查看>>
矩阵与线性方程组
查看>>
第六天
查看>>
linux杀毒软件clamav安装与使用
查看>>
安装ubuntu系统 ——分区
查看>>
oracle学习_基本语法
查看>>
【Todo】STAR面试法
查看>>
信号量与条件变量的区别
查看>>
thinkphp3.1课程 1-1 为什么thinkphp在开发好后需要关掉开发模式
查看>>
Teradata 语句简单优化
查看>>
c# 通过关键字查询
查看>>
已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数...
查看>>
jquery
查看>>
伏地魔
查看>>
linux
查看>>
安装虚拟机-linux系统步骤
查看>>
集训第五周动态规划 J题 括号匹配
查看>>