如何使用 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
)。
我正在使用 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
)。