实现动画方式深度解析,Android补间动画
分类:必威-动漫动画

樱jiang的行李装运和卡通片的情景设计真就是三个看点,是本人在高不时各个双休日都非看不可的动漫——即便老妈那时候常说:“怎么看三姨娘看的东西。”

卡通合集

5 AnimationSet
卡通的合集,使用它能够调控后面列出的种种动画中的黄金时代种可能两种生龙活虎并实践
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);
(2)给四个视图切换时增多过渡动漫
  • 比方说切换登陆和注册视图(当然这一个也足以UIViewController的法子来替换,有近似的职能)

必威体育betway888 1

1.gif

11. 安装动漫是不是继续施行相反的动画片

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;   

 // default = NO. used if repeat count is non-zero
意气风发 用代码的艺术写补间动漫
2、UIView block动漫的归类

UIView block动漫可分为UIView block属性动漫和UIView block过渡动漫,而UIView block属性动漫又可分为UIView block底工动漫和UIView block关键帧动漫,接下去我们将独家介绍UIView block根基动漫UIView block关键帧动漫UIView block过渡动漫

1. 动漫开首

+ (void)beginAnimations:(nullable NSString *)animationID context:(nullable void *)context;  
// additional context info passed to will start/did stop selectors. begin/commit can be nested
全部动漫的集体性质

这里列出全数动漫都有的艺术,满含八种动漫以及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)UIView block底子动漫(UIView block属性动漫的风流倜傥种)

8. 设置动漫的再一次次数

+ (void)setAnimationRepeatCount:(float)repeatCount; 

android中补间动漫分为透明动漫,旋转动漫,缩放动漫和位移移动,动漫能够成效在装有的view上,动漫能够独立选用,也可以三个卡通一齐使用。

后生可畏、UIView可动漫属性列表

7. 设置动漫延迟实践的岁月

+ (void)setAnimationDelay:(NSTimeInterval)delay;  
珍视写在头里

android动漫中拥有涉嫌到坐标的地点,坐标原点都是view的左上角。

补间动漫只可以在视觉上改进view的意况,然则view实际上照旧以本来的高低在本来的职位上。比方把二个view从左上角移动到了右下角,这一个这些view其实还在左上角,只是在视觉上移步到了右下角,假若view上有一点击事件,那么唯有一点左上角那么些地点手艺触发点击事件,点右下角不会有此外反响。

(2)UIView block关键帧动漫

5. 装置动画将上虎时期理对象施行的SEL

+ (void)setAnimationWillStartSelector:(nullable SEL)selector; 
单身行使动漫片

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 实行动漫

在开端读书Core Animation提供的layer的隐式动漫和layer的显式动漫以前,大家先来计算一下UIView block动画,因为:

14. block动画

有关UIView的block动漫,全部在UIView的叁个分拣UIViewAnimationWithBlocks里面。

@interface UIView(UIViewAnimationWithBlocks)

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0, completion = NULL

/* Performs `animations` using a timing curve described by the motion of a spring. When `dampingRatio` is 1, the animation will smoothly decelerate to its final model values without oscillating. Damping ratios less than 1 will oscillate more and more before coming to a complete stop. You can use the initial spring velocity to specify how fast the object at the end of the simulated spring was moving before it was attached. It's a unit coordinate system, where 1 is defined as travelling the total animation distance in a second. So if you're changing an object's position by 200pt in this animation, and you want the animation to behave as if the object was moving at 100pt/s before the animation started, you'd pass 0.5. You'll typically want to pass 0 for the velocity. */ 
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // toView added to fromView.superview, fromView removed from its superview

/* Performs the requested system-provided animation on one or more views. Specify addtional animations in the parallelAnimations block. These additional animations will run alongside the system animation with the same timing and duration that the system animation defines/inherits. Additional animations should not modify properties of the view on which the system animation is being performed. Not all system animations honor all available options.
 */
+ (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray<__kindof UIView *> *)views options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))parallelAnimations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);

@end

相通先说富有动漫的集体性质

无须多说,和地点完全风姿浪漫致,必要说一点,偶尔这么些属性未有代码提醒,直接手打出去就能够。

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 施行动漫
加载动漫,实行动漫

  • 在骨子里花销中大家用的最多的依然view,并非layer,所以愈来愈多境况下假使大家要做动漫的话,用的依然UIView block动漫,实际不是layer的隐式动漫和出示动漫;
  • 此地计算一下,能够低价大家在背后两篇学习layer的隐式动漫和显式动漫时作对照,以期加深对动漫的知道。

2. block动画

ios 4.0从此现身的block动漫,这种动漫也是我们工程中常用的动漫片方式。

  • 最洗练的Block动漫:包括时间和动漫片
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations NS_AVAILABLE_IOS(4_0); 

// delay = 0.0, options = 0, completion = NULL
  • 包蕴动漫达成回调的block动漫
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

 // delay = 0.0, options = 0
  • 包罗延迟时间和过于效果的卡通
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

那边有贰个枚举值UIViewAnimationOptions,它正是描述过度效果的枚举值。

 UIViewAnimationOptionLayoutSubviews            //进行动画时布局子控件
 UIViewAnimationOptionAllowUserInteraction      //进行动画时允许用户交互
 UIViewAnimationOptionBeginFromCurrentState     //从当前状态开始动画
 UIViewAnimationOptionRepeat                    //无限重复执行动画
 UIViewAnimationOptionAutoreverse               //执行动画回路
 UIViewAnimationOptionOverrideInheritedDuration //忽略嵌套动画的执行时间设置
 UIViewAnimationOptionOverrideInheritedCurve    //忽略嵌套动画的曲线设置
 UIViewAnimationOptionAllowAnimatedContent      //转场:进行动画时重绘视图
 UIViewAnimationOptionShowHideTransitionViews   //转场:移除(添加和移除图层的)动画效果
 UIViewAnimationOptionOverrideInheritedOptions  //不继承父动画设置

 UIViewAnimationOptionCurveEaseInOut            //时间曲线,慢进慢出(默认值)
 UIViewAnimationOptionCurveEaseIn               //时间曲线,慢进
 UIViewAnimationOptionCurveEaseOut              //时间曲线,慢出
 UIViewAnimationOptionCurveLinear               //时间曲线,匀速

 UIViewAnimationOptionTransitionNone            //转场,不使用动画
 UIViewAnimationOptionTransitionFlipFromLeft    //转场,从左向右旋转翻页
 UIViewAnimationOptionTransitionFlipFromRight   //转场,从右向左旋转翻页
 UIViewAnimationOptionTransitionCurlUp          //转场,下往上卷曲翻页
 UIViewAnimationOptionTransitionCurlDown        //转场,从上往下卷曲翻页
 UIViewAnimationOptionTransitionCrossDissolve   //转场,交叉消失和出现
 UIViewAnimationOptionTransitionFlipFromTop     //转场,从上向下旋转翻页
 UIViewAnimationOptionTransitionFlipFromBottom  //转场,从下向上旋转翻页

下边大家依然先看一下演示代码。

- (void)demoBlockUIViewAnimation
{
    self.animationView.frame = CGRectMake(50.0, 250.0, 200.0, 200.0);

    [UIView animateWithDuration:3.0 animations:^{
        self.animationView.backgroundColor = [UIColor blueColor];
    } completion:^(BOOL finished) {
        NSLog(@"动画完成了");
    }];
}

地点就是一个很简短的示范,特别简单,上面看一下职能。

必威体育betway888 2

二 用xml的秘诀定义补间动漫

用代码定义的动漫都足以用xml的艺术落实
率先在res目录下树立三个anim目录
再在anim目录下树立贰个动漫文件,在这里动漫文件中开头写xml

2、UIView block关键帧动漫例如

2. 告终动漫标志

+ (void)commitAnimations; 
动漫片合集

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);
2、UIView block动漫的归类

10. 设置是不是从日前情景早先播报动漫

+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; 

 // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).

举例上四个动漫正在播放,且未有播放达成,咱们就要举办叁个新的卡通:

  • 当为YES时:动漫将从上一个卡通所在的景况开头播报
  • 当为NO时:动漫将从上二个动漫片所钦赐的末梢状态开播(当时上三个卡通即刻结束)。
①什么样是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) {

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

后记

未完,待续~~~

必威体育betway888 3

①如何是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) {

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

本子记录

版本号 时间
V1.0 2017.09.24
1、UIView block幼功动漫比如

9. 设置动漫的曲线

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve; 

此间有二个枚举值,如下所示:

typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
    UIViewAnimationCurveEaseInOut,         // slow at beginning and end
    UIViewAnimationCurveEaseIn,            // slow at beginning
    UIViewAnimationCurveEaseOut,           // slow at end
    UIViewAnimationCurveLinear,
};

二、什么是UIView block动画?

4. 装置动漫代理

+ (void)setAnimationDelegate:(nullable id)delegate;
1、UIView block动漫的概念、本质及能做什么动漫

3. 安装动漫时间

+ (void)setAnimationDuration:(NSTimeInterval)duration; 
(1)UIView block底蕴动漫

1. 归纳动漫

笔者们先看一下精简的动漫演示。

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) UIView *animationView;

@end

@implementation ViewController

#pragma mark - Override Base Function

- (void)viewDidLoad
{
    [super viewDidLoad];

    //UI
    [self setupUI];

    //UIView动画
    [self demoPropertyUIViewAnimation];
}

#pragma mark - Object Private Function

- (void)demoPropertyUIViewAnimation
{
    [UIView beginAnimations:@"animation" context:nil];
    [UIView setAnimationDuration:3.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationWillStartSelector:@selector(startAnimation)];
    [UIView setAnimationDidStopSelector:@selector(stopAnimation)];
    [UIView setAnimationRepeatCount:10];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    self.animationView.frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
    [UIView commitAnimations];
}

- (void)setupUI
{
    self.view.backgroundColor = [UIColor lightGrayColor];

    self.animationView = [[UIView alloc] initWithFrame:CGRectMake(250.0, 250.0, 200.0, 200.0)];
    [self.view addSubview:self.animationView];
    self.animationView.backgroundColor = [UIColor redColor];
}

#pragma mark - Action && Notification

- (void)startAnimation
{
    NSLog(@"开始动画");
}

- (void)stopAnimation
{
    NSLog(@"停止动画");
}

@end

下边大家看一下出口以至动画效果。

2017-09-24 20:22:24.254 JJUIViewAnimation_demo9[3301:274498] 开始动画
2017-09-24 20:22:54.252 JJUIViewAnimation_demo9[3301:274498] 停止动画

必威体育betway888 4

二、什么是UIView block动画?

12. 是否禁止使用动漫效果

对象属性还是会被转移,只是未有动漫效果。

+ (void)setAnimationsEnabled:(BOOL)enabled; 
(2)UIView block关键帧动漫(UIView block属性动漫的风姿洒脱种)

UIView动画

UIView动漫也是系统提供的风姿罗曼蒂克种动漫完毕方式,这种方法是实现很简短。UIView动漫能够看作是对Core Animation的封装。

UIView能够拓宽动漫属性如下:

  • frame
  • bounds
  • center
  • transform
  • alpha
  • backgroundColor
  • contentStretch

下边我们看一下UIView提供了关于动漫的接口。

@interface UIView(UIViewAnimation)

+ (void)beginAnimations:(nullable NSString *)animationID context:(nullable void *)context;  // additional context info passed to will start/did stop selectors. begin/commit can be nested
+ (void)commitAnimations;                                                 // starts up any animations when the top level animation is commited

// no getters. if called outside animation block, these setters have no effect.
+ (void)setAnimationDelegate:(nullable id)delegate;                          // default = nil
+ (void)setAnimationWillStartSelector:(nullable SEL)selector;                // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context
+ (void)setAnimationDidStopSelector:(nullable SEL)selector;                  // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
+ (void)setAnimationDuration:(NSTimeInterval)duration;              // default = 0.2
+ (void)setAnimationDelay:(NSTimeInterval)delay;                    // default = 0.0
+ (void)setAnimationStartDate:(NSDate *)startDate;                  // default = now ([NSDate date])
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve;              // default = UIViewAnimationCurveEaseInOut
+ (void)setAnimationRepeatCount:(float)repeatCount;                 // default = 0.0.  May be fractional
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;    // default = NO. used if repeat count is non-zero
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState;  // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache;  // current limitation - only one per begin/commit block

+ (void)setAnimationsEnabled:(BOOL)enabled;                         // ignore any attribute changes while set.
#if UIKIT_DEFINE_AS_PROPERTIES
@property(class, nonatomic, readonly) BOOL areAnimationsEnabled;
#else
+ (BOOL)areAnimationsEnabled;
#endif
+ (void)performWithoutAnimation:(void (NS_NOESCAPE ^)(void))actionsWithoutAnimation NS_AVAILABLE_IOS(7_0);

#if UIKIT_DEFINE_AS_PROPERTIES
@property(class, nonatomic, readonly) NSTimeInterval inheritedAnimationDuration NS_AVAILABLE_IOS(9_0);
#else
+ (NSTimeInterval)inheritedAnimationDuration NS_AVAILABLE_IOS(9_0);
#endif

@end


@interface UIView(UIViewAnimationWithBlocks)

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0, completion = NULL

/* Performs `animations` using a timing curve described by the motion of a spring. When `dampingRatio` is 1, the animation will smoothly decelerate to its final model values without oscillating. Damping ratios less than 1 will oscillate more and more before coming to a complete stop. You can use the initial spring velocity to specify how fast the object at the end of the simulated spring was moving before it was attached. It's a unit coordinate system, where 1 is defined as travelling the total animation distance in a second. So if you're changing an object's position by 200pt in this animation, and you want the animation to behave as if the object was moving at 100pt/s before the animation started, you'd pass 0.5. You'll typically want to pass 0 for the velocity. */ 
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // toView added to fromView.superview, fromView removed from its superview

/* Performs the requested system-provided animation on one or more views. Specify addtional animations in the parallelAnimations block. These additional animations will run alongside the system animation with the same timing and duration that the system animation defines/inherits. Additional animations should not modify properties of the view on which the system animation is being performed. Not all system animations honor all available options.
 */
+ (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray<__kindof UIView *> *)views options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))parallelAnimations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);

@end


@interface UIView (UIViewKeyframeAnimations)

+ (void)animateKeyframesWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);
+ (void)addKeyframeWithRelativeStartTime:(double)frameStartTime relativeDuration:(double)frameDuration animations:(void (^)(void))animations NS_AVAILABLE_IOS(7_0); // start time and duration are values between 0.0 and 1.0 specifying time and duration relative to the overall time of the keyframe animation

@end

②哪些使用UIView block过渡动画?

UIView 动漫轻便示例

上边我们就看一下UIView动漫得以达成的简约示例。

三、UIView的block动漫应用比方

6. 安装动漫截至时期理对象执行的SEL

+ (void)setAnimationDidStopSelector:(nullable SEL)selector; 
②什么样采纳UIView block关键帧动漫?

UIView 动画多少个第生机勃勃接口

上边大家就看一下多少个根本的接口。

(3)UIView block过渡动画

13. 设置视图的连接效果

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; 

 // current limitation - only one per begin/commit block

此地有一个枚举UIViewAnimationTransition,如下所示:

typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};
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 = @"你在哪儿,我就在哪儿!";
    }];
}

必威体育betway888 5

1.gif

3. 转场动漫

下边直接看代码。

- (void)demoTransitionUIViewAnimation
{
    self.animationView.frame = CGRectMake(50.0, 250.0, 200.0, 200.0);

    [UIView beginAnimations:@"Animation" context:nil];
    [UIView setAnimationDuration:3.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationWillStartSelector:@selector(startAnimation)];
    [UIView setAnimationDidStopSelector:@selector(stopAnimation)];
    [UIView setAnimationRepeatCount:5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.animationView cache:YES];
    self.animationView.backgroundColor = [UIColor blueColor];
    [UIView commitAnimations];
}

转场动漫有个参数cache,能够安装为YES只怕NO,它们有何样界别吗?

首先把要动漫的视图实行截图(此处为何要截图证美素佳儿下,因为要动漫的视图上面平时都会有为数不菲的控件,假使让动漫直接操作视图,那么视图带着自家内部的控件,那样做动漫的话会追加系统的担当,进而使动漫功用减弱,所以为了缓和系统承当,使动漫更流畅,才对动漫视图举行截图管理已到位动漫效果),然后对视图的截图实行动漫操作。

  • cache选为YES时:系统只会在动漫初始的时候对视图进行截图,然后径直到动漫甘休,都用起来截的那张图,这种方法好处是缓慢解决系统担任,使动漫效果更通畅、更自然。但如此也必会有欠缺:正是当动漫视图中的控件有变动的时候,不能够登时更新在视图上,进而达不到实时更新的成效。

  • cache选为NO时:系统会在动漫整个进程中对视图实行实时截图,那样当视图中的控件更新时也会实时显示在动画进度中,弥补了cache接收yes得瑕疵,但那也把cache接受yes的长处变成瑕玷,是系统效用变慢,若是动漫视图中的控件过多,会让动漫片看起来不那么自然。

此间还要小心:若是要在转换时期更动视图的外观 - 举个例子,从三个视图翻转到另一个视图 - 然后使用容器视图(UIView的实例),如下所示:

  • Begin an animation block.
  • Set the transition on the container view.
  • Remove the subview from the container view.
  • Add the new subview to the container view.
  • Commit the animation block.

iOS 4.0及更加高版本不鼓劲利用此方式。 您应该使用transition(with:duration:options:animations:completion:) 主意来推行转变。

②哪些利用UIView block底蕴动漫?

前言

app中好的炫的动漫能够让客商耳目豆蔻梢头新,为产物增色不菲,关于动漫的完结大家可以用为重动画、关键帧动漫、类别帧动漫以致根据CoreGraphic的动画等等,接下去这几篇小编就介绍下本人能够想到的两种动漫绘制方法。具体德姆o示例已开源到Github —— 徘徊花传说,感兴趣的能够看作者写的别的几篇。
1. 得以达成动漫方式深度深入分析(生机勃勃) —— 播放GIF动漫(少年老成)
2. 贯彻动漫形式深度深入解析(二) —— 播放GIF动画之框架FLAnimatedImage的应用(二)
3. 达成动漫格局深度分析(三) —— 播放种类帧动画(大器晚成)
4. 兑现动漫方式深度剖判(四) —— QuartzCore框架(生龙活虎)
5. 兑现动画方式深度解析(五) —— QuartzCore框架之CoreAnimation(二)
6. 完结动漫情势深度解析(六) —— Core Animation Basics(三)
7. 达成动漫格局深度深入分析(七) —— Core Animation之Setting Up Layer Objects(四)
8. 兑现动漫方式深度剖判(八) —— Core Animation之动漫层内容 (五)
9. 兑现动漫格局深度剖析(九) —— Core Animation之创设图层层级 (六)
10. 兑现动画格局深度解析(十) —— Core Animation之高端动漫手艺(七)
11. 贯彻动漫情势深度剖判(十生龙活虎) —— Core Animation之改良图层的暗许行为(八)
12. 贯彻动漫方式深度深入分析(十九) —— Core Animation之进步动漫的属性(九)
13. 落到实处动漫格局深度剖析(十一) —— Core Animation之图层样式属性动漫(十)
14. 完结动漫方式深度解析(十九) —— Core Animation之 KVC 扩张(十后生可畏)
15. 实现动漫格局深度深入深入分析(十四) —— Core Animation之可动画属性 (十五)
16. 兑现动漫格局深度深入分析(十八) —— Core Animation之CABasicAnimation动画示例 (十八)
17. 兑现动漫情势深度分析(十三) —— Core Animation之CAKeyframeAnimation动漫示例 (十二)

3、UIView block过渡动漫

风度翩翩、UIView可动漫属性列表

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

①怎么是UIView block底工动漫?
②什么接纳UIView block底蕴动漫?

大家只须求在UIView block底工动漫的animationsblock里平昔把可动漫属性改动为目的值就能够了。

①哪些是UIView block过渡动漫?

三、如何利用UIView block动漫?(应用举个例子)

①怎样是UIView block关键帧动漫?

目录

(3)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:^{

                                  // 要改变的属性
                              }];
3、UIView block过渡动漫举例

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

必威体育betway888 6

1.gif

②什么利用UIView block过渡动漫?

小编们只要求依赖气象是更动单个视图的不可动漫属性或视图行为要增多过渡动漫还是给三个视图切换时增加过渡动漫分选相应的方法就能够了。

1、UIView block动漫的概念、本质及能做什么样动漫
  • 定义:Betway精装版,UIView block动漫便是用来在view层做动漫的生龙活虎种动漫机制

  • 必威体育betway888,本质: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做一些行为能做动漫。
②哪些接受UIView block关键帧动漫?

小编们只要求在UIView block首要帧动漫的animationsblock里一直扩展关键帧就可以了,再在扩大关键帧方法的animationsblock里把可动漫属性退换为对象值就能够了。

(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

必威体育betway888 7

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

必威体育betway888 8

1.gif

本文由必威体育betway888发布于必威-动漫动画,转载请注明出处:实现动画方式深度解析,Android补间动画

上一篇:你们喜欢狐妖小红娘里的谁,喜剧爱情动画 下一篇:贫乳美胸萝莉御姐美男热血搞笑灵异内涵,狐妖小红娘
猜你喜欢
热门排行
精彩图文