获取当前的CAAnimation转换值

DCM*_*xxx 9 objective-c calayer ios

我想访问获取某个时间点的变换比例的值.这是动画创作:

    CABasicAnimation *grow = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    grow.toValue = @1.5f;
    grow.duration = 1;
    grow.autoreverses = YES;
    grow.repeatCount = HUGE_VALF;
    [view.layer addAnimation:grow forKey:@"growAnimation"];
Run Code Online (Sandbox Code Playgroud)

我希望,例如当用户按下按钮时,视图的当前大小.记录帧或边界始终返回常量值.任何帮助将非常感激 !

Dun*_*n C 13

在Core Animation中,如果动画在图层上"飞行",则该图层具有第二层属性,称为presentationLayer.该图层包含飞行中动画的值.

编辑

(向Mohammed致敬,他花时间为Swift提供了另一个答案)

使用这样的代码:

Objective-C的

CGFloat currentScale = [[layer.presentationLayer valueForKeyPath: @"transform.scale"] floatValue];
Run Code Online (Sandbox Code Playgroud)

迅速:

let currentScale = layer.presentation()?.value(forKeyPath: "transform.scale") ?? 0.0
Run Code Online (Sandbox Code Playgroud)

请注意,如果图层没有表示层,则上面的Swift代码将返回0.那是你应该编程的失败案例.最好留一个可选的并检查零回报.


cau*_*lux 8

CALayer文档presentationLayer非常清楚地描述:

此方法返回的图层对象提供了当前正在屏幕上显示的图层的近似值.当动画正在进行时,您可以检索此对象并使用它来获取这些动画的当前值.

  • 使用:`CALayer*layer = view.layer.presentationLayer; id scale = [layer valueForKeyPath:@"transform.scale"]; NSLog(@"%@",scale);`我仍然得到常数值.知道为什么吗? (2认同)

Moh*_*ain 5

@Duncan C 答案的快速版本将是:

let currentValue = someView.layer.presentation()?.value(forKeyPath: "transform.scale")
Run Code Online (Sandbox Code Playgroud)

  • 感谢那。(投票。)我已经更新了我的答案,也提供了 Swift 版本。 (2认同)