CALayer исчезает на Custom UITableViewCell NIB после удаления из очереди - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть UITableView, где каждая строка представляет собой пользовательский XIB. Одна строка имеет 4 кнопки UIB, которые являются вариантами выбора, такими как Вопрос, Информация и т. Д. Когда нажимается кнопка UIB, я отображаю анимацию в CALayer. Когда прокручивается табличное представление, CALayer удаляется, то есть анимация исчезает.

При нажатии кнопки я создаю CALayer, и начинается анимация. Как я могу убедиться, что CALayer не исчезает при прокрутке или обновлении таблицы?

class ReasonForSupportTableViewCell: UITableViewCell {

    let animationView = AnimationView()
    var hasButtonBeenTapped = false
    var previousButtonTapped: UIButton? = nil

    //IBOutlets
    @IBOutlet weak var questionButton: UIButton!
    @IBOutlet weak var informationButton: UIButton!
    @IBOutlet weak var crashButton: UIButton!
    @IBOutlet weak var bugButton: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code

        //set initial button
        questionButton.sendActions(for: .touchUpInside)

    }

    func createView(sender: UIButton) {

        //draw the frame
        animationView.frame = CGRect(x: 0, y: 0, width: 75.0, height: 75.0)

        //change the view background color
        animationView.backgroundColor = UIColor.clear
        animationView.isUserInteractionEnabled = false

        //add the view.
        sender.addSubview(animationView)


    }

    @IBAction func buttonTapped(_ sender: UIButton) {


        if previousButtonTapped == nil {

            //you haven't tapped a button yet

            createView(sender: sender)
            animationView.animateTo()

            previousButtonTapped = sender

        } else if previousButtonTapped == sender {

            animationView.removeAnimation()
            previousButtonTapped = nil

        } else {

            animationView.removeAnimation()

            createView(sender: sender)
            animationView.animateTo()

            previousButtonTapped = sender

        }

    }

}

1 Ответ

0 голосов
/ 17 сентября 2018

Подкласс UIButton для добавления CALayer при инициализации, а не при нажатии кнопки. Затем вы можете использовать функцию prepareForReuse(), чтобы остановить любую анимацию.

...