Как использовать метод 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).

Другие вопросы по тегам