在使用了iOS 7中引入的UIView
动态动画之后,最值得注意的是:
[UIView animateWithDuration: delay: usingSpringWithDamping: initialSpringVelocity: options: animations: completion:];
我想知道是否有等同于'SpringWithDamping/Velocity‘的方法,可以在创建CALayer
动画时直接访问?即通过CATransaction
、CABasicAnimation
或其他方式...
谢谢
发布于 2014-03-12 01:37:17
有一个名为CASpringAnimation
的私有类(已经存在了一段时间了),我非常确定它的背后正在使用它(但我还没有验证它)。不幸的是,它仍然是私有的。
发布于 2014-03-29 01:39:46
正如大卫所说,CASpringAnimation
是私有的(目前?),但我最近在RBBAnimation项目中遇到了RBBSpringAnimation
。
我绝对可以推荐这个,它很容易取代我现有的CABasicAnimation。
发布于 2015-01-07 03:57:02
我编写了一个类来创建CASpringAnimation
实例。它以一种非常简单的方式工作:
通过从UIKit应用编程接口创建弹簧动画,它从视图的层捕获创建的CASpringAnimation
实例,复制它并返回它。
但我不知道以这种方式创建CASpringAnimation
是否安全。
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
}
}
https://stackoverflow.com/questions/22332035
复制相似问题