zoukankan      html  css  js  c++  java
  • UIView的动画处理

    UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏、产生流畅的动画效果,进而改善用户体验。UIView可以产生动画效果的变化包括:

    位置变化:在屏幕上移动视图。

    • 大小变化:改变视图框架(frame)和边界。
    • 拉伸变化:改变视图内容的延展区域。
    • 改变透明度:改变视图的alpha值。
    • 改变状态:隐藏或显示状态。
    • 改变视图层次顺序:视图哪个前哪个后。
    • 旋转:即任何应用到视图上的仿射变换(transform)。
    • 创建UIView动画(块)——(指过渡效果的动画)

      一.基本方式:使用UIView类的UIViewAnimation扩展
       UIView动画是成块运行 的。发出beginAnimations:context:请求标志着动画块的开始;commitAnimations标志着动画块的结束。把这两个类方 法发送给UIView而不是发送给单独的视图。在这两个调用之间的可定义动画的展现方式并更新视图。函数说明:

      //开始准备动画
      + (void)beginAnimations:(NSString *)animationID context:(void *)context;

      //运行动画
      + (void)commitAnimations;
    •  [UIView beginAnimations:nil context:nil];
      //setAnimationCurve来定义动画加速或减速方式
      [UIView setAnimaitonCurve:UIViewAnimationCurveLinear];
      [UIView setAnimationDuration:2.7]; //动画时长
      [UIView setAnimationTransition:transition forView:self.view cache:YES]; // 设置动画跳转

      [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
      // end<<<<<
      [UIView commitAnimations];

      CGContextRef context = UIGraphicsGetCurrentContext(); //返回当前视图堆栈顶部的图形上下文
      [UIView beginAnimations:nil context:context];
      [UIView setAnimaitonCurve:UIViewAnimationCurveEaseInOut];
      [UIView setAnimationDuration:1.0];
      // View changes go here
      [contextView setAlpha:0.0f]; //设置属性的变换,可以对frame的位置进行变换来实现移动的效果
      [UIView commitAnimations]; //执行动画
    • 其中transition取值范围:UIView类本身提供四种过渡效果
      UIViewAnimationTransitionNone 正常
      UIViewAnimationTransitionFlipFromLeft 从左向右翻
      UIViewAnimationTransitionFlipFromRight 从右向左翻
      UIViewAnimationTransitionCurlUp 从下向上卷
      UIViewAnimationTransitionCurlDown 从上向下卷

    + (BOOL)areAnimationsEnabled            返回一个布尔值表示动画是否结束。如果动画结束返回YES,否则NO。

    开始一个动画块
    + (void)beginAnimations:(NSString *)animationID context:(void *)context
    参数
    animationID      动画块内部应用程序标识用来传递给动画代理消息-这个选择器运用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法来设置。
    context           附加的应用程序信息用来传递给动画代理消息-这个选择器使用setAnimationWillStartSelector: 和setAnimationDidStopSelector: 方法。
    讨论
    这个值改变是因为设置了一些需要在动画块中产生动画的属性。动画块可以被嵌套。如果在没有在动画块中调用那么setAnimation类方法将什么都不 做。使用 beginAnimations:context:来开始一个动画块并用commitAnimations类方法来结束一个动画块。


    + (void)commitAnimations        结束一个动画块并开始当他在动画块外时。
    讨论
    如果当前的动画块是最外层的动画块,当应用程序返回到循环运行时开始动画块。动画在一个独立的线程中所有应用程序不会中断。使用这个方法,多个动画可以被 实现。查看setAnimationBeginsFromCurrentState:来了解如果开始一个动画当另外一个动画在播放的时候。

    + (Class)layerClass       返回类用来创建这一个本类的layer实例对象。
    返回值
    一个用来创建视图layer的类
    讨论
    重写子类来指定一个自定义类用来显示。当在创建视图layer时候调用。默认的值是CALayer类对象。

    + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState            设置动画从当前状态开始播放。
    参数
    fromCurrentState
    YES如果动画需要从他们当前状态开始播放。否则为NO。
    讨论
    如果设置为YES那么当动画在运行过程中,当前视图的位置将会作为新的动画的开始状态。如果设置为NO,当前动画结束前新动画将使用视图最後状态的位置作 为开始状态。这个方法将不会做任何事情如果动画没有运行或者没有在动画块外调用。使用beginAnimations:context:类方法来开始并用 commitAnimations类方法来结束动画块。默认值是NO。


    + (void)setAnimationCurve:(UIViewAnimationCurve)curve          设置动画块中的动画属性变化的曲线。
    讨论
    动 画曲线是动画运行过程中相对的速度。如果在动画块外调用这个方法将会无效。使用 beginAnimations:context:类方法来开始动画块并用commitAnimations来结束动画块。默认动画曲线的值是 UIViewAnimationCurveEaseInOut。

    + (void)setAnimationDelay:(NSTimeInterval)delay          在动画块中设置动画的延迟属性(以秒为单位)
    讨论
    这个方法在动画块外调用无效。使用beginAnimations:context: 类方法开始一个动画块并用commitAnimations类方法结束动画块。默认的动画延迟是0.0秒。

    + (void)setAnimationDuration:(NSTimeInterval)duration        设置动画块中的动画持续时间(用秒)
    参数
    duration   一段动画持续的时间。
    讨论
    这个方法在动画块外没有效果。使用beginAnimations:context: 类方法来开始一个动画块并用commitAnimations类方法来结束一个动画块。默认值是0.2。


    + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache     在动画块中为视图设置过渡
    参数
    transition      把一个过渡效果应用到视图中。可能的值定义在UIViewAnimationTransition中。
    view             需要过渡的视图对象。
    cache           如果是YES,那么在开始和结束图片视图渲染一次并在动画中创建帧;否则,视图将会在每一帧都渲染。例如缓存,你不需要在视图转变中不停的更新,你只需要等到转换完成再去更新视图。
    讨论
    如果你想要在转变过程中改变视图的外貌。举个例子,文件从一个视图到另一个视图,然後使用一个UIView子类的容器视图,如下:
    1.Begin an animation block.                                         开始一个动画块。
    2.Set the transition on the container view.                    在容器视图中设置转换。
    3.Remove the subview from the container view.            在容器视图中移除子视图。
    4.Add the new subview to the container view.               在容器视图中添加子视图
    5.Commit the animation block.                                    结束动画块。


    + (void)setAnimationWillStartSelector:(SEL)selector     当动画开始时发送一条消息到动画代理
    参数
    selector       在动画开始前向动画代理发送消息。默认值是NULL。这个selector必须由和beginAnimations:context: 方法相同的参数,一个任选的程序标识和内容。这些参数都可以是nil。
    讨论
    这个方法在动画块外没有任何作用。使用beginAnimations:context:类方法来开始一个动画块并用commitAnimations类方法来结束。

    当使用UIView的动画时,如果要实现连续的动画显示需要建立一个类别函数来对动画进行管理。

    二.core方式:使用CATransition类

    Phone还支持Core Animation作为其QuartzCore架构的一部分,CA API为iPhone应用程序提供了高度灵活的动画解决方案。但是须知:CATransition只针对图层,不针对视图。图层是Core Animation与每个UIView产生联系的工作层面。使用Core Animation时,应该将CATransition应用到视图的默认图层([myView layer]而不是视图本身。

    使用CATransition类实现动画,只需要建立一个Core Animation对象,设置它的参数,然后把这个带参数的过渡添加到图层即可。
    使用要引入QuartzCore.framework

    代码

    #import <QuartzCore/QuartzCore.h>

    示例代码:

     1 CATransition *transition = [CATransition animation];    //创建动画效果类
    2 transition.duration = 0.7;            //设置动画时长
    3 transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; //设置动画淡入淡出的效果
    4 transition.type = kCATransitionMoveIn;//{kCATransitionMoveIn, kCATransitionPush, kCATransitionReveal, kCATransitionFade};设置动画类型,移入,推出等
    5
    6 //更多私有{@"cube",@"suckEffect",@"oglFlip",@"rippleEffect",@"pageCurl",@"pageUnCurl",@"cameraIrisHollowOpen",@"cameraIrisHollowClose"};
    7 transition.subtype = kCATransitionFromLeft;//{kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom};
    8
    9 transition.delegate = self;       //设置属性依赖
    10 [self.view.layer addAnimation:transition forKey:nil]; //在图层增加动画效果
    11
    12 // 要做的
    13 [self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0]; //视图按设置的动画效果的转换

           CATransition动画使用了类型type和子类型subtype两个概念。type属性指定了过渡的种类(淡化、推挤、揭开、覆盖)。subtype设置了过渡的方向(从上、下、左、右)。另外,CATransition私有的动画类型有(立方体、吸收、翻转、波纹、翻页、反翻页、镜头开、镜头关)。

     

  • 相关阅读:
    IDEA 2019.3 最新激活教程,有效期到 2089 年!
    【猫狗数据集】读取数据集的第二种方式
    【猫狗数据集】计算数据集的平均值和方差
    【colab pytorch】其它注意事项
    【colab pytorch】训练和测试常用模板代码
    【colab pytorch】数据预处理
    【colab pytorch】提取模型中的某一层
    【colab pytorch】模型权重初始化
    【猫狗数据集】使用预训练的resnet18模型
    【猫狗数据集】使用top1和top5准确率衡量模型
  • 原文地址:https://www.cnblogs.com/tony_cap/p/2427536.html
Copyright © 2011-2022 走看看