Как использовать метод execute (aSelector:, with:, afterDelay:, inModes:) для приостановки CABasicAnimation после задержки - PullRequest
0 голосов
/ 15 декабря 2018

Я использую 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 Ответ

0 голосов
/ 15 декабря 2018

Первое: аргумент anArgument в perform(_:with:afterDelay:) - это аргумент, передаваемый методу.Селектор в вашем вопросе не принимает никаких аргументов, но ваш вызов perform передает ему аргумент.Поскольку pauseAnim не принимает никаких аргументов, вы просто передаете nil для аргумента anArgument.

Второе: из вашего вопроса неясно, где определен метод pauseAnim.Если это не метод CABasicAnimation (или где-то в его иерархии классов), вы не сможете вызывать этот метод в экземпляре CABasicAnimation.Если этот метод определен на контроллере представления или другом объекте, вы бы использовали его вместо получателя (возможно, self).

...