Android补间动画,它只是国漫发展路上一朵浪花

第一眼惊艳,小编确实没悟出现在的进口已经前行到那些境界了,可是后来冷静的看了三次,抛了滤镜,其实过多地点照旧有无数主题材料,不吹不黑,它只是国漫的二回尝试,一个起来,不是极端,更不是完成。这一代人的知识焦灼把大家都逼得太急了,大家全力地想着把中华的影视动画连续剧输出,和日美韩的影视化行业肩食神,可是高峰不是简单的,还恐怕有太多的动画片人在这里条路上困苦跋涉呢,相信今后的它们会更加好。

android中补间动漫分为透明动漫,旋转动漫,缩放动画和位移移动,动漫可以成效在享有的view上,动漫能够单独行使,也得以四个卡通一齐行使。

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

本子记录

版本号 时间
V1.0 2017.09.24
第生机勃勃写在前方

android动漫中拥有关乎到坐标的地点,坐标原点都以view的左上角。

补间动漫只好在视觉上改善view的图景,不过view实际上照旧以本来的分寸在本来的职位上。譬如把多个view从左上角移动到了右下角,那些这几个view其实还在左上角,只是在视觉上移步到了右下角,假诺view上有一点击事件,那么唯有一点左上角那些地点才干触发点击事件,点右下角不会有别的影响。

  • 在事实上开荒中大家用的最多的还是view,并不是layer,所以愈来愈多景况下大器晚成旦我们要做动漫的话,用的依旧UIView block动画,而不是layer的隐式动漫和彰显动漫;
  • 那边计算一下,能够渔人之利大家在后头两篇学习layer的隐式动漫和显式动漫时作对照,以期加深对动漫片的掌握。

前言

app中好的炫的动漫片能够让客户耳目风姿洒脱新,为产物增色不菲,关于动漫的兑现大家得以用基本动漫、关键帧动漫、体系帧动漫以至基于CoreGraphic的卡通片等等,接下去这几篇小编就介绍下小编能够想到的二种动漫绘制方法。具体德姆o示例已开源到Github —— 杀手传说,感兴趣的能够看本身写的此外几篇。
1. 落到实处动漫方式深度分析(风流倜傥卡塔 尔(阿拉伯语:قطر‎ —— 播放GIF动漫(意气风发卡塔尔
2. 贯彻动漫格局深度分析(二卡塔尔 —— 播放GIF动漫之框架FLAnimatedImage的应用(二卡塔 尔(英语:State of Qatar)
3. 落到实处动画方式深度解析(三卡塔尔 —— 播放连串帧动漫(风姿洒脱卡塔尔国
4. 贯彻动漫方式深度深入解析(四卡塔 尔(阿拉伯语:قطر‎ —— QuartzCore框架(风姿浪漫卡塔 尔(英语:State of Qatar)
5. 落到实处动漫方式深度解析(五卡塔尔 —— QuartzCore框架之CoreAnimation(二卡塔尔国
6. 落实动漫格局深度剖析(六卡塔 尔(英语:State of Qatar) —— Core Animation Basics(三卡塔 尔(阿拉伯语:قطر‎
7. 落到实处动漫形式深度解析(七卡塔 尔(阿拉伯语:قطر‎ —— Core Animation之Setting Up Layer Objects(四卡塔尔国
8. 贯彻动漫格局深度解析(八卡塔 尔(阿拉伯语:قطر‎ —— Core Animation之动漫层内容 (五卡塔尔
9. 贯彻动画方式深度剖析(九卡塔 尔(英语:State of Qatar) —— Core Animation之营造图层层级 (六卡塔 尔(英语:State of Qatar)
10. 贯彻动漫情势深度分析(十卡塔尔国 —— Core Animation之高档动漫技能(七卡塔尔
11. 落到实处动漫情势深度深入分析(十生机勃勃卡塔 尔(阿拉伯语:قطر‎ —— Core Animation之校订图层的默许行为(八卡塔尔
12. 完结动漫方式深度解析(十六卡塔 尔(英语:State of Qatar) —— Core Animation之进步动漫的习性(九卡塔 尔(英语:State of Qatar)
13. 实现动漫方式深度剖判(十六卡塔 尔(英语:State of Qatar) —— Core Animation之图层样式属性动漫(十卡塔尔
14. 达成动画格局深度分析(十九卡塔 尔(阿拉伯语:قطر‎ —— Core Animation之 KVC 扩充(十风姿洒脱卡塔 尔(英语:State of Qatar)
15. 完结动漫情势深度解析(十二卡塔 尔(阿拉伯语:قطر‎ —— Core Animation之可动漫属性 (十六卡塔尔国
16. 达成动漫格局深度剖判(十一卡塔尔 —— Core Animation之CABasicAnimation动漫示例 (十五卡塔 尔(英语:State of Qatar)
17. 达成动画方式深度深入分析(十二卡塔 尔(阿拉伯语:قطر‎ —— Core Animation之CAKeyframeAnimation动画示例 (十八卡塔尔

生机勃勃 用代码的点子写补间动漫

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

具有动漫的公共性质

这里列出具有动漫都有的艺术,包涵两种动漫以至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);

用透明动漫比方

目录

UIView 动漫多少个举足轻重接口

下边我们就看一下多少个首要的接口。

独自选取动漫片

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可动漫属性列表

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
动漫片合集

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);

二、什么是UIView block动画?

2. 甘休动漫标识

+ (void)commitAnimations; 
二 用xml的形式定义补间动漫

用代码定义的动漫都能够用xml的办法达成
首先在res目录下构建二个anim目录
betway必威官网,再在anim目录下构建一个动漫文件,在这动漫文件中早先写xml

1、UIView block动漫的概念、本质及能做如何动漫

3. 安装动画时间

+ (void)setAnimationDuration:(NSTimeInterval)duration; 
生龙活虎致先说有着动漫的公妻儿性

毫异常少说,和方面完全大器晚成致,必要说一点,一时那个属性未有代码提醒,直接手打出来就能够。

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动画的分类

4. 安装动漫代理

+ (void)setAnimationDelegate:(nullable id)delegate;
动漫合集

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属性动漫的生机勃勃种卡塔 尔(阿拉伯语:قطر‎

5. 装置动漫将初步时期理对象实践的SEL

+ (void)setAnimationWillStartSelector:(nullable SEL)selector; 
①什么样是UIView block功底动画?

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

+ (void)setAnimationDidStopSelector:(nullable SEL)selector; 
②怎样行使UIView block根基动漫?

7. 安装动漫延迟试行的岁月

+ (void)setAnimationDelay:(NSTimeInterval)delay;  
(2卡塔 尔(阿拉伯语:قطر‎UIView block关键帧动画(UIView block属性动漫的豆蔻梢头种卡塔尔

8. 设置动漫的重新次数

+ (void)setAnimationRepeatCount:(float)repeatCount; 
①怎么是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关键帧动漫?

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时:动漫将从上一个卡通所钦赐的最后状态早先播报(那个时候上叁个动漫登时结束卡塔尔国。
(3卡塔 尔(阿拉伯语:قطر‎UIView block过渡动漫

11. 装置动漫是还是不是继续推行相反的动漫片

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;   

 // default = NO. used if repeat count is non-zero
①哪些是UIView block过渡动漫?

12. 是否禁用动漫效果

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

+ (void)setAnimationsEnabled:(BOOL)enabled; 
②什么样接纳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,
};

三、怎么样行使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

1、UIView block底蕴动漫比如

UIView 动漫轻松示例

上面大家就看一下UIView动漫兑现的简便示例。

2、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] 停止动画

betway必威官网 1

3、UIView block过渡动漫比方

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(@"动画完成了");
    }];
}

地点正是一个很简短的亲自去做,特轻松,上面看一下效率。

betway必威官网 2

少年老成、UIView可动漫属性列表

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

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,它们有怎么着差别吗?

第一把要动漫的视图进行截图(此处为什么要截图证美素佳儿下,因为要动画的视图下面日常都会有许多的控件,如若让动漫直接操作视图,那么视图带着本身内部的控件,那样做动漫的话会大增系统的承负,进而使动漫成效下落,所感觉了缓和系统负担,使动漫更流畅,才对动画视图进行截图管理已形成动漫效果卡塔 尔(英语:State of Qatar),然后对视图的截图进行动漫操作。

  • cache选为YES时:系统只会在动漫起头的时候对视图举行截图,然后直接到动漫停止,都用起来截的那张图,这种办法好处是缓慢解决系统承当,使动画效果更流畅、更自然。但与上述同类也必会有顽固的疾病:就是当动画视图中的控件有生成的时候,不能够即时更新在视图上,从而达不到实时更新的效率。

  • cache选为NO时:系统会在动漫整个进程中对视图举办实时截图,那样当视图中的控件更新时也会实时突显在动漫进度中,弥补了cache选拔yes得劣势,但这也把cache接纳yes的长处变成缺点,是系统作用变慢,若是动漫视图中的控件过多,会让动漫看起来不那么自然。

此处还要小心:假如要在转变时期改造视图的外观 - 比方,从叁个视图翻转到另一个视图 - 然后采纳容器视图(UIView的实例卡塔 尔(英语:State of Qatar),如下所示:

  • 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动画?

后记

未完,待续~~~

betway必威官网 3

1、UIView block动漫的定义、本质及能做什么样动漫
  • 定义:UIView block动漫正是用来在view层做动漫的意气风发种动漫机制

  • 本质:UIView block动漫的庐山真面目目便是对layer的隐式动画或显式动漫做了生机勃勃层封装,提供轻易的Api,方便大家开拓者使用。具体来讲UIView block底子动漫是对layer的隐式动漫做了打包(因为它们等同可以设置过渡效果/图层行为,展现动漫的根基动漫不可能设置图层行为,当然显式动画的交接动漫也得以功用于可动漫属性,然而前面讲到隐式动画应该会清楚UIView block幼功动画是对layer的隐式动漫做了包装卡塔 尔(英语:State of Qatar),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的图片等卡塔 尔(英语:State of Qatar)做动画,以致是对view的少数行为(如view的增加和移除,多少个view之间切换卡塔 尔(英语:State of Qatar)做动漫,那就只好利用过渡动漫了。

  • 为此我们也就知道了怎么要引进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卡塔 尔(英语:State of Qatar)UIView block过渡动漫
①哪些是UIView block过渡动漫?

日前大家学习了UIView block根基动漫和UIView block关键帧动漫,但大家领会它俩实际上都以UIView block属性动画,即只可以用来对view的可动画属性做动漫。那便是说只要大家将来想要对view的非动漫属性退换时(如label的公文,imageView的图纸等卡塔 尔(英语:State of Qatar)做动漫,以至是对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 = @"你在哪儿,我就在哪儿!";
    }];
}

betway必威官网 4

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

betway必威官网 5

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

betway必威官网 6

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

betway必威官网 7

1.gif

(2卡塔 尔(阿拉伯语:قطر‎给八个视图切换时加多过渡动漫
  • 比方说切换登入和注册视图(当然那一个也足以UIViewController的主意来替换,有形似的效力卡塔 尔(英语:State of Qatar)

betway必威官网 8

1.gif

本文由betway必威发布于betway必威官网,转载请注明出处:Android补间动画,它只是国漫发展路上一朵浪花

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。