SpringWithDamping为CALayeranimation?
在iOS 7中引入的UIView
dynamicanimation玩了很多之后,最显着的是:
[UIView animateWithDuration: delay: usingSpringWithDamping: initialSpringVelocity: options: animations: completion:];
我想知道是否有相当于创build一个CALayer
animation时可以直接访问的'SpringWithDamping / Velocity'方法? 即通过CATransaction
, CABasicAnimation
或其他…
谢谢
在iOS9中,苹果终于公开了CASpringAnimation
类。
你可以这样使用它:
let spring = CASpringAnimation(keyPath: "position.x") spring.damping = 5 spring.fromValue = myLayer.position.x spring.toValue = myLayer.position.x + 100.0 spring.duration = spring.settlingDuration myLayer.addAnimation(spring, forKey: nil)
请注意,您无法设置animation持续时间 – 您需要向CASpringAnimation
类请求settlingDuration
持续时间(例如,“弹簧系统需要多less时间”),然后将其设置为animation的持续时间。
检查头文件CASpringAnimation
– 它暴露了一些你可以调整的弹簧系统variables – 刚度,质量等
有(而且已经有一段时间)一个叫做CASpringAnimation
的私人类,我敢肯定它正在使用它(但我没有证实它)。 不幸的是,它仍然是私人的。
正如David所说, CASpringAnimation
是私有的(现在呢?),但是我最近在RBBAnimation项目中遇到了RBBSpringAnimation 。
我可以肯定地推荐这个,作为我现有的CABasicAnimation的替代品,这很容易。
我写了一个类来创buildCASpringAnimation
实例。 它的工作原理非常简单:
通过从UIKit API创build一个弹簧animation,它从视图的图层中CASpringAnimation
创build的CASpringAnimation
实例,将其复制并返回。
但是我不知道App Store是否安全,以这种方式创buildCASpringAnimation
。
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 } }
- 用普通CALayer显示图像或UIImage
- (Swift)如何(animation)显示/隐藏单元格基于UITextfieldinput通过重新加载UITableView?
- 我怎样才能为多个属性创build一个CABasicAnimation?
- <Error>:CGAffineTransformInvert:奇异matrix
- 如何在Scroll上设置UICollectionViewCell的大小,使其中间最大?
- iOS在图像上滑动图像,显示下面的图像。 (A-la jQuery.slide())
- 如何将UIView的右上angular90度旋转/旋转?
- 将自定义animation添加到popToRootViewController
- 核心animation图像序列