CAShapeLayer 路径弹簧动画不“过度”

2024-01-17

我正在尝试使用 CASpringAnimation 对 CAShapeLayer 路径进行动画处理。预期的结果是形状之间的“变形”,表现出“弹性”。

我有一个圆形和方形路径之间的基本代码示例,如下所示,但最终结果是一个弹簧动画,它不会“超出”最终的较大方形路径,这是预期的行为。

我的代码是:

let springAnimation = CASpringAnimation(keyPath: "path")
springAnimation.damping = 1
springAnimation.duration = springAnimation.settlingDuration
springAnimation.fromValue = standardCirclePath().cgPath
springAnimation.toValue = standardSquarePath().cgPath

circleLayer.add(springAnimation, forKey: nil) // Where circleLayer (red background) is a sublayer of a basic UIView in the frame (blue background)

我有我的路从这个答案 https://stackoverflow.com/questions/24788283/ios-animate-morph-shape-from-circle-to-square.

有没有办法使用 CASpringAnimation 来实现 CAShapeLayer 路径转换?否则,还有什么替代方案?


你好,我一直在研究你的问题,这是我的结果,gif 上的故障是因为我的 gif 转换器非常糟糕

这是代码

class ViewController: UIViewController {

    @IBOutlet weak var animatableVIew: UIView!
    var isBall = false
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    @IBAction func startAnimation(sender: AnyObject) {

        isBall = !isBall

        let springAnimation = CASpringAnimation(keyPath: "cornerRadius")
        let halfWidth = animatableVIew.frame.width / 2
        let cornerRadius: CGFloat = isBall ? halfWidth : 0
        springAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
        springAnimation.fromValue = isBall ? 0 : halfWidth ;
        springAnimation.toValue = cornerRadius;
        springAnimation.damping = 7
        springAnimation.duration = springAnimation.settlingDuration
        animatableVIew.layer.cornerRadius = cornerRadius

        let springAnimation2 = CAKeyframeAnimation(keyPath: "transform.scale")
        springAnimation2.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        springAnimation2.values = [1,0.9,1.4,0.8,1]
        springAnimation2.keyTimes = [ 0, (1 / 6.0), (3 / 6.0), (5 / 6.0), 1 ];
        springAnimation2.duration = springAnimation.settlingDuration * 0.5

        let groupSpringAnimation = CAAnimationGroup()
        groupSpringAnimation.animations = [springAnimation,springAnimation2]
        groupSpringAnimation.duration = springAnimation.settlingDuration
        groupSpringAnimation.beginTime = 0;
        animatableVIew.layer.addAnimation(groupSpringAnimation, forKey: "group")

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

我希望这可以帮助你

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAShapeLayer 路径弹簧动画不“过度” 的相关文章

  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j
  • iOS后台获取时间限制崩溃

    我已经设置了背景获取 使用大纲NSScreencast 第 92 集 http nsscreencast com episodes 92 background fetch BOOL application UIApplication app
  • Swift:如何让游戏中的角色只有落地后才能跳跃?

    我正在开发一款游戏 我的角色可以从一个陆地跳到另一个陆地 我已经把所有事情都做好了 除了我剩下的问题是 如果你继续点击屏幕 他可以永远跳跃 我希望他必须先落地才能再次跳跃 import SpriteKit import GameplayKi
  • iPhone:每日本地通知

    我正在尝试实现本地通知 这就是我所设置的 Current date NSDate date NSDate date Add one minute to the current time NSDate dateToFire date date
  • UICollectionView 设置列数

    我刚刚开始学习 UICollectionViews 我想知道是否有人知道如何指定集合视图中的列数 默认设置为 3 iPhone 肖像 我查看了文档 似乎找不到简洁的答案 对于 Swift 5 和 iOS 12 3 您可以使用4 以下实现为了
  • 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

    我正在从 Java 切换到 Objective c 但遇到了一些困难 我已经搜索过这个问题但没有取得太大成功 我有一个存储 NSMutableArrays 的 NSMutableArray 如何向数组添加数组 您可以在数组中存储对另一个数组
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 在从文件加载之前,如何将 bean 注入到 ApplicationContext 中?

    我有一个FileSystemXmlApplicationContext我希望 XML 中定义的 bean 将未在 Spring 中声明的 bean 作为构造函数参数 例如 我想做
  • 在 Xcode 中查找未使用的文件

    我最近开始开发一个新应用程序 它基本上是我以前制作的应用程序的副本 但做了一些更改 为了制作这个新应用程序 我复制了旧应用程序并删除了一些不需要的内容 我想知道 有没有办法知道 Xcode 中正在使用哪些类文件 或者有什么关于如何查找未使用
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • iOS - 在相机上放置自定义叠加层(垂直对齐)。顶部黑条的大小

    我正在寻找以下问题的编程解决方案 我想在相机 iOS 上绘制自定义叠加层 我希望它位于相机输出视图的垂直中央 我已经完成了相对于屏幕而不是相机图片居中绘制自定义视图 为此 我需要获得顶部黑条的大小 我怎么才能得到它 顶部和底部栏的大小不相等
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • AdMob 和 DFP 广告联盟之间的区别?

    我正在尝试在我的 iOS 应用程序上显示横幅广告和插页式广告 但现在我对广告网络感到困惑 AdMob 与 DFP 有何不同 哪一种更适合投放广告 有人可以提供帮助吗 提前致谢 AdMob 是一个广告网络 作为发布商 您可以通过展示从网络投放
  • Swift - 保存在 TableView 中选择的复选标记

    我对 Swift 相当陌生 并且在 TableView 多重选择方面遇到问题 我有多个选择 可以用复选标记进行检查 类似于待办事项列表 当我检查项目时 我希望能够返回 ListView 并保存我的选择 我假设将其保持在已保存状态的代码将位于
  • 如何从第二个视图弹回到根视图?

    我使用 2 将 3 个视图 根视图 第 1 个视图 第 2 个视图 连接在一起modal在 Apple Watch 故事板中继续 1 在根视图中 按下 保存 按钮后 将显示第一个模态视图 2 在第一模态视图中 一旦按下 500 按钮 将显示
  • iOS:如何创建核心数据库的备份副本?以及如何导出/导入该副本?

    我想为我的应用程序的用户提供创建核心数据数据库备份的可能性 特别是在他切换到新设备等情况下 我该怎么做呢 特别是如何重新导入该文件 我的意思是 假设他制作了数据库的备份副本 然后更改了大量内容并想要重置为以前保存的备份副本 我该怎么做呢 T
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • 获取所有ios应用程序的全局列表[重复]

    这个问题在这里已经有答案了 我想对苹果应用商店进行一些全球统计 一个瓶颈是至少获取所有当前活动应用程序的 ID 这 9 位数字 有谁知道如何获取 iOS 应用商店中当前活动应用程序的所有 id 的完整列表 更好的是特定类别的所有 ID 例如
  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空

随机推荐

  • 如果应用程序未至少启动一次,广播接收器将无法在 ICS 中工作

    这个问题在堆栈溢出中被问过几次 但还没有解决方案 我有一个广播接收器 用于接收 USB 连接操作 广播接收器的责任是 如果我得到意图启动我的应用程序 在清单文件中 我添加了接收器 我在 GingerBread 中也有同样的逻辑 但 ICS
  • 暂停 UIImageview 动画

    我想暂停UIImageView animation根据我的研究发现 您可以停止图像的动画 但无法暂停序列 通过调用语句stop animating on the UIImageView然后它停止动画并清空图像视图 要暂停 UIImages
  • 片段实例化崩溃

    我的一些用户遇到了崩溃 这是 Google Play 开发者控制台上的崩溃报告中显示的错误 Unable to start activity ComponentInfo com havens1515 autorespond com have
  • 表面网格到体积网格

    我有一个使用 Meshlab 从点云生成的封闭表面网格 我需要为此获得一个体积网格 这样它就不是一个空心物体 我想不通 我需要获取 stl 文件进行打印 谁能帮我获得体积网格 我更喜欢简单的解决方案而不是复杂的算法 给定一个定向的水密表面网
  • GKE Ingress-GCE 是否支持压缩?

    我的后端在 Rocket Rust 中没有内置压缩功能 因此 它依赖于代理来压缩它 虽然 nginx 入口控制器支持它 但我想默认的入口控制器是否也有它 因为它具有高可用性 如果没有的话应该如何设置呢 更新 2018 01 31 它看起来像
  • 如何从 R 中拟合线性 b 样条回归中提取基础系数?

    以下面的一结 一级样条为例 library splines library ISLR age grid seq range Wage age 1 range Wage age 2 fit spline lm wage bs age knot
  • Youtube API v3,topicId 恢复

    Youtube API v3 使开发人员能够检索有关特定视频的特定信息 在返回的数据中 有一个称为topicDetails可以按照以下示例请求 Request https www googleapis com youtube v3 vide
  • Angular 无法使用不同数量的子级重新附加 ActivatedRouteSnapshot

    这是我在 NativeScript Angular 项目中的路由 const routes Routes path redirectTo tabs default pathMatch full path tabs loadChildren
  • 如何获取 AJAX 发送的 JSON 以与 PHP 配合使用

    在我寻求让 PHP 可以使用这个 JSON 的过程中 我遇到了一个又一个的障碍 所以我想知道是否有人可以帮助我 我将 JSON 存储在变量 DivisionsJSON 中 var divisionsJSON JSON stringify d
  • 尝试创建一个删除按钮以从列表中删除项目

    我正在尝试制作一个删除按钮 该按钮将从 order List 中删除项目 我制作的 removeButton 按钮仅从列表中删除一项 然后会显示错误消息 menulist listOrder new menulist order List
  • is not null 和 <>' ' 之间有什么区别

    看看我的例子 两个代码有什么区别 Select name from customers where name is not null Select name from customers where name lt gt 他们做完全不同的事
  • 在 DOM 对象上设置属性时如何避免 no-param-reassign

    我有一个方法 其主要目的是在 DOM 对象上设置属性 function el el expando 我使用 AirBnB 的代码风格 这使得 ESLint 抛出一个no param reassign error 错误分配给函数参数 el n
  • 受保护的构造函数和可访问性

    如果子类位于不同的包中 为什么我们不能使用受保护的构造函数实例化一个类 如果可以访问受保护的变量和方法 为什么相同的规则不适用于受保护的构造函数 pack1 package pack1 public class A private int
  • 此处不应引用 Java 方法

    究竟如何使用 Java 8 链接实例的方法引用 例子 Collections sort civs Comparator comparing Civilization getStrategy getStrategLevel getStrate
  • 为什么继承的接口无法在通用上下文中转换为其基接口?

    我正在尝试在我的 C 项目中实现接口继承系统 但无法让它工作 这是一个简化版本 public interface BaseInterface public abstract class AbstractClass
  • UITableView 检测选定的单元格?

    我的应用程序中有多个 UITableView 是否有一种方法可以检测用户在该列中选择了哪个单元格 行 还可以通过编程方式取消选择单元格 行吗 Thanks 获取表当前选择的索引路径 NSIndexPath path tableView in
  • Magento 将控制器复制到本地

    当我复制一些core Mage Adminhtml Block 文件到local Mage Adminhtml Block 一切正常 但如果我将控制器复制到local Mage Adminhtml controllers 核心控制器仍然有效
  • 一对一的聊天记录,包括开火和打拳

    我已经在我的系统中安装了 open fire 通过使用邮递员工具我可以创建用户 通过使用 smack 我也可以将消息发送给其他用户 但问题是我不知道如何获取两个用户之间的聊天历史记录 这意味着如果我发送发件人和收件人用户名 我需要获取以前的
  • Javascript 中的简单 HTML 清理器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个用 JavaScript 编写的简单 HTML 清理程序 它不需要 100 XSS 安全
  • CAShapeLayer 路径弹簧动画不“过度”

    我正在尝试使用 CASpringAnimation 对 CAShapeLayer 路径进行动画处理 预期的结果是形状之间的 变形 表现出 弹性 我有一个圆形和方形路径之间的基本代码示例 如下所示 但最终结果是一个弹簧动画 它不会 超出 最终