zoukankan      html  css  js  c++  java
  • UIView的动画之初步学习

    animateWithDuration:<#(NSTimeInterval)#> delay:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>

    • duration: 动画时长
    • delay: 决定了动画在延迟多久之后执行
    • options:用来决定动画的展示方式,接下来会进行讲解
    • animations:转化成动画表示的代码
    • completion:动画结束后执行的代码块

    不是所有修改属性的操作放到animations代码块中都是变成动画实现的 —— 不管你怎么修改一个视图的tag,或者是delegate。因此,可实现动画的属性必定会导致视图的重新渲染。
    这些可以生成动画的属性大致可以分成这么三类:坐标尺寸视图显示形态变化

    坐标尺寸:

      • bounds:修改这个属性会结合center属性重新计算frame。建议通过这个属性修改尺寸
      • frame:修改这个属性通常会导致视图形变的同时也发生移动,然后会重新设置centerbounds属性
      • center: 设置后视图会移动到一个新位置,修改后会结合bounds重新计算frame

    视图显示:

    • backgroundColor: 修改这个属性会产生颜色渐变过渡的效果,本质上是系统不断修改了tintColor来实现的
    • alpha:修改这个属性会产生淡入淡出的效果
    • hidden:修改这个属性可以制作翻页隐藏的效果

    形态变化:

      transform:修改这个属性可以实现旋转、形变、移动、翻转等动画效果,其通过矩阵运算的方式来实现,因此更加强大

    上面我们使用到的动画方法中有一个重要的参数options,它能让你高度的自定义动画效果。下面展示这个参数类型的值集合,你可以通过结合不同的参数来实现自己的动画:

     Repeating:

    UIViewAnimationOptionRepeat       //动画循环执行
    UIViewAnimationOptionAutoreverse  //动画在执行完毕后会反方向再执行一次
    UIViewAnimationOptionRepeat参数不仅是让动画循环播放,并且还导致了completion的回调永远无法执行

    Easing:
     UIViewAnimationOptionCurveEaseInOut   //先加速后减速,默认(先加速,后减速)
     UIViewAnimationOptionCurveEaseIn      //由慢到快(逐渐加速)
     UIViewAnimationOptionCurveEaseOut     //由快到慢(速度领先,然后减速)
     UIViewAnimationOptionCurveLinear      //匀速(匀速运动)
    Transitioning:
    在视图、图片切换的时候,我们还能通过传入下面的这些参数来实现一些特殊的动画效果:使用方法
     UIView transitionWithView:<#(nonnull UIView *)#> duration:<#(NSTimeInterval)#>
    options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>
      UIViewAnimationOptionTransitionNone            //没有效果,默认
      UIViewAnimationOptionTransitionFlipFromLeft    //从左翻转效果
      UIViewAnimationOptionTransitionFlipFromRight   //从右翻转效果
      UIViewAnimationOptionTransitionCurlUp          //从上往下翻页
      UIViewAnimationOptionTransitionCurlDown        //从下往上翻页
      UIViewAnimationOptionTransitionCrossDissolve   //旧视图溶解过渡到下一个视图
      UIViewAnimationOptionTransitionFlipFromTop     //从上翻转效果
      UIViewAnimationOptionTransitionFlipFromBottom  //从上翻转效果
     弹簧效果:
    animateWithDuration:(NSTimeInterval) delay:<#(NSTimeInterval)#> usingSpringWithDamping:<#(CGFloat)#> initialSpringVelocity:<#(CGFloat)#>
    options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>
    • dampingRatio:速度衰减比例。取值范围0 ~ 1,值越低震动越强
    • velocity:初始化速度,值越高则物品的速度越快

     transform动画:

    transform是一个非常重要的属性,它在矩阵变换的层面上改变视图的显示效果,完成旋转、形变、平移等等操作。在它被修改的同时,视图的frame也会被真实改变。有两个数据类型用来表示transform,分别是CGAffineTransformCATransform3D。前者作用于UIView,后者为layer层次的变换类型。基于后者可以实现更加强大的功能,但我们需要先掌握CGAffineTransform类型的使用.

    在开始使用transform实现你的动画之前,先介绍几个常用的函数:

    /// 连接两个变换效果  返回的t = t1 * t2
    CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2)
    
    /// 矩阵初始值  [ 1 0 0 1 0 0 ]
    CGAffineTransformIdentity
    
    /// 自定义矩阵变换,需要掌握矩阵变换的知识才知道怎么用。参照上面推荐的原理链接
    CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty)
    
    /// 旋转视图。传入参数为 角度 * (M_PI / 180)。等同于 CGAffineTransformRotate(self.transform, angle)
    CGAffineTransformMakeRotation(CGFloat angle)   括号里是旋转度数
    CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
    
    /// 缩放视图。等同于CGAffineTransformScale(self.transform, sx, sy)
    CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)  宽高缩放比例(可以为负数 当于对称过去)
    CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
    
    /// 位移视图。等同于CGAffineTransformTranslate(self.transform, tx, ty)
    CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)  是相对于原位置右移 下移的参数
    CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)
  • 相关阅读:
    jquery如何获取url中问号后面的数值
    CSS3 @font-face
    如何在代码中应用设计模式
    面试中可能被问到的常用排序算法
    《深入java虚拟机》读书笔记之垃圾收集器与内存分配策略
    《深入java虚拟机》读书笔记之Java内存区域
    Spring系列之手写一个SpringMVC
    Java多线程之Executor框架和手写简易的线程池
    Spring系列之手写注解与配置文件的解析
    Spring系列之AOP的原理及手动实现
  • 原文地址:https://www.cnblogs.com/LE-Quan/p/5207535.html
Copyright © 2011-2022 走看看