Как использовать метод execute (aSelector:, with:, afterDelay:, inModes:) для приостановки CABasicAnimation после задержки
Я использую 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 ответ
Первое: anArgument
аргумент в perform(_:with:afterDelay:)
аргумент для передачи в метод. Селектор в вашем вопросе не принимает никаких аргументов, кроме вашего perform
вызов передает это аргумент. поскольку pauseAnim
не принимает никаких аргументов, вы бы просто передать nil
для anArgument
аргумент.
Второе: из вашего вопроса не ясно, где pauseAnim
Метод определен. Если это не метод на CABasicAnimation
(или где-то в его иерархии классов) вы не сможете вызывать этот метод в экземпляре CABasicAnimation
, Если этот метод определен на контроллере представления или другом объекте, вы бы использовали его как приемник (возможно, self
).