首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >渐变动画-减速和提速

渐变动画-减速和提速
EN

Stack Overflow用户
提问于 2016-12-08 12:59:39
回答 2查看 452关注 0票数 1

我正在制作一部CAGradientLayer的动画,类似于苹果在iPhone主屏幕上的“滑动解锁”动画。然而,我的动画有点不同,因为它在某些点上减速和加速。

对如何减慢/加快渐变有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-12-08 16:04:32

大多数情况下,在动画软件中,这种效果不是通过动画渐变的颜色位置来创建的,而是通过将整个渐变移动到文本下面,将文本视为蒙版来创建的。一般来说,这会更有效,因为重新绘制渐变的代价很高。

这意味着将渐变绘制到材质(上下文)中,然后将其渲染到图像中,并将图像移动到文本下面,而文本则遮挡住该图像。在游戏的传统中,使用两个图像,所以他们完美地滚动,无缝地给你正确的效果。

然后,您只需加快或减慢作为渐变的图像的位置动画。

我希望这能对你有所帮助。尽管你现在做事情的方式有一段距离。

这里有一篇关于使用CATextLayers作为掩码的小博客文章:https://littlebitesofcocoa.com/245-masking-views-with-text-using-catextlayer

这里是位置的动画曲线,以获得您想要的结果:

这会产生这样的结果:

更新:

这就是它的机械外观,从表面材料中切出一个文本的“洞”,下面通过一个渐变纹理,上面的屏幕截图中显示了动画曲线:

票数 2
EN

Stack Overflow用户

发布于 2016-12-08 13:25:35

也许可以在每个动画之间暂停(或延迟)?在您的didMoveToWindow()中的代码之间尝试一个变体:

代码语言:javascript
复制
func delay(_ delay:Double, closure:@escaping ()->()) {
    DispatchQueue.main.asyncAfter(
        deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41032073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档