Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何设置UIView关键帧动画的动画曲线(``func UIView.animateKeyframes()`)

如何设置UIView关键帧动画的动画曲线(``func UIView.animateKeyframes()`)
EN

Stack Overflow用户
提问于 2021-06-20 13:52:26
回答 1查看 178关注 0票数 2

通过UIView关键帧动画,可以创建经过一系列步骤的视图动画。函数animateKeyframes(withDuration:delay:options:animations:completion:)有一个UIView.KeyframeAnimationOptions类型的options参数。我希望这可以让我选择一个整体的定时曲线来应用于组合的动画集。它似乎应用了缓入、缓出的默认动画曲线,并且似乎不允许您像UIView.animate()系列方法那样指定计时曲线。如果我想要线性计时,只是缓入,还是缓出呢?

EN

回答 1

Stack Overflow用户

发布于 2021-06-20 13:52:26

有趣的是,如果您能够弄清楚如何将UIView.animate()方法(类型为UIView.AnimationOptions)传递给animateKeyframes(withDuration:delay:options:animations:completion:),那么它们的动画选项就可以工作。不幸的是,对于像线性、缓入或缓出这样的定时曲线,没有现有的常量。展示了如何将值从UIView.AnimationOptions常量“强制”到UIView.KeyframeAnimationOptions OptionSet中:

代码语言:javascript
运行
AI代码解释
复制
extension UIViewKeyframeAnimationOptions {

    init(animationOptions: UIViewAnimationOptions) {
        rawValue = animationOptions.rawValue
    }

}

我更进一步,为不同的计时函数定义了常量。(我不知道为什么苹果不定义这些。这看起来很荒谬,但你就是这样。)

我对UIView.KeyframeAnimationOptions的扩展如下所示:

代码语言:javascript
运行
AI代码解释
复制
extension UIView.KeyframeAnimationOptions {
    static var curveLinear: UIView.KeyframeAnimationOptions =
        UIView.KeyframeAnimationOptions(rawValue:UIView.AnimationOptions.curveLinear.rawValue)

    static var curveEaseInOut: UIView.KeyframeAnimationOptions =
        UIView.KeyframeAnimationOptions(rawValue:UIView.AnimationOptions.curveEaseInOut.rawValue)

    static var curveEaseIn: UIView.KeyframeAnimationOptions =
        UIView.KeyframeAnimationOptions(rawValue:UIView.AnimationOptions.curveEaseIn.rawValue)

    static var curveEaseOut: UIView.KeyframeAnimationOptions =
        UIView.KeyframeAnimationOptions(rawValue:UIView.AnimationOptions.curveEaseOut.rawValue)

    init(animationOptions: UIView.AnimationOptions) {
        self.init(rawValue: animationOptions.rawValue)
    }
}

通过该扩展,您可以像在调用UIView.animate()方法时一样使用计时曲线值:

代码语言:javascript
运行
AI代码解释
复制
UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [.curveLinear]) {
    // Your animation keyframe steps here
}

UIView.AnimationOptions中定义的一些其他标志可能也适用于UIView.KeyframeAnimationOptions。您可以使用允许将UIView.AnimationOptions映射到UIView.KeyframeAnimationOptions的方法,或者以添加计时曲线标志的相同方式向UIView.KeyframeAnimationOptions添加其他标志也很简单。

编辑:

我对UIView.animate()animateKeyframes()匹配的选项中的标志感到好奇。我编写了一些代码来记录这两个OptionSets的所有值,得到的结果如下:

代码语言:javascript
运行
AI代码解释
复制
KeyframeAnimationOptions:
option value 0x00000001 = layoutSubviews
option value 0x00000002 = allowUserInteraction
option value 0x00000004 = beginFromCurrentState
option value 0x00000008 = repeat
option value 0x00000010 = autoreverse
option value 0x00000020 = overrideInheritedDuration
option value 0x00000200 = overrideInheritedOptions

option value 0x00000000 = calculationModeLinear
option value 0x00000400 = calculationModeDiscrete
option value 0x00000800 = calculationModePaced
option value 0x00000C00 = calculationModeCubic
option value 0x00001000 = calculationModeCubicPaced

UIView.AnimationOptions:
option value 0x00000001 = layoutSubviews
option value 0x00000002 = allowUserInteraction
option value 0x00000004 = beginFromCurrentState
option value 0x00000008 = repeat
option value 0x00000010 = autoreverse
option value 0x00000020 = overrideInheritedDuration
option value 0x00000200 = overrideInheritedOptions

option value 0x00000040 = overrideInheritedCurve
option value 0x00000080 = allowAnimatedContent
option value 0x00000100 = showHideTransitionViews
option value 0x00000000 = curveEaseInOut
option value 0x00010000 = curveEaseIn
option value 0x00020000 = curveEaseOut
option value 0x00030000 = curveLinear
option value 0x00100000 = transitionFlipFromLeft
option value 0x00200000 = transitionFlipFromRight
option value 0x00300000 = transitionCurlUp
option value 0x00400000 = transitionCurlDown
option value 0x00500000 = transitionCrossDissolve
option value 0x00600000 = transitionFlipFromTop
option value 0x00700000 = transitionFlipFromBottom
option value 0x03000000 = preferredFramesPerSecond60
option value 0x07000000 = preferredFramesPerSecond30

两个集合中的前7个标志具有相同的名称和相同的值。KeyframeAnimationOptions的0值是calculationModeLinear,UIView.AnimationOptions的值是curveEaseInOut。它会导致关键帧和“常规”UIView动画的缓入/缓出计时。

所有其他常量的值在两个OptionSets中都是唯一的,这表明其他一些UIView.AnimationOptions可能适用于关键帧动画。不过,我只测试了时序曲线值,这些值都如预期的那样工作。

编辑#2:

关键帧动画标志(如calculationModeLinear、calculationModeCubic和calculationModeCubicPaced)和视图动画标志(如curveLinear、curveEaseInOut等)的方式不是很明显。将交互,因为关键帧动画标志也与动画计时相关。我写了一个测试应用程序来看看他们是怎么做的。事实证明,UIView.AnimationOptions计时曲线标志会影响整个关键帧动画的整体计时。(整个关键帧动画的开始和停止方式。)

您可以从github 下载示例项目。

很难看到缓入/缓出UIView动画计时与立方关键帧动画选项之一相结合。使用关键帧calculationModeLinear模式可以更容易地看到缓入/缓出。

下面是这个组合的视频:

(请注意青色正方形如何在返回到其起点之前在动画矩形的右下角停止。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68056506

复制
相关文章
iOS动画专题·UIView二维形变动画与CAAnimation核心动画(transform动画,基础,关键帧,组动画,路径动画,贝塞尔曲线)
总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动画,基于CAAnimation及其子类的动画,基于CG的动画。这篇文章着重总结前两种动画。
陈满iOS
2018/09/10
3.4K0
iOS动画专题·UIView二维形变动画与CAAnimation核心动画(transform动画,基础,关键帧,组动画,路径动画,贝塞尔曲线)
iOS14开发-动画
动画往往能起到增强用户体验的作用,在 iOS 开发中,我们可以使用 UIKit 提供的动画来实现,简称 UIView 动画。UIView 动画实质上是对 Core Animation(核心动画)的封装,提供简洁的动画 API。
YungFan
2021/04/23
8390
iOS动画三板斧(一)--UIView动画前言UIView 动画
iOS 精致的app,离不开酷炫合宜的动画。而iOS中的动画实现也有多种不同的方式。今天就来介绍一下iOS中的动画。本篇是第一篇,就讲一下最简单的动画实现方式,初学动画,简单的动画一般都是用这种方式来实现的。
Haley_Wong
2018/08/22
9350
iOS动画三板斧(一)--UIView动画前言UIView 动画
iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题
iOS的各种动画相漂亮,相信这是吸引很多人买iPhone的原因之一。不仅如此,这还是吸引我做iOS开发的一大原因,因为在iOS上给界面实现一些像样的动画实在是太轻松了!
Alan Zhang
2018/10/19
1.7K0
iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题
iOS 开发从 UIView 动画说起
毋庸置疑的:在iOS开发中,制作动画效果是最让开发者享受的环节之一。一个设计严谨、精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而言是非常重要的。 本文作为动画文集的第一篇,最开始是想做个qq下拉刷新的水滴动画的制作讲解,但这几天研读《iOS Animations by Tutorials》一书,对iOS动画开发有了更为深刻的了解,于是决定动画篇将从UIView动画开始讲起,以后还会有Layer、Transitioning等在内的动画,希望本文能抛砖引玉,带给大家不一样的理解,下面
春哥大魔王
2018/04/17
1.7K0
iOS 开发从 UIView 动画说起
[UWP]使用离散式关键帧播放动画
以DoubleAnimationUsingKeyFrames为例,它支持四种Double的关键帧,其中EasingDoubleKeyFrame、LinearDoubleKeyFrame和SplineDoubleKeyFrame可以归类为连续式关键帧,而DiscreteDoubleKeyFrame则是离散式关键帧。
dino.c
2020/05/28
7980
iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果
#2. 创建CABasicAnimation实例, 并设置keypart/duration/fromValue/toValue
周希
2019/10/15
1.1K0
MD2关键帧动画
本想用骨骼动画的,无奈.x格式的太过于复杂,而且游戏业里也不怎么用。 只是把它的原理弄明白一些了,但是,我弱小的意志在DirectX SDK那个1000多行的SkinedMesh例子面前顺利地崩溃了,心想,还是先从最基本的关键帧动画开始做吧-_-! 确定文件格式:md2(正好连找都不用找了,老师给了) 以下是我Copy的: MD2文件格式简介 MD2是Quake2中使用的模型文件格式,由于其比较简单,容易实现,所以应用很广,是一种经典的动画模型格式。该文件格式由2部分组成:一部分是文件头,包含了文件ID号、
逍遥剑客
2018/05/21
8180
【CSS3】CSS3 动画 ⑤ ( 动画速度曲线 | 设置动画步长 | 动画匀速执行 | 动画分 2 步执行 | 使用动画步长实现打字机效果 )
CSS3 样式中 , 设置 动画速度曲线 的属性是 animation-timing-function 属性 ;
韩曙亮
2023/10/15
6890
【CSS3】CSS3 动画 ⑤ ( 动画速度曲线 | 设置动画步长 | 动画匀速执行 | 动画分 2 步执行 | 使用动画步长实现打字机效果 )
CAAnimation 核心动画概念一、 CAAnimation二、 CAPropertyAnimation三、CABasicAnimation(基本动画)CAPropertyAnimation的子类
概念 Core Animation可以用在 Mac OS X 和 iOS平台. Core Animation的动画执行过程是在后台操作的.不会阻塞主线程. 要注意的是, Core Animation是直接作用在CALayer上的.并非UIView。 使用步骤: 1、创建一个CAAnimation对象 2、设置一些动画的相关属性 3、给CALayer添加动画(addAnimation:forKey: 方法) 4、停止CALayer动画(removeAnimationForKey: 方法) 注意: 如果
用户2141756
2018/05/18
2K0
iOS动画-CAAnimation使用详解
理解了隐式动画后,显式动画就更加通俗易懂了。区别于隐式动画的特点,显式动画就是需要我们明确指定类型、时间等参数来实现效果的动画。除此之外,我们也可以创建非线性动画,比如沿着任意一条曲线运动等; 我们平时最常用的也是显式动画,不仅系统为我们的视图提供了UIViewAnimationWithBlock的动画封装,而且我们在熟悉了Core Animation的动画属性后也可以很方便的设置显式动画;
梧雨北辰
2019/05/07
2.4K0
iOS动画-CAAnimation使用详解
iOS 动画基础总结篇
美女镇楼.JPG 好久没有更新简书了,最近在看一个动画的第三方,想着是时候可以把动画相关的东西总结下了!对了,上面的美女是龙母!哈哈,最近看权力游戏,感觉很好! -------------------------------------------------进入正题------------------------------------------------------------------ 动画的大体分类(个人总结可能有误) 分类.png UIView 动画 属性动画 [UIView beg
陈雨尘
2018/06/07
1.1K0
《Motion Design for iOS》(十九)
JNWSpringAnimation是Jonathan Willing,一个Mac和iOS开发者,写的一个很棒的动画框架。要理解它为什么棒,让我们先回过头再一次谈谈Core Animation。
Cloudox
2021/11/23
6190
《Motion Design for iOS》(十九)
iOS动画开发之二——UIView动画执行的另一种方式
        上一篇博客中介绍了UIView的一些常用动画,通过block块,我们可以很方便简洁的创建出动画效果:http://my.oschina.net/u/2340880/blog/484457,这篇博客再介绍一种更加传统的执行UIView的动画的方法。
珲少
2018/08/16
5080
【iOS开发】iOS 动画详解
在移动开发中,为了提高用户体验,会用到一些动画来提高应用的视觉效果。让人有眼前一亮的感觉。同时有动画的过渡过程,会让应用看起来不是那么的生硬,更吸引用户。
吴老师
2018/09/05
1.6K0
【iOS开发】iOS 动画详解
iOS动画开发之三——UIView的转场切换 原
        前两篇博客中,我们分别介绍了UIView动画的两种使用方式,分别为,带block的方式:http://my.oschina.net/u/2340880/blog/484457 ,传统的属性配置的方式:http://my.oschina.net/u/2340880/blog/484538。通过UIView动画的类方法,我们可以十分方便的使View某些属性改变的同时拥有动画效果。这篇博客主要讨论View切换的动画操作。
珲少
2018/08/16
9670
iOS动画-定时对UIView进行翻转和抖动
(翻转)方式一: [NSTimer scheduledTimerWithTimeInterval:3.f repeats:YES block:^(NSTimer * _Nonnull timer) { CABasicAnimation* rotationAnimation = [CABasicAnimation animation];; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"t
czjwarrior
2018/05/28
1.3K0
iOS Core Animation的用法
越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低;反之亦然。本文着重介绍Core Animation层的基本动画实现方案。
码客说
2019/10/22
1.4K0
iOS_用Masonry实现 UIView Animation 简单动画
其实只需要在mas_updateConstraints:设置完需要更新的layout之后调用父视图的layoutIfNeeded方法就行。
mikimo
2022/07/20
1.3K0
画线动画、平滑过渡曲线
https://github.com/helloted/Demo_for_WebSite/tree/master/DrawLineDemo
Helloted
2022/06/07
1.2K0
画线动画、平滑过渡曲线

相似问题

在ios中使用关键帧动画时如何设置动画曲线?

68

ios UIView动画曲线

32

暂停UIView的关键帧动画

22

设置动画曲线

10

UIView动画曲线不适用于某些动画

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档