首页 > 其他分享 >CABasicAnimation和CAKeyframeAnimation动画同步问题

CABasicAnimation和CAKeyframeAnimation动画同步问题

时间:2023-07-08 11:24:06浏览次数:32  
标签:动画 CABasicAnimation CAKeyframeAnimation keyFrameAnim let forKey basicAnim

背景

需要做一个扇形带指示器的进度条动画,最初实现的是如下效果

代码如下

func startAnimation() {
    let width = self.frame.width
    let bezierPath = UIBezierPath(arcCenter: CGPoint(x: width / 2, y: radius), radius: radius - trackWidth, startAngle: (1 + angle / 180) * Double.pi, endAngle: -angle / 180 * Double.pi, clockwise: true)
        frontFillLayer.path = bezierPath.cgPath
    // 扇形进度条动画
    let basicAnim = CABasicAnimation(keyPath: "strokeEnd")
    basicAnim.duration = 2
    basicAnim.fromValue = 0
    basicAnim.toValue = 1
    basicAnim.timingFunction = CAMediaTimingFunction(name: .easeIn)
    
    cursorView.layer.removeAnimation(forKey: "cursorKeyframeAnimation")
// 指示器动画 let keyFrameAnim = CAKeyframeAnimation(keyPath: "position") keyFrameAnim.path = bezierPath.cgPath keyFrameAnim.fillMode = .both keyFrameAnim.isRemovedOnCompletion = false keyFrameAnim.duration = 2
// keyFrameAnim.calculationMode = .paced // 加上该行代码,动画同步了 keyFrameAnim.timingFunction = CAMediaTimingFunction(name: .easeIn) frontFillLayer.add(basicAnim, forKey: nil) cursorView.layer.add(keyFrameAnim, forKey: "cursorKeyframeAnimation") }

向同事请教,最后加上keyFrameAnim.calculationMode = .paced,动画同步了。

calculationMode各属性具体含义:

可选属性 含义
linear 默认差值
discrete 逐帧显示
paced 匀速,无视keyTimes
cubic keyValue之间曲线平滑,可用tensionValues,continuityValues,biasVaules调整
cubicPaced keyValue之间平滑差值,无视keyTimes

顺带说一下,如果是在UITableViewCell等可以复用的地方使用了动画,持有一下cell,才能保证reloadData之后,动画哪怕设置了anim.isRemovedOnCompletion = false,仍然会回到初始状态。

总结

总感觉苹果官方开发文档写的不好,没有demo。就是单纯把注释生成了文档。(也可能是我寻找方法不对)

 

标签:动画,CABasicAnimation,CAKeyframeAnimation,keyFrameAnim,let,forKey,basicAnim
From: https://www.cnblogs.com/fwzhou/p/17536932.html

相关文章

  • 推荐一款C#开源的操作简单、免费的屏幕录制和GIF动画制作神器
    前言    今天要给大家推荐一款由C#语言开发且开源的操作简单、免费的屏幕录制和GIF动画制作神器:ScreenToGif 。工具介绍ScreenToGif是一款免费的开源屏幕录制和GIF制作工具。它可以帮助用户捕捉计算机屏幕上的实时动画,并将其保存为高质量的GIF图像格式。该工具不仅......
  • 关键帧与动画
    HTML部分<body><divclass="box"></div></body>css部分//设置背景颜色body{background:#333;}.box{background:#fff;//设置显眼的颜色width:200px;//固定宽,为了看的见height:200px;//固定高,为了看的见position:re......
  • 动画总结
    animation-name:myanimation;//动画名字,指定关键帧的名字。animation-duration:4s;//动画持续时间,间接控制速率,越长越慢!animation-iteration-count:infinite;//重复次数,可以填数字也可以填infinite,infinite代表无限重复animation-timing-function:linear;//动画速......
  • CSS|动画与效果
    一.过渡1什么是过渡过渡可以为一个元素在不同状态之间切换的时候定义不同的过渡效果2应用场景当鼠标hover的时候,有一个明显的突出效果,但是又不会显得特别生硬3使用1)语法transition:属性时长缓动函数属性:可以是具体的某个属性,或者是全部(all)时长:变......
  • WPF 在MVVM模式下应用动画
    一个简单的需求:当程序发生异常时候,在界面上动画显示异常信息。这个需求看似简单,只需要try……catch到异常,然后把异常的信息写入界面就OK了。但在MVVM时,就不是这么简单了。MVVM模式下,追求前后端的分离。然后catch到的异常,也只能在后台代码中。如果传递到前台呢?这自然就想到了Bin......
  • AE脚本丨自适应底栏边框文字标题动画 Box It v1.0&使用教程
    这个AE脚本BoxIt主要是用于快速创建复杂的动态文本框,非常适合下第三标题、标签、聊天气泡、多个文本框等。 去下载它的主要特点有:1.简单易用,无需键入任何代码,通过简单的拖放和调整参数即可创建动态文本框2.包含多种预设选项,如简单、标准、粗体、标签、聊天气泡等......
  • vue 基于 CountUp.js,可用于创建显示数字数据的动画。
    地址:https://github.com/xlsdg/vue-countup-v2Installation$npminstall--savecountup.jsvue-countup-v2Usage<template><divclass="iCountUp"><ICountUp:delay="delay":endVal="endVal"......
  • FFmpeg 已支持动画 JPEG-XL
    导读除了Apple宣布在其Safari浏览器中支持JPEG-XL图像格式之外,FFmpeg也宣布现已支持解码动画JPEG-XL文件。去年以来,FFmpeg已经能够使用libjxl库解码静态JPEG-XL图像,随着本周在FFmpeg6.1发布之前合并的提交,现在它也能够处理动画/多帧JPEG-XL内容。......
  • 直播平台制作,使用动画设置ProgressBar进度
    直播平台制作,使用动画设置ProgressBar进度布局文件: <?xmlversion="1.0"encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  ......
  • R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图|附代码数据
    全文链接:http://tecdat.cn/?p=9766原文出处:拓端数据部落公众号最近我们被客户要求撰写关于动态可视化的研究报告,包括一些图形和统计输出。 在某些情况下,你可能希望通过在每帧中添加数据并保留先前添加的数据来进行动画处理。现在,我们将通过制作点线图的动画来探索。以下是制......