Get current CAAnimation transform value

前端 未结 4 701
感情败类
感情败类 2021-01-11 23:11

I want to access get the value of the transform scale at a point in time. Here is the animation creation :

    CABasicAnimation *grow = [CABasicAnimation ani         


        
4条回答
  •  难免孤独
    2021-01-12 00:01

    In Core Animation if an animation is "in flight" on a layer, the layer has a second layer property known as presentationLayer. That layer contains the values of the in-flight animation.

    Edited

    (With a nod to Mohammed, who took the time to provide an alternate answer for Swift)

    Use code like this:

    Objective-C

    CGFloat currentScale = [[layer.presentationLayer valueForKeyPath: @"transform.scale"] floatValue];
    

    Swift:

    let currentScale = layer.presentation()?.value(forKeyPath: "transform.scale") ?? 0.0
    

    Note that the Swift code above will return 0 if the layer does not have a presentation layer. That's a fail case that you should program for. It might be better to leave it an optional and check for a nil return.

    Edit #2:

    Note that as Kentzo pointed out in their comment, reading a value from an in-flight animation will give you a snapshot at an instant in time. The new value of the parameter you read (transform.scale in this example) will start to deviate from the reading you get. You should either pause the animation, or use the value you read quickly and get another value each time you need it.

提交回复
热议问题