iOS学习总结----核心动画(2)

实现动画分三部曲:
(1)创建动画对象;
(2)设置动画属性(时长,重复次数...);
(3)将动画添加到图层(layer)上.
这几个Demo都是练习用的,比较简单

一.CABasicAnimation:基础动画
// 获取相应的动画
CABasicAnimation *animation = ( CABasicAnimation *)[ _imgView . layer animationForKey : @"rotationAnimation ];( @“rotationAnimation"表示动画类型 )

1.缩放动画:
  //(1) 创建动画对象
   
CABasicAnimation *scaleAnimation = [ CABasicAnimation animationWithKeyPath : @"transform.rotation" ];
   
   
//(2) 设置动画属性
    scaleAnimation.
duration = 1 ;
    scaleAnimation.
fromValue = @1 ;
    scaleAnimation.
toValue = @2 ;
   
   
// 设置动画结束后以动画形式恢复到原状态
    scaleAnimation.
autoreverses = YES ;
   
   
//(3) 将动画添加到图层
    [
_imgView . layer addAnimation :scaleAnimation forKey : nil ];
   
2.左右抖动
  //1. 创建动画对象
   
CABasicAnimation *rotationAnimation = [ CABasicAnimation animationWithKeyPath : @"transform.rotation" ];
   
   
//2. 设置动画属性
   
// 动画时间
    rotationAnimation.
duration = 0.1 ;
   
// 相应属性的初始值
    rotationAnimation.
fromValue = @( - M_PI_4 * 0.2) ;
   
// 相应属性的结束值
    rotationAnimation.
toValue = @( M_PI_4 * 0.2) ;
   
// 重复次数
    rotationAnimation.
repeatCount = MAXFLOAT ;
   
// 动画结束后以动画形式回到远状态
    rotationAnimation.
autoreverses = YES ;
   
   
//3. 添加到图层
    [
_imgView . layer addAnimation :rotationAnimation forKey : nil ];
   
 
二.CAKeyFrameAnimation:关键帧动画
基础动画可以实现的,关键帧动画都可以实现,反之则不然.

1.随机点运动:
//创建帧动画对象
  CAKeyframeAnimation *keyAnimation = [ CAKeyframeAnimation animationWithKeyPath : @"position" ];
   
    keyAnimation.duration = 2;//时长
    //用可变数组存放随机点
    NSMutableArray *array = [[ NSMutableArray alloc ] init ];
   
// 随机生成 20 个点
   
for ( int i = 0 ; i < 20 ; i ++) {
       
CGPoint p = [ self creatRandom ];;
       
NSValue *value = [ NSValue valueWithCGPoint :p];
       
        [array
addObject :value];
    }
    //将数组交给动画
    keyAnimation.values = array;
   //添加到layer层
    [_imgView.layer addAnimation:keyAnimation forKey:nil];

2.圆周运动:
  // 以手指点击的地方作为圆心, 150 作为半径的圆运动

CAKeyframeAnimation *keyAnimation = [ CAKeyframeAnimation animationWithKeyPath : @"position" ];
keyAnimation.duration = 1;
keyAnimation. repeatCount = MAXFLOAT ;   
//创建运动路径
CGMutablePathRef path = CGPathCreateMutable ();    
// 创建圆
CGPathAddArc (path, NULL , touchPoint. x , touchPoint. y , 100 , 0 , M_PI * 2 , 1 );  
keyAnimation. path = path;
// 释放路径
CGPathRelease (path);   
[ _imgView . layer addAnimation :keyAnimation forKey : nil ];
    
三.CAAnimationGroup:组动画
  // 创建组动画对象
CAAnimationGroup  *group = [CAAnimationGroup animation];
  // 设置属性
group.duration = 5;(动画时长)
group.repeatCount = MAXFLOAT; (重复次数:无数次)
group. delegate = self ;(设置代理,用来监听动画的开始和结束,代理名: CAMediaTiming )
// 创建两个动画对象 , 添加到组动画中
CAAnimation *animation1 = [ self movieWithArc :touvhPoint];
CAAnimation *animation2 = [ self movieWithLeftAndRight ];
//将动画添加到动画组中
group.animations = @[animation1,animation2];
// 将动画添加到图层
[_imgView.layer addAnimation:group forKey:nil];

四.CATransition:转场动画
// 创建转场动画对象
CATransition *transition = [[CATransition alloc]init];

CACurrentMediaTime ()   (当前时间)
beginTime (动画开始时间)
_imgView.layer.timeOffset = 0; (时间偏移量,记录某一刻时间动画的进度)
_imgView.layer.speed = 1; (动画速度,speed为1表示开始,为0表示停止动画)

1.动画类型:
苹果官方提供了几种 动画类型:
kCATransitionFade  渐变
kCATransitionMoveIn 进入
kCATransitionPush  推入
kCATransitionReveal  移除
使用: transition. type = kCATransitionFade ;

私有的动画效果:如果在app中使用的话,上架遭拒的可能较大,不过最近可能放宽政策了.
rippleEffect  水滴效果
cameraIrisHollowClose  相机关闭的效果
cameraIrisHollowOpen  相机打开的效果
cube  立体翻滚
oglFlip  上下左右翻滚效果
suckEffect  收缩效果 , 如一块布被抽走
pageCurl  向上翻页
pageUnCurl  向下翻页
使用: 与官方提供的使用方法有所不同
transition. type = @"pageUnCurl" ;

2.修改导航控制器的动画:
//动画类型
transition. type = @"suckEffect" ;
//动画子类型,设置动画从哪个方向开始,对有些动画效果不起作用
transition.subtype = kCATransitionFromBottom;
//动画时长
transition. duration = 1 ;
   
    [
self . navigationController . view . layer addAnimation :transition forKey : nil ];
   
   
SecondViewController *secondCtrl = [[ SecondViewController alloc ] init ];
    [
self . navigationController pushViewController :secondCtrl animated : NO ];
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值