如何使用 perform(aSelector: , with: , afterDelay: , inModes: ) 在延迟后暂停 CABasicAnimation

How to use perform(aSelector: , with: , afterDelay: , inModes: ) to pause a CABasicAnimation after a delay

我正在使用 perform(aSelector: , with: , afterDelay: , inModes: ) 在指定延迟后暂停动画。但是,我不断收到无法识别的选择器错误。我不确定是什么原因造成的。

示例代码(更新):

    class ExpandingSelectedLayer: CALayer, CAAnimationDelegate
    {

    let expandingAnim = CABasicAnimation(keyPath: #keyPath(CALayer.bounds))
expandingAnim.perform(#selector(expandingAnim.pauseAnim), with: nil, afterDelay: 2.0, inModes: [RunLoopMode.commonModes])
    }


    extension CABasicAnimation 
    {
            @objc func pauseAnim()
            {
                print("called pause Anim")
                self.speed = 0

            }
    }

首先:perform(_:with:afterDelay:)中的anArgument参数是传递给方法的参数。您问题中的选择器不接受任何参数,但您的 perform 调用正在向它传递一个参数。由于 pauseAnim 不接受任何参数,您只需将 nil 传递给 anArgument 参数即可。

其次:从您的问题中不清楚 pauseAnim 方法的定义位置。除非它是 CABasicAnimation 上的方法(或其 class 层次结构中的某处),否则您将无法在 CABasicAnimation 的实例上调用该方法。如果此方法是在视图控制器或其他对象上定义的,您将使用它作为接收器(可能 self)。