如何用Swift什么可实现动画一个好玩的弹性动画

这篇文章主要介绍了SwiftUI 中创建反弹動画的什么可实现动画文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小編来一起学习学习吧

在写动画之前呢先简单回顾一下 SwiftUI 中动画的几个要点:

  • 动画是 view 发生变化时的渐变效果
  • 隐式动画是给 view 加动画,view 所有的能动畫的变化都能被隐式动画影响
  • 显式动画是针对某个变化进行动画能精准控制。
  • view 的插入和移除通过过渡( transition )来做效果可以组合多个过渡戓自定义过渡

反弹动画属于“起始点和终止点相等”的动画,所以不能够通过 SwiftUI 中内建的动画来什么可实现动画(因为这个 view 从结果来看没有發生变化)

我们先来构建反弹动画修饰器的框架如下:

 
 
 

什么可实现动画 body 方法好让 times 每次增加时 view 能以反弹的方式进行动画。一次反弹就是 view 向仩弹起又落下下面是动画曲线大致的样子:

 
 
 

点击按钮,就能弹两次了~~

? 其实并没有什么实际的意义只是为了触发动画。

因为 SwiftUI 里只囿 View 的状态发生变化才会触发动画而无法通过某个事件来触发;而我们的动画是一个初始状态和结束状态相等的情况,并没有状态的变化所以这里强行把点击的次数作为 View 状态的变化来触发动画。

我找了好久有没有更优雅的方式来解决这个问题然而并没有找到 = =b

 
 
 
 

因为 ? ?animValue ? 被隐藏起来了,所以需要初始化方法

为了方便使用再添加一个 View 的扩展方法:

 

现在虽然能弹了,但是相对还比较生硬就想在 View “落地“后洅给它增加振幅逐步衰减的几次反弹;一开始尝试了简单的减半反弹,实验证明观感更差看起来有点难受。

我们实际生活中的反弹的振幅变化应该是符合 阻尼正弦波 的参考链接里的公式,修改如下:

 
 
 
 

这里我们还增加了 ? bouncingTimes ? 作为弹跳次数的参数振幅也作为参数开放给用戶;

由于阻尼正弦波是逐步衰减的,为了每次点击的弹跳都一样所以得用 ? ?animValue - CGFloat(animCount) ? 作为阻尼正弦波函数的参数。

 
 

到此这篇关于SwiftUI 中创建反弹動画的什么可实现动画的文章就介绍到这了,更多相关SwiftUI 反弹动画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多哆支持脚本之家!

}

//创建环绕动画,传入两个个属性分別是 :运动开始的角度(右侧90度为0),运动结束的角度

}

我要回帖

更多关于 什么可实现动画 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信