首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CALayer动画的SpringWithDamping?

CALayer动画的SpringWithDamping?
EN

Stack Overflow用户
提问于 2014-03-12 01:22:09
回答 3查看 12K关注 0票数 29

在使用了iOS 7中引入的UIView动态动画之后,最值得注意的是:

代码语言:javascript
复制
[UIView animateWithDuration: delay: usingSpringWithDamping: initialSpringVelocity: options: animations: completion:];

我想知道是否有等同于'SpringWithDamping/Velocity‘的方法,可以在创建CALayer动画时直接访问?即通过CATransactionCABasicAnimation或其他方式...

谢谢

EN

回答 3

Stack Overflow用户

发布于 2014-03-12 01:37:17

有一个名为CASpringAnimation的私有类(已经存在了一段时间了),我非常确定它的背后正在使用它(但我还没有验证它)。不幸的是,它仍然是私有的。

票数 6
EN

Stack Overflow用户

发布于 2014-03-29 01:39:46

正如大卫所说,CASpringAnimation是私有的(目前?),但我最近在RBBAnimation项目中遇到了RBBSpringAnimation

我绝对可以推荐这个,它很容易取代我现有的CABasicAnimation。

票数 4
EN

Stack Overflow用户

发布于 2015-01-07 03:57:02

我编写了一个类来创建CASpringAnimation实例。它以一种非常简单的方式工作:

通过从UIKit应用编程接口创建弹簧动画,它从视图的层捕获创建的CASpringAnimation实例,复制它并返回它。

但我不知道以这种方式创建CASpringAnimation是否安全。

代码语言:javascript
复制
import UIKit

private let SharedCASpringAnimationFactory = CASpringAnimationFactory()

public class CASpringAnimationFactory {
    private var dummyView: UIView

    private init() {
        dummyView = UIView(frame: CGRect.zeroRect)
    }

    private class var shared: CASpringAnimationFactory {
        return SharedCASpringAnimationFactory
    }


     public class func animation(#keyPath: String, dumping: CGFloat, initialSpringVelocity: CGFloat) -> CABasicAnimation {
        let duration = CATransaction.animationDuration()

        UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: dumping, initialSpringVelocity: initialSpringVelocity, options: nil,
            animations: { () -> Void in
                CASpringAnimationFactory.shared.dummyView.bounds = CGRect(origin: CGPoint.zero, size: CGSize(width: 100, height: 100))
            }, completion: nil)

        let dummyLayer = CASpringAnimationFactory.shared.dummyView.layer

        let animations = dummyLayer.animationKeys().map {dummyLayer.animationForKey($0 as String) as CAAnimation}

        let arrestedAnimation = animations.first!.copy() as CABasicAnimation
        arrestedAnimation.keyPath = keyPath
        arrestedAnimation.fromValue = nil
        arrestedAnimation.toValue = nil

        dummyLayer.removeAllAnimations()
        shared.dummyView.bounds = CGRect.zeroRect

        return arrestedAnimation
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22332035

复制
相关文章

相似问题

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