如何使用 perform(aSelector: , with: , afterDelay: , inModes: ) 在延迟后暂停 CABasicAnimation
Posted
技术标签:
【中文标题】如何使用 perform(aSelector: , with: , afterDelay: , inModes: ) 在延迟后暂停 CABasicAnimation【英文标题】:How to use perform(aSelector: , with: , afterDelay: , inModes: ) to pause a CABasicAnimation after a delay 【发布时间】:2018-12-14 23:52:39 【问题描述】:我正在使用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
【问题讨论】:
【参考方案1】:首先:perform(_:with:afterDelay:)
中的 anArgument
参数是传递给方法的参数。您问题中的选择器不接受任何参数,但您的 perform
调用正在向它传递一个参数。由于pauseAnim
不接受任何参数,您只需将nil
传递给anArgument
参数。
第二:从您的问题中不清楚pauseAnim
方法的定义位置。除非它是CABasicAnimation
(或其类层次结构中的某处)上的方法,否则您将无法在CABasicAnimation
的实例上调用该方法。如果此方法是在视图控制器或其他对象上定义的,您可以将其用作接收器(可能是self
)。
【讨论】:
以上是关于如何使用 perform(aSelector: , with: , afterDelay: , inModes: ) 在延迟后暂停 CABasicAnimation的主要内容,如果未能解决你的问题,请参考以下文章
iOS 一个新方法:- (void)makeObjectsPerformSelector:(SEL)aSelector;
如何在 XCUITest 中使用 perform(withKeyModifier:block:) 函数执行多选
如何在 C++ 中异步执行 curl_multi_perform()?