鲁难未已,Android补间动画

2019-11-02 03:58栏目:365bet体育在线平台
TAG:

虹蓝,小福贵能够说是翻开了国产动画的新时期。那时候作者还在上小学,国产有这种神作霸屏,进口动画片有犬夜叉柯南,动画行当算得上是沸腾了。假诺即刻以这种动向下去,国产动画片成为华夏的学识一大招牌只是岁月的标题。大家有两千年的历史,诗词,山珍海味,武侠,音乐…这一个主题材料算是取之不竭用之努力。缺憾,短短三八年,市集上充满起了喜羊羊,光头强…能说什么样,怒其不争恨铁不成钢罢了。

android中补间动画分为透明动画,旋转动画,缩放动画和位移移动,动画能够功能在具有的view上,动画能够独自使用,也得以八个卡通一同利用。

在始发攻读Core Animation提供的layer的隐式动画和layer的显式动画此前,我们先来总计一下UIView block动画,因为:

主要写在前头

android动画中负有涉嫌到坐标的地点,坐标原点都以view的左上角。

补间动画只好在视觉上转移view的景色,可是view实际上照旧以本来的大大小小在原先的职责上。比如把二个view从左上角移动到了右下角,那些这一个view其实还在左上角,只是在视觉上活动到了右下角,倘使view上有一些击事件,那么唯有一点左上角那二个地点手艺触发点击事件,点右下角不会有其余反应。

  • 在其实支付中大家用的最多的依然view,并不是layer,所以更加多情状下假诺大家要做动画的话,用的依然UIView block动画,并不是layer的隐式动画和呈现动画;
  • 此地总计一下,能够方便大家在末端两篇学习layer的隐式动画和显式动画时作对照,以期加深对动画的驾驭。
大器晚成 用代码的点子写补间动画

不无动画的共用属性

此处列出富有动画都有的艺术,包蕴两种动画以致AnimationSet,这几个动画片的合集

//设置动画的持续时间
alphaAnimation.setDuration(2000);
 //设置动画播放完毕后是否保持在动画播放完毕的状态
alphaAnimation.setFillAfter(true);
/*
设置动画的重复次数,这里的重复次数指的是动画第一次播放完毕后还会重复播放几次,这里设置为3,就是动画一共播放四次,开始执行一次动画,然后再重复执行三次。
 */
alphaAnimation.setRepeatCount(3);
/*
设置动画重复的模式
有Animation.RESTART:在动画多次播放时每一次都和第一次一样,重复执行
 Animation.REVERSE:每一次执行动画是,和上一次执行相反的操作
例如动画是把view放大到原来的两倍,动画一共执行4次
如果是Animation.RESTART,就会每次都从view本身的大小变到2倍的大小,这一过程一共执行4次
如果是Animation.REVERSE,则第一回从本身大小到2倍,第二回从2倍到本身大小,第三回从2倍到view本身第四回再从view本身到2倍
*/
 alphaAnimation.setRepeatMode(Animation.REVERSE);

用透明动画举个例子

目录

独自选择动画片

1 AlphaAnimation
AlphaAnimation是晶莹动画,能够转移view的光滑度
1.1 成立动画

//创建动画,并设置起止透明度,传入的数据是浮点型,需要加f
//参数范围从0到1,0表示完全透明,1表示完全不透明
//第一个参数为开始的时候的透明度,第二个参数为结束的时候的透明度
AlphaAnimation alphaAnimation=new AlphaAnimation(1.0f,0);
alphaAnimation.setDuration(2000);
alphaAnimation.setRepeatCount(3);
alphaAnimation.setRepeatMode(Animation.REVERSE);

1.2 实行动画
率先找到必要实践动画的view,然后调用startAnimation方法,并传播需求进行的卡通片

imageView.startAnimation(alphaAnimation);

2 ScaleAnimation
缩放动画,调节view的缩放
2.1 创立动画

 /*传入8个参数
前4个参数分别为:
开始长度的缩放比例,终止长度的缩放比例,其实宽度的缩放比例,终止宽度的缩放比例
这四个参数都是浮点型的,代表和原view相比放大或者缩小的比例,1.0代表不变,2.0代表放大到原来的2被,0.5则代表缩小到原来的0.5倍
后四个参数设置缩放的中心点。分别为:
x轴的模式,x轴中心点的位置,y轴的模式,y轴中心点的位置
模式有三种
Animation.RELATIVE_TO_SELF:相对于自己
Animation.RELATIVE_TO_PARENT:相对于父元素
Animation.ABSOLUTE:绝对距离
如果是前两种模式,后面传入的参数代表时父元素或者自己的几倍
例如下面这种写法,代表相对于自己,大小是自己长宽的0.5倍,那么中心点x轴坐标就在空间长度一半的位置
y轴坐标也在控件一半的位置,(android动画中坐标原点都在执行该动画的view的左上角),那个中心点就是该元素的中心。
相对于父元素的也是如此,这两种x,y的坐标是相对的view乘以相应的比例得到的
如果是第三种模式,那个传入的参数谁也不相对,传入的参数是多少,坐标就是多少,坐标原点永远是view的左上角
*/
ScaleAnimation scaleAnimation=new ScaleAnimation(1.0f,2.0f,1.0f,2.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

能够再设置有个别别的急需的参数
2.2 试行动画
实行动画都以同等的操作
3 RotateAnimation
旋转动画,调整view的团团转操作
3.1 创立动画

/*
传入6个参数,前2个参数是开始时旋转的角度,和结束时旋转的角度
正数代表顺时针,负数代表逆时针
后四个参数为设置旋转的中心点,和ScaleAnimation设置中心点一致
*/
RotateAnimation rotateAnimation=new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

可以安装有些别的的参数
3.2 履行动画
实行动画都以风度翩翩律的
4 TranslateAnimation
位移动画,调控view的移动
4.1 成立动画

/*
传入8个参数
一共四组,分别为
起始时view的左上角x轴坐标
结束时view的左上角x坐标
起始时view的左上角y坐标
结束时view的左上角y坐标
view左上角坐标默认为(0,0)
每一组是一个模式加一个值组成的,模式和值进行计算得出实际的坐标值
有关模式的可以看ScaleAnimation中的讲解
 */
TranslateAnimation translateAnimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f);

能够设置有个别任何的参数
4.2 试行动画

生机勃勃、UIView可动画属性列表

动画合集

5 AnimationSet
卡通的合集,使用它能够垄断(monopoly)前边列出的八种动画中的少年老成种大概二种合伙实施
5.1 创建AnimationSet

//传入一个boolean类型的参数,这个参数控制的是动画执行时是匀速执行还是不匀速执行
//这个参数不好用,直接都传入true,让他匀速执行就可以
 AnimationSet animationSet=new AnimationSet(true);

5.2 将动画片参与到AnimationSet中

animationSet.addAnimation(translateAnimation);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(rotateAnimation);

5.3 能够设置有些参数,若是在set中装置参数,就能够对set中有着的卡通起效果,各类动画本身安装的参数只对团结起功用

animationSet.setDuration(2000);

5.4 实施动画

imageView.startAnimation(animationSet);

二、什么是UIView block动画?

二 用xml的方法定义补间动画

用代码定义的动画都足以用xml的点子贯彻
首先在res目录下树立一个anim目录
再在anim目录下树立四个动画文件,在那动画文件中初露写xml

1、UIView block动画的概念、本质及能做怎么样动画
意气风发律先说有着动画的公家性质

决十分的少说,和方面完全风姿浪漫致,须求说一点,有时这么些属性未有代码提醒,直接手打出去就行。

android:duration="2000"
android:repeatMode="restart"
android:repeatCount="3"
android:fillAfter="true"

1 透明动画
1.1 在xml文件中写动画

<!--需要说明的有两个参数
 fromAlpha,toAlpha,分别代表开始的透明度和结束的透明度,大小从0到1
在xml中浮点型不用加f
-->
<alpha
android:fromAlpha="1"
android:toAlpha="0"
android:duration="2000"
android:repeatMode="restart"
android:repeatCount="3"
android:fillAfter="true"/>

1.2 施行动画

//用AnimationUtils工具类把动画加载进行,传入两个参数,一个上下文,一个动画资源的id
AlphaAnimation animation=AnimationUtils.loadAnimation(this,R.anim.animation);
//执行动画
imageView.startAnimation(animationSet);

2 缩放动画
2.1 创造动画

 <!--
    fromXScale:开始时长度的大小,参数代表这个长度和view自身长度的比例,即这个长度是view自身长度的几倍
    toXScale:结束是长度的大小
    fromYScale:开始时宽度的大小
    toYScale:结束是宽度的大小
    pivotX:旋转中心点横坐标,可以传入三种类型的参数,
    50%,代表横坐标view自身的长度的50%
    50%p,代表横坐标是父元素控件的50%
    50,代表横坐标就是50。
    坐标原点是view的左上角坐标
    pivotY:旋转中心点纵坐标
    同pivotX
    -->
    <scale
        android:fromXScale="1"
        android:toXScale="2"
        android:fromYScale="1"
        android:toYScale="2"
        android:pivotX="50%"
        android:pivotY="50%"/>

2.2 施行动画
加载动画,试行动画
3 旋转动画
3.1 创立动画

 <!--
    fromDegrees:开始角度
    toDegrees:结束角度
    pivotX,pivotY:设置旋转中心点,和scale中的一样
    -->
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"/>

3.2 实践动画
加载动画,并实施动画
4 位移动画
4.1 创立动画

 <!--
    fromXDelta:动画开始时view左上角x坐标的位置
    toXDelta:动画结束时view左上角x坐标的位置
    fromYDelta:动画开始时view左上角坐标的位置
    toYDelta:动画结束时view左上角y坐标的位置
    这四个参数都可以传入
    50%,代表横坐标view自身的长度的50%
    50%p,代表横坐标是父元素控件的50%
    50,代表横坐标就是50。
    坐标原点是原始view的左上角坐标
    -->
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="0"
        android:toYDelta="50%"/>

4.2 实行动画
加载动画,推行动画

2、UIView block动画的分类
卡通合集

5 set 动画的合集
此刻根成分是set成分,set成分中得以写入八个卡通
set能够安装属性,set中的属性全体动画分享,动画内部的习性唯有该动画自身能够利用
5.1 制造动画

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000">
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="2000"
        android:repeatMode="restart"
        android:repeatCount="3"
        android:fillAfter="true"/>
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="0"
        android:toYDelta="50%"/>
    <scale
        android:fromXScale="1"
        android:toXScale="2"
        android:fromYScale="1"
        android:toYScale="2"
        android:pivotX="50%"
        android:pivotY="50%"/>
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"/>
</set>

5.2 实践动画

 AnimationSet set= (AnimationSet) AnimationUtils.loadAnimation(this,R.anim.animation);
imageView.startAnimation(set);
(1)UIView block基础动画(UIView block属性动画的意气风发种)
①怎么着是UIView block基础动画?
②什么样行使UIView block基础动画?
(2)UIView block关键帧动画(UIView block属性动画的生机勃勃种)
①哪些是UIView block关键帧动画?
②怎么样利用UIView block关键帧动画?
(3)UIView block过渡动画
①哪些是UIView block过渡动画?
②怎么着行使UIView block过渡动画?

三、怎样利用UIView block动画?(应用比如)

1、UIView block基础动画比如
2、UIView block关键帧动画举个例子
3、UIView block过渡动画例如

意气风发、UIView可动画属性列表

最普通的属性 说明
backgroundColor --
frame 改位置和大小,一般使用transform的平移和缩放来代替
bounds 改大小,一般使用transform的缩放来代替
center 改位置,一般使用transform的平移来代替
显隐性属性 说明
hidden 注意这个属性不支持动画,最简单的可以通过alpha或背景色来代替实现
alpha --
仿射变换属性 说明
transform 可用来做view的平移、缩放、旋转动画

二、什么是UIView block动画?

1、UIView block动画的概念、本质及能做怎么着动画
  • 定义:UIView block动画正是用来在view层做动画的意气风发种动画机制

  • 本质:UIView block动画的面目正是对layer的隐式动画或显式动画做了风流倜傥层封装,提供轻易的Api,方便咱们开采者使用。具体来讲UIView block基础动画是对layer的隐式动画做了包装(因为它们相近能够安装过渡效果/图层行为,展现动画的底蕴动画不可能安装图层行为,当然显式动画的接入动画也足以功能于可动画属性,不过前面讲到隐式动画应该会分晓UIView block基础动画是对layer的隐式动画做了打包),UIView block关键帧动画是对layer的彰显动画的严重性帧动画做了打包,UIView block过渡动画是对layer的显得动画的对接动画做了包装。

  • 能做哪些动画:

    • 下边大家会波及UIView block动画可分为UIView block属性动画和UIView block过渡动画,而UIView block属性动画又可分为UIView block基础动画和UIView block关键帧动画。

    • UIView block属性动画能做哪些动画:那么从UIView的可动画属性列表我们得以观望,UIView block属性动画能够用来对view做背景观变化的卡通、view显隐性别变化化的卡通以致view的移位、缩放和旋转的仿射转换动画三种气象下的卡通,个中施行一遍UIView block基础动画只好退换三个属性值一遍,实行一遍UIView block关键帧动画能够安装八个第大器晚成帧所以能改进三个属性值数十回

    • UIView block过渡动画能做哪些动画:UIView block属性动画只好对UIView的可动画属性做动画,然而假若大家以往想要对view的非动画属性改造时(如label的公文,imageView的图纸等)做动画,以至是对view的少数行为(如view的丰裕和移除,五个view之间切换)做动画,那就不能不使用过渡动画了。

  • 故而我们也就知晓了怎么要引进UIView block动画:
    • 先是、当然正是UIView block动画是功用于view层,对layer的隐式动画或显式动画做了风华正茂层封装,提供轻便的Api,方便大家开垦者使用;
    • 其次、UIView block属性动画能够援救大家在退换view的可动画属性时能做动画效果。借使看见后头风华正茂篇隐式动画,大家会明白在改动layer的可动画属性时,尽管我们什么样都不做直接修改layer的属性值,那些改动的经过也会暗许有八个卡通,它正是隐式动画;不过当大家在更改view的可动画属性时,是还没隐式动画的,要是大家如何都不做,属性就能直接跳变到新值,所认为了实现更动view的属性时能有动画,大家就得使用UIView block动画来促成了。
    • 其三、UIView block过渡动画能够扶植大家在转移view的不足变属性或许对view做一点行为能做动画。
2、UIView block动画的分类

UIView block动画可分为UIView block属性动画和UIView block过渡动画,而UIView block属性动画又可分为UIView block基础动画和UIView block关键帧动画,接下去我们将分头介绍UIView block基础动画UIView block关键帧动画UIView block过渡动画

(1)UIView block基础动画
①怎么着是UIView block基础动画?

UIView block基础动画是UIView block属性动画的生机勃勃种,它用来对view的可动画属性做动画,可是实践一次UIView block基础动画只好改造三个属性值二次,因为大家是二遍性把属性值直接设置为指标值的(要是要想改动数十次性质的值,能够在动画截止后再起来贰个基础动画再改叁次属性值,如此周而复始,但有贰个更简约的艺术正是应用UIView block关键帧动画,前面会提起)它根本分上面二种:

  • 最简洁明了的block基础动画
[UIView animateWithDuration:// 动画时长
                 animations:^{

                     // 要改变的属性
                 }];
  • 拉动画形成回调的block基础动画
[UIView animateWithDuration:// 动画时长
                 animations:^{

                     // 要改变的属性
                 } completion:^(BOOL finished) {

                     // 动画完成的回调
                 }];
  • 可设置延时和自定义动画过渡效果的block基础动画
[UIView animateWithDuration:// 动画时长
                      delay:// 延时多长时间后开始执行动画
                    options:// 可自定义动画的过渡效果,来替换掉系统默认的平滑过渡效果
                 animations:^{

                     // 要改变的属性
                 } completion:^(BOOL finished) {

                     // 动画完成的回调
                 }];

UIView block基础动画自定义过渡效果(UIViewAnimationOptions)枚举值如下:

  • 诚如就安装下联网动画效果和连通动画时间曲线就可以了;

  • 万风度翩翩和前面layer显式动画的交接动画的type和subType相比一下,会发掘这里的衔接动画效果是把layer显式动画的对接动画的type和subType组合起来了,何况这里的过渡动画效果要比layer显式动画的连结动画的效应少得多,独有淡入淡出、正面背面二维翻转、翻页效果两种而已。

UIViewAnimationOptionTransitionNone// 过渡动画效果:不使用过渡动画
UIViewAnimationOptionTransitionCrossDissolve//过渡动画效果:淡入淡出效果,和显示动画的过渡动画的“fade”一样
UIViewAnimationOptionTransitionFlipFromTop// 过渡动画效果:正面和背面的二维翻转效果,从上向下翻转
UIViewAnimationOptionTransitionFlipFromLeft// 过渡动画效果:正面和背面的二维翻转效果,从左向右翻转
UIViewAnimationOptionTransitionFlipFromBottom// 过渡动画效果:正面和背面的二维翻转效果,从下向上翻转
UIViewAnimationOptionTransitionFlipFromRight//过渡动画效果:正面和背面的二维翻转效果,从右向左翻转
UIViewAnimationOptionTransitionCurlUp// 过渡动画效果:翻页效果,从下往上翻页
UIViewAnimationOptionTransitionCurlDown// 过渡动画效果:翻页效果,从上往下翻页

UIViewAnimationOptionCurveEaseInOut// 过渡动画的缓冲曲线:动画慢进,逐渐加快,逐渐减慢,慢出(默认值)
UIViewAnimationOptionCurveEaseIn// 过渡动画的缓冲曲线:动画慢进,逐渐加快
UIViewAnimationOptionCurveEaseOut// 过渡动画的缓冲曲线:动画逐渐减慢,慢出
UIViewAnimationOptionCurveLinear// 过渡动画的缓冲曲线:动画匀速

UIViewAnimationOptionRepeat// 重复执行动画
UIViewAnimationOptionAllowUserInteraction// 执行动画期间,开启view的用户交互

UIViewAnimationOptionAutoreverse// 执行动画回路
UIViewAnimationOptionLayoutSubviews// 执行动画时布局子控件
UIViewAnimationOptionAllowAnimatedContent// 执行动画时重绘视图
UIViewAnimationOptionBeginFromCurrentState// 从当前状态开始执行动画
UIViewAnimationOptionShowHideTransitionViews// 显示视图时显示或隐藏而不是移除或添加
UIViewAnimationOptionOverrideInheritedOptions// 不继承父动画设置
UIViewAnimationOptionOverrideInheritedCurve// 忽略嵌套动画的曲线设置
UIViewAnimationOptionOverrideInheritedDuration// 忽略嵌套动画的执行时间设置
  • Spring动画:正是指在改变属性的时候,属性值会在目的值左近摆动,雷同弹簧这种的弹性动画
[UIView animateWithDuration:// 动画时长
                      delay:// 延时多长时间后开始执行动画
     usingSpringWithDamping:// 弹性效果的阻尼:范围0~1,数值越小弹性效果越明显,震得越久才能停下来
      initialSpringVelocity:// 弹性效果的初始速度:数值越大开始弹性动画时初始速度越快
                    options:// 可自定义动画的过渡效果,来替换掉系统默认的平滑过渡效果
                 animations:^{

                     // 要改变的属性
                 } completion:^(BOOL finished) {

                     // 动画完成的回调
                 }];
②怎么行使UIView block基础动画?

大家只需求在UIView block基础动画的animationsblock里直接把可动画属性退换为对象值就足以了。

(2)UIView block关键帧动画
①哪些是UIView block关键帧动画?

地方提起了UIView block基础动画是UIView block属性动画的后生可畏种,而那边的UIView block关键帧动画也是UIView block属性动画的生龙活虎种,它也是用来对view的可动画属性做动画的,只但是效果或然在一些场景下比基础动画要有利也许加上一些,不过执行三回UIView block关键帧动画能够安装八个重点帧所以能改动一个属性值数次,并不是三回性把属性值设置目的值

亟待注意的是:UIView block关键帧动画设置首要帧只可以通过扩大关键帧方法来设置,约等于layer彰显动画的严重性帧动画的数组关键帧法,那几个是不扶助路径关键帧法的。

  • UIView block关键帧动画
[UIView animateKeyframesWithDuration:// 动画时长
                               delay:// 延时多长时间后开始执行动画
                             options:// 可自定义动画的过渡效果,来替换掉系统默认的平滑过渡效果
                          animations:^{

                              // 添加关键帧
                          } completion:^(BOOL finished) {

                              // 动画完成的回调
                          }];

UIView block关键帧自定义过渡效果(UIViewKeyframeAnimationOptions)枚举值如下:

  • 诚如就设置下连着动画的运算形式就能够了,恐怕直接利用暗许就足以了。
UIViewKeyframeAnimationOptionCalculationModeLinear// 运算模式:连续,默认
UIViewKeyframeAnimationOptionCalculationModeDiscrete// 运算模式:离散
UIViewKeyframeAnimationOptionCalculationModePaced// 运算模式:均匀执行
UIViewKeyframeAnimationOptionCalculationModeCubic// 运算模式:平滑
UIViewKeyframeAnimationOptionCalculationModeCubicPaced// 运算模式:平滑均匀

UIViewKeyframeAnimationOptionRepeat = UIViewAnimationOptionRepeat// 重复执行动画
UIViewKeyframeAnimationOptionAllowUserInteraction = UIViewAnimationOptionAllowUserInteraction// 执行动画期间,开启view的用户交互

UIViewKeyframeAnimationOptionAutoreverse = UIViewAnimationOptionAutoreverse// 执行动画回路
UIViewKeyframeAnimationOptionLayoutSubviews = UIViewAnimationOptionLayoutSubviews// 执行动画时布局子控件
UIViewKeyframeAnimationOptionBeginFromCurrentState = UIViewAnimationOptionBeginFromCurrentState// 从当前状态开始执行动画
UIViewKeyframeAnimationOptionOverrideInheritedOptions  = UIViewAnimationOptionOverrideInheritedOptions// 不继承父动画设置
UIViewKeyframeAnimationOptionOverrideInheritedDuration = UIViewAnimationOptionOverrideInheritedDuration// 忽略嵌套动画的执行时间设置
  • 日增关键帧的法子
[UIView addKeyframeWithRelativeStartTime:// 这一帧动画开始的时间点(占总时间的比例)
                        relativeDuration:// 这一帧动画的动画时长(占总时间的比例)
                              animations:^{

                                  // 要改变的属性
                              }];
②什么接受UIView block关键帧动画?

咱俩只须要在UIView block根本帧动画的animationsblock里直接增添关键帧就足以了,再在增加关键帧方法的animationsblock里把可动画属性改变为对象值就足以了。

(3)UIView block过渡动画
①什么是UIView block过渡动画?

眼下我们上学了UIView block基础动画和UIView block关键帧动画,但大家知道它俩实际上都以UIView block属性动画,即只可以用来对view的可动画属性做动画。那么风流倜傥旦我们以后想要对view的非动画属性退换时(如label的公文,imageView的图形等)做动画,以致是对view的少数行为(如view的丰裕和移除,五个view之间切换)做动画,那就只可以利用接通动画了。

再正是大家也足以看来,上边UIView block基础动画和UIView block关键帧动画的一些方法里也提供了连片效果十三分配置,相当于说过渡动画也是足以功效于可动画属性的,可是还是能够做可动画属性之外的过多功用。

连片动画的连结效果可参见UIView block基础动画的联网效果,是一模一样的。

  • 给单个视图的不可动画属性或视图行为加多过渡动画
[UIView transitionWithView:// 要做动画的视图
                  duration:// 动画时长
                   options:// 过渡动画效果
                animations:^{

                    // 要改变的不可动画属性或图层行为
                } completion:^(BOOL finished) {

                    // 动画完成的回调
                }];
  • 给三个视图切换时增加过渡动画

注意:

  • 以此办法的连结效果是体未来fromView和toView的父视图上的
  • 以此艺术无需超前把fromView和toView都添在父视图上,只需求先增加fromView就能够了
  • 本条点子在动画进程中,会自动把fromView会从父视图中移除,并把toView加多到父视图上
[UIView transitionFromView:// 旧视图
                    toView:// 新视图
                  duration:// 动画时长
                   options:// 动画过渡效果
                completion:^(BOOL finished) {

                    // 动画完成时的回调
                }];
②什么采纳UIView block过渡动画?

笔者们只需求依据气象是改过单个视图的不可动画属性或视图行为要增添过渡动画还是给多个视图切换时加多过渡动画分选相应的不二等秘书技就能够了。

三、UIView的block动画应用比如

1、UIView block基础动画
  • 让一条弹幕从右往左飘过去
    (清单1.1)
//
//  ViewController.m
//  CoreAnimation
//
//  Created by 意一yiyi on 2017/11/13.
//  Copyright © 2017年 意一yiyi. All rights reserved.
//

#import "ViewController.h"

#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@property (strong, nonatomic) UILabel *label;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.label = [[UILabel alloc] init];
    self.label.backgroundColor = [UIColor magentaColor];
    self.label.frame = CGRectMake(kScreenWidth, 100, kScreenWidth, 30);
    self.label.text = @"嘿Siri,你在哪儿?";
    [self.view addSubview:self.label];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [UIView animateWithDuration:5 animations:^{

        self.label.transform = CGAffineTransformMakeTranslation(-kScreenWidth, 0);
    }];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
  • 漂完之后,我们改换下弹幕内容
    (清单1.2)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [UIView animateWithDuration:5 animations:^{

        self.label.transform = CGAffineTransformMakeTranslation(-kScreenWidth, 0);
    } completion:^(BOOL finished) {

        self.label.text = @"你在哪儿,我就在哪儿!";
    }];
}
  • 我们得以让弹幕匀速地飘过,并不是默许的easyInEasyOut
    (清单1.3)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [UIView animateWithDuration:3 delay:0 options:(UIViewAnimationOptionCurveLinear) animations:^{

        self.label.transform = CGAffineTransformMakeTranslation(-kScreenWidth, 0);
    } completion:^(BOOL finished) {

        self.label.text = @"你在哪儿,我就在哪儿!";
    }];
}
  • 让弹幕弹一弹
    (清单1.4)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [UIView animateWithDuration:3 delay:0 usingSpringWithDamping:0.2 initialSpringVelocity:5 options:(UIViewAnimationOptionCurveLinear) animations:^{

        self.label.transform = CGAffineTransformMakeTranslation(-kScreenWidth, 0);
    } completion:^(BOOL finished) {

        self.label.text = @"你在哪儿,我就在哪儿!";
    }];
}

图片 1

1.gif

2、UIView block关键帧动画

相符FaceBook登陆分界面,登陆失利这种输入框抖动的功效。若是使用基础动画的话,恐怕就得平移一次,再开二个基础动画再平移二遍,得开许多少个基础动画,关键帧动画的话就开三个卡通就足以了,添关键帧就行了。

(清单1.5)

//
//  ViewController.m
//  CoreAnimation
//
//  Created by 意一yiyi on 2017/11/13.
//  Copyright © 2017年 意一yiyi. All rights reserved.
//

#import "ViewController.h"

#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@property (strong, nonatomic) UILabel *label;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.label = [[UILabel alloc] init];
    self.label.backgroundColor = [UIColor cyanColor];
    self.label.frame = CGRectMake(0, 100, kScreenWidth, 30);
    self.label.text = @"请登录";
    [self.view addSubview:self.label];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    self.label.text = @"登录失败";

    [UIView animateKeyframesWithDuration:0.5 delay:0 options:(UIViewKeyframeAnimationOptionCalculationModePaced) animations:^{

        [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:1/4.0 animations:^{

            self.label.transform = CGAffineTransformMakeTranslation(10, 0);
        }];
        [UIView addKeyframeWithRelativeStartTime:1/4.0 relativeDuration:1/4.0 animations:^{

            self.label.transform = CGAffineTransformMakeTranslation(-10, 0);
        }];
        [UIView addKeyframeWithRelativeStartTime:2/4.0 relativeDuration:1/4.0 animations:^{

            self.label.transform = CGAffineTransformMakeTranslation(10, 0);
        }];
        [UIView addKeyframeWithRelativeStartTime:3/4.0 relativeDuration:1/4.0 animations:^{

            self.label.transform = CGAffineTransformMakeTranslation(0, 0);
        }];
    } completion:^(BOOL finished) {

        NSLog(@"动画结束了");
    }];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

图片 2

1.gif

3、UIView block过渡动画
(1)给单个视图的不可动画属性或视图行为增加过渡动画
  • 切换imageView的图样和label的文书

(清单1.6)

//
//  ViewController.m
//  CoreAnimation
//
//  Created by 意一yiyi on 2017/11/13.
//  Copyright © 2017年 意一yiyi. All rights reserved.
//

#import "ViewController.h"

#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@property (strong, nonatomic) UIImageView *imageView;
@property (strong, nonatomic) UILabel *label;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.imageView = [[UIImageView alloc] init];
    self.imageView.frame = CGRectMake(0, 64, kScreenWidth, kScreenWidth);
    self.imageView.image = [UIImage imageNamed:@"0.jpg"];
    [self.view addSubview:self.imageView];

    self.label = [[UILabel alloc] init];
    self.label.frame = CGRectMake(0, kScreenWidth + 100, kScreenWidth, 30);
    self.label.text = @"奥黛丽赫本";
    self.label.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:self.label];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    NSInteger num = arc4random()%7;

    // 改变imageView的图片,淡入淡出效果
    [UIView transitionWithView:self.imageView duration:3 options:(UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveLinear) animations:^{

        self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%ld.jpg", num]];
    } completion:nil];

    // 改变label的文本,二维翻转效果
    [UIView transitionWithView:self.label duration:3 options:(UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionCurveLinear) animations:^{

        switch (num) {
            case 0:
                self.label.text = @"奥黛丽·赫本";
                break;
            case 1:
                self.label.text = @"苏菲·玛索";
                break;
            case 2:
                self.label.text = @"泰勒·斯威夫特";
                break;
            case 3:
                self.label.text = @"安妮·海瑟薇";
                break;
            case 4:
                self.label.text = @"娜塔丽·波特曼";
                break;
            case 5:
                self.label.text = @"凯拉·奈特利";
                break;
            case 6:
                self.label.text = @"杰西卡·阿尔芭";
                break;
        }
    } completion:nil];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

图片 3

1.gif

  • 淡入淡出的功效增多view
    (清单1.7)
//
//  ViewController.m
//  CoreAnimation
//
//  Created by 意一yiyi on 2017/11/13.
//  Copyright © 2017年 意一yiyi. All rights reserved.
//

#import "ViewController.h"

#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@property (strong, nonatomic) UIImageView *imageView;
@property (strong, nonatomic) UILabel *label;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.imageView = [[UIImageView alloc] init];
    self.imageView.frame = CGRectMake(0, 64, kScreenWidth, kScreenWidth);
    self.imageView.image = [UIImage imageNamed:@"0.jpg"];

    self.label = [[UILabel alloc] init];
    self.label.frame = CGRectMake(0, kScreenWidth + 100, kScreenWidth, 30);
    self.label.text = @"奥黛丽赫本";
    self.label.textAlignment = NSTextAlignmentCenter;
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [UIView transitionWithView:self.view duration:3 options:(UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveLinear) animations:^{

        [self.view addSubview:self.imageView];
        [self.view addSubview:self.label];
    } completion:nil];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

图片 4

1.gif

(2)给多少个视图切换时增添过渡动画
  • 比方切换登入和挂号视图(当然这几个也足以UIViewController的法子来替换,有同大器晚成的效应)

图片 5

1.gif

版权声明:本文由365bet体育在线平台【官网首页】发布于365bet体育在线平台,转载请注明出处:鲁难未已,Android补间动画