我正在使用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

            }
    }

最佳答案

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

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

关于ios - 如何使用perform(aSelector:,with:,afterDelay:,inModes:)在延迟后暂停CABasicAnimation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53788323/

10-09 02:22