Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Проблема с настройкой делегата CABasicAnimation в Swift 3?

Автор вопроса: Jared GarciaОтветов: 1

Я получаю следующую ошибку

Не удается присвоить значение типа "StarButton" типу "CAAnimationDelegate?"

в последней строке этого блока CABasicAnimation:

 let fillCircle = CABasicAnimation(keyPath: "opacity")
 fillCircle.toValue = 0
 fillCircle.duration = 0.3
 fillCircle.setValue(notFavoriteKey, forKey: starKey)
 fillCircle.delegate = self // this is where the error is thrown

self - это пользовательский класс UIButton. Это не было проблемой в предыдущих версиях Swift... есть предложения по решению?

ОБНОВЛЕНИЕ

Вот загружаемая ссылка на исходный файл класса StarButton для лучшего ознакомления:

https://www.dropbox.com/s/gvc2sky05f4p3au/StarButton.swift?dl=0

  • Вы уверены, что он соответствует протоколу делегата? Fogmeister 29.07.2016
  • UIButton из Apple Docs (developer.apple.com/library/ios /documentation/UIKit/Reference/) не соответствует CAAnimationDelegate. Вы явно сказали, что ваш подкласс был делегатом? См. stackoverflow.com/questions/24024466/ Doc 29.07.2016
  • @Fogmeister хорошо, это часть компонента с открытым исходным кодом, который я схватил, и после изучения файла, похоже, у него нет никаких протоколов ... однако это отлично работало в swift 2.xx Jared Garcia 29.07.2016
  • @Doc хорошо, это часть компонента с открытым исходным кодом, который я схватил, и после изучения файла, похоже, у него нет никаких протоколов .. однако это прекрасно работало в swift 2.xx Jared Garcia 29.07.2016
  • Может быть, Swift 3 сделал приведение протоколов строгим? В любом случае вы все равно должны добавить протокол; если класс поддерживает статус делегата, это должно быть указано в объявлении Doc 29.07.2016
  • как мне добавить протокол? @Док Jared Garcia 29.07.2016

xcodeiosswiftswift3cabasicanimation

Ответы

Ответ 1 · рейтинг 10 · TenaciousJay

Как упоминалось @Doc в комментариях выше, решение состоит в том, чтобы заменить

class StarButton: UIButton {

с участием

class StarButton: UIButton, CAAnimationDelegate {

Казалось бы, протокол CAAnimationDelegate больше не подразумевается и должен быть указан явно.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы