ios - 旋转的 Spring 动画在它开始的地方结束

标签 ios swift spring core-animation

我想为旋转创建一个 CASSpringAnimation,它在开始的地方结束。这里有一些工作代码,不会在它开始的地方结束(但除此之外是我正在寻找的):

func spring(view: UIView) -> CASpringAnimation{
    let animation = CASpringAnimation(keyPath: "transform")
    animation.damping = 0.5
    animation.initialVelocity = 70
    animation.mass = 0.04
    animation.stiffness = 12
    animation.duration = 1.2
    animation.toValue = CATransform3DRotate(CATransform3DMakeAffineTransform(view.transform),
                                            CGFloat(M_PI)/32, // Must be non-zero 😕
                                            0, 0, 1)
    return animation
}

下面是您将如何使用它:

    let animation = spring(view: viewToAnimate)
    viewToAnimate.layer.add(animation, forKey: nil)

当我将角度(在 CATransform3DRotate 中的注释旁边)设置为 0 时,动画不起作用!关于如何获得具有相同开始和结束角度的 Spring 旋转的任何想法?感谢阅读。

最佳答案

通过添加一个 CABasicAnimation 在相同的持续时间内动画到 0°,并通过调整 spring 动画参数,我得到了一些看起来不错的东西(针对 iOS 10 测试):

@IBAction func springButtonTapped(_ sender: UIButton) { // Attach to the view you'd like animated
    let springAnim = spring(view:sender)
    sender.layer.add(springAnim, forKey: nil)

    let correctionAnim = correct(view:sender)
    sender.layer.add(correctionAnim, forKey: nil)
}

func correct(view: UIButton) -> CABasicAnimation{
    let animation = CABasicAnimation(keyPath: "transform")
    animation.duration = 0.3
    animation.toValue = CATransform3DRotate(CATransform3DMakeAffineTransform(view.transform),
                                            0,
                                            0, 0, 1)
    return animation
}

func spring(view: UIView) -> CASpringAnimation{
    let animation = CASpringAnimation(keyPath: "transform")
    animation.damping = 0.0
    animation.initialVelocity = 80
    animation.mass = 0.04
    animation.stiffness = 50
    animation.duration = 0.3
    animation.toValue = CATransform3DRotate(CATransform3DMakeAffineTransform(view.transform),
                                            CGFloat(M_PI)/64,
                                            0, 0, 1)
    return animation
}

关于ios - 旋转的 Spring 动画在它开始的地方结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485391/

相关文章:

ios - 如何根据 View 图层的颜色更改状态栏颜色

ios 共享扩展帖子按钮标题

java - 如何使用 OneToMany 实体有条件地填充外键?

mysql - 如何从 hibernate+spring 应用程序将 csv 文件导入 mysql?

java - Spring boot - 循环bean依赖问题

iPhone Lite版本升级

ios - 如何用 Swift 中的另一个 UIViewController 容器覆盖父 UIViewController 中的 UI 元素?

ios - 将 UITextFiled 的内容保存到 NSUserDefaults

ios - 使用叠加层后 SwiftUI 边缘可见

cocoa - 为什么我无法使用 NSURL (swift) 获得正确的路径