swift - CAAnimationGroup 计时
问题描述
这对我来说很奇怪
对于以下代码(其中 myView 是情节提要上的彩色 UIView),时间似乎不对。
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let round = CABasicAnimation(keyPath: "cornerRadius")
round.fromValue = 0.0
round.toValue = 50.0
round.duration = 2.0
round.beginTime = 0.0
round.fillMode = CAMediaTimingFillMode.backwards
round.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn)
myView.layer.cornerRadius = 50.0
let scaleDown = CABasicAnimation(keyPath: "transform.scale")
scaleDown.fromValue = 1.0
scaleDown.toValue = 0.25
scaleDown.beginTime = 2.0
scaleDown.duration = 2.0
let rotate = CABasicAnimation(keyPath: "transform.rotation")
rotate.fromValue = .pi/10.0
rotate.toValue = 0.0
rotate.beginTime = 4.0
rotate.duration = 2.0
let hideAnimation = CABasicAnimation(keyPath: "hidden")
hideAnimation.fromValue = NSNumber(value: 1)
hideAnimation.toValue = NSNumber(value: 0)
hideAnimation.beginTime = 4.0
hideAnimation.duration = 2.0
let imageGroupAnimations = CAAnimationGroup()
imageGroupAnimations.animations = [round, scaleDown, rotate, hideAnimation]
imageGroupAnimations.duration = 6.0
imageGroupAnimations.repeatCount = 1
imageGroupAnimations.beginTime = 0.0
myView.layer.add(imageGroupAnimations, forKey: nil)
}
}
动画组的持续时间是 6.0,所以我希望形状被隐藏(因为我希望它在 4 到 4 + 2 (6.0) 秒之间隐藏。
但是,形状出现并结束动画(完成旋转)。我已经尝试在每个 beginTime 之前使用 CACurrentMediaTime() - 但这也没有预期的结果。
预期结果:
0-2 秒动画角半径变化
2-4秒动画比例变换
4-6 秒动画旋转(对用户隐藏)
如何使形状在 4 - 6 秒后消失?
解决方案
如果要在视图上显示淡出效果,请使用
let hideAnimation = CABasicAnimation(keyPath: "opacity")
代替
let hideAnimation = CABasicAnimation(keyPath: "hidden") //bad!
如果您不希望动画在完成后重置您的值,只需添加
imageGroupAnimations.fillMode = .forwards
imageGroupAnimations.isRemovedOnCompletion = false
给你的CAAnimationGroup
推荐阅读
- dependency-injection - 无法在某些控制器 Typo3 上注入存储库
- android - 突然找不到安卓设备
- python - 使用存储在与变量名称匹配的另一个数据框中的字典替换 Pandas 数据框中的值
- react-native - React Native Circular Progress on Long Press
- c++ - 如何解决调用 size() 时 Visual Studios 无法识别数组的类类型的问题?
- swiftui - 在 SwiftUI 中重新创建蒙版模糊效果
- r - 在 corrplot 的下三角形上为 P 值添加颜色
- flash - 我们可以在 2021 年 1 月 12 日之后播放 Flash 客户端的虚拟机/容器吗?
- javascript - 在 JS 对象中查找重复或虚假值 - Javascript
- java - 必须验证页面上存在的图像