CAShapeLayer获取当前比例

时间:2018-06-26 01:08:56

标签: swift xcode transform calayer cashapelayer

我有一个CAShapeLayer,它可以缩放为未知的缩放数字:

myCAShapeLayer.transform = CATransform3DMakeScale(newScale, newScale, 1)

然后在某个时候,我必须将CABasicAnimation从当前比例运行回1:

let animation1 = CABasicAnimation(keyPath: "transform.scale")
animation1.fromValue = myCAShapeLayer.value(forKeyPath: "transform.scale") as! CGFloat
animation1.toValue = 1.0
animation1.duration = 0.5
myCAShapeLayer.add(animation1, forKey: nil)

当我在每个myCAShapeLayer.value(forKeyPath: "transform.scale") as! CGFloat之后登录CATransform3DMakeScale时,尽管在外观上是按比例放大的,但始终为1.0。

我也尝试了myCAShapeLayer.presentation()?.value(forKeyPath: "transform.scale") as! CGFloat及其1.0

1 个答案:

答案 0 :(得分:0)

如果我们转到CATransform3DMakeScale的声明。我们有此信息

/* Returns a transform that scales by `(sx, sy, sz)':
 * t' = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1]. */
@available(iOS 2.0, *)
public func CATransform3DMakeScale(_ sx: CGFloat, _ sy: CGFloat, _ sz: CGFloat) -> CATransform3D

因此,由于我们知道此indices的矩阵transform发生了变化,因此我们可以得到每个值,如下所示,

shape.transform = CATransform3DMakeScale(2.09, 4.88, 3.49)
print(shape.transform.m11)
print(shape.transform.m22)
print(shape.transform.m33)

输出:

2.09
4.88
3.49