iOS ~ UIView Animation动画

1. UIView属性动画

常用方法animateWithDuration

duration,动画时间
delay,动画在延迟多久之后执行
options,动画的展示方式
animations,动画代码
completion,动画完成后代码

// 动画时间,,options,completion
+ (void)animateWithDuration:(NSTimeInterval)duration
                      delay:(NSTimeInterval)delay 
                    options:(UIViewAnimationOptions)options
                 animations:(void (^)(void))animations
                 completion:(void (^ __nullable)(BOOL finished))completion)

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

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

1.1 可实现动画的属性

frame,实现移动的动画效果
bounds,实现内部子控件移动的动画效果
center,实现移动的动画效果
alpha,实现淡入淡出的动画效果
backgroundColor,实现背景色渐变的动画效果
transform,实现移动、缩放、旋转的动画效果,详见iOS CGAffineTransform仿射变换

frame属性
[UIView animateWithDuration:1 animations:^(void) {
    self.animationView.frame = CGRectMake(20, 80, 240, 240);
} completion:nil];
20210510175210383.gif
bounds属性
[UIView animateWithDuration:1 animations:^(void) {
    self.animationView.bounds = CGRectMake(30, 30, 160, 160);
} completion:nil];
20210510175716160.gif
center属性
[UIView animateWithDuration:1 animations:^(void) {
    self.animationView.center = CGPointMake(160, 220);
} completion:nil];
20210510175837234.gif
alpha属性
[UIView animateWithDuration:1 animations:^(void) {
    self.animationView.alpha = 0.2;
} completion:nil];
20210510175915558.gif
backgroundColor属性
[UIView animateWithDuration:1 animations:^(void) {
    self.animationView.backgroundColor = [UIColor blueColor];
} completion:nil];
2021051017593527.gif
transform属性
[UIView animateWithDuration:1 animations:^(void) {
    self.animationView.transform = CGAffineTransformMakeRotation(M_PI_4);
} completion:nil];
20210510175952322.gif

1.2 options动画的展示方式

optionsUIViewAnimationOptions,主要分为3种

动画效果
说明
UIViewAnimationOptionLayoutSubviews 提交动画的时候布局子控件,表示子控件将和父控件一同动画。
UIViewAnimationOptionAllowUserInteraction 动画时允许用户交流,比如触摸
UIViewAnimationOptionBeginFromCurrentState 从当前状态开始动画
UIViewAnimationOptionRepeat 动画无限重复
UIViewAnimationOptionAutoreverse 执行动画回路,前提是设置动画无限重复
UIViewAnimationOptionOverrideInheritedDuration 忽略外层动画嵌套的执行时间
UIViewAnimationOptionOverrideInheritedCurve 忽略外层动画嵌套的时间变化曲线
UIViewAnimationOptionAllowAnimatedContent 通过改变属性和重绘实现动画效果,如果key没有提交动画将使用快照
UIViewAnimationOptionShowHideTransitionViews 用显隐的方式替代添加移除图层的动画效果
UIViewAnimationOptionOverrideInheritedOptions 忽略嵌套继承的选项
动画运行加速
说明
UIViewAnimationOptionCurveEaseInOut 由慢到快再到慢
UIViewAnimationOptionCurveEaseIn 由慢到快
UIViewAnimationOptionCurveEaseOut 由快到慢
UIViewAnimationOptionCurveLinear 匀速

分别采用四种加速模式UIViewAnimationOptionCurveEaseInOutUIViewAnimationOptionCurveEaseInUIViewAnimationOptionCurveEaseOutUIViewAnimationOptionCurveLinear

20210511101157683.gif

转场动画
说明
UIViewAnimationOptionTransitionNone 无转场动画
UIViewAnimationOptionTransitionFlipFromLeft 转场从左翻转
UIViewAnimationOptionTransitionFlipFromRight 转场从右翻转
UIViewAnimationOptionTransitionCurlUp 上卷转场
UIViewAnimationOptionTransitionCurlDown 下卷转场
UIViewAnimationOptionTransitionCrossDissolve 转场交叉消失
UIViewAnimationOptionTransitionFlipFromTop 转场从上翻转
UIViewAnimationOptionTransitionFlipFromBottom 转场从下翻转

1.3 弹簧效果

弹簧效果的方法多了两个参数dampingRatiovelocity

+ (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;
dampingRatio参数的值为0.0f到1.0f,数值越小「弹簧」的振动效果越明显。

分别设置为0.2、0.5和1,显示如下:


20210511102040426.gif
velocity参数表示初始的速度,数值越大一开始移动越快。

分别设置为5、10和20,效果如下:


20210511102325668.gif

2. UIView过渡动画

当一个视图的内容需要变化时,可以使用过渡动画。
+ (void)transitionWithView:(UIView *)view
                  duration:(NSTimeInterval)duration
                   options:(UIViewAnimationOptions)options
                animations:(void (^ __nullable)(void))animations
                completion:(void (^ __nullable)(BOOL finished))completion);
view是参与转换的视图,optionsUIViewAnimationOptions类型,
UIViewAnimationOptionTransitionCurlUp UIViewAnimationOptionTransitionCurlDown
20210511141507722.gif
20210511141544148.gif
UIViewAnimationOptionTransitionCrossDissolve
20210511141634548.gif
UIViewAnimationOptionTransitionFlipFromLeft UIViewAnimationOptionTransitionFlipFromRight
20210511142132839.gif
20210511142141969.gif
UIViewAnimationOptionTransitionFlipFromTop UIViewAnimationOptionTransitionFlipFromBottom
20210511142226598.gif
20210511142234406.gif
还有一个过渡动画的方法,在动画过程中,首先将fromView从父视图中删除,然后将toView添加,就是做了一个替换操作。
+ (void)transitionFromView:(UIView *)fromView
                    toView:(UIView *)toView
                  duration:(NSTimeInterval)duration
                   options:(UIViewAnimationOptions)options
                completion:(void (^ __nullable)(BOOL finished))completion);

3. UIView关键帧动画

duration,总持续时间
options,枚举UIViewKeyframeAnimationOptions
frameStartTime,相对开始时间
frameDuration,相对持续时间

+ (void)animateKeyframesWithDuration:(NSTimeInterval)duration
                               delay:(NSTimeInterval)delay
                             options:(UIViewKeyframeAnimationOptions)options
                          animations:(void (^)(void))animations
                          completion:(void (^ __nullable)(BOOL finished))completion);
+ (void)addKeyframeWithRelativeStartTime:(double)frameStartTime
                        relativeDuration:(double)frameDuration
                              animations:(void (^)(void))animations);
options可以指定动画效果:
说明
UIViewKeyframeAnimationOptionLayoutSubviews 提交动画的时候布局子控件,表示子控件将和父控件一同动画。
UIViewKeyframeAnimationOptionAllowUserInteraction 动画时允许用户交流,比如触摸
UIViewKeyframeAnimationOptionBeginFromCurrentState 从当前状态开始动画
UIViewKeyframeAnimationOptionRepeat 动画无限重复
UIViewKeyframeAnimationOptionAutoreverse 执行动画回路,前提是设置动画无限重复
UIViewKeyframeAnimationOptionOverrideInheritedDuration 忽略外层动画嵌套的执行时间
UIViewKeyframeAnimationOptionOverrideInheritedOptions 忽略外层动画嵌套的时间变化曲线
UIViewKeyframeAnimationOptionCalculationModeLinear 选择使用一个简单的线性插值计算的时候关键帧之间的值
UIViewKeyframeAnimationOptionCalculationModeDiscrete 选择不插入关键帧之间的值,而是直接跳到每个新的关键帧的值
UIViewKeyframeAnimationOptionCalculationModePaced 选择计算中间帧数值算法使用一个简单的节奏。这个选项的结果在一个均匀的动画
UIViewKeyframeAnimationOptionCalculationModeCubic 选择计算中间帧使用默认卡特莫尔罗花键,通过关键帧的值
UIViewKeyframeAnimationOptionCalculationModeCubicPaced 选择计算中间帧使用立方计划而忽略的时间属性动画

示例代码

[UIView animateKeyframesWithDuration:1 delay:0 options:0 animations:^{
    [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0.2 animations:^{
        self.magentaView.frame = CGRectMake(120, 100, 160, 160);
    }];
    [UIView addKeyframeWithRelativeStartTime:0.2 relativeDuration:0.7 animations:^{
        self.magentaView.frame = CGRectMake(160, 240, 80, 80);
    }];
    [UIView addKeyframeWithRelativeStartTime:0.7 relativeDuration:1 animations:^{
        self.magentaView.frame = CGRectMake(20, 100, 160, 160);
    }];
} completion:nil];

源码下载: https://github.com/nai-chen/IosBlog

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • UIView动画简介 UIView动画实质上是对Core Animation的封装,提供简洁的动画接口。 UIVi...
    zhaihongxia阅读 816评论 0 0
  • UIView Animation 是UIKit 框架中,针对UIView 动画做的封装。 一、 首先看 UIVie...
    圉湢阅读 1,578评论 0 0
  • iOS的动画效果一直都很棒很,给人的感觉就是很炫酷很流畅,起到增强用户体验的作用。在APP开发中实现动画效果有很多...
    白水灬煮一切阅读 291评论 0 1
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 3,076评论 1 23
  • 逐帧动画 前面介绍了核心动画中大部分动画类型,但是做过动画处理的朋友都知道,在动画制作中还有一种动画类型“逐帧动画...
    被吹落的风阅读 327评论 0 0