Анимация не выполняется при вращении расширенного раздела закрытия табличного представления - PullRequest
0 голосов
/ 25 октября 2018

Я создал расширяемый табличный вид и хочу стрелку, которая указывает влево, когда ячейка не развернута, и вниз, если ячейка развернута.

Первая анимация (чтобы указать стрелку вниз)Работает как шарм.При попытке повернуть назад (при закрытии расширенной ячейки) он просто возвращается в нормальное состояние без какой-либо анимации.В моем cellForRow я делаю это:

cell.image1.rotate(item.opened ? -.pi/2 : 0, duration: 0.4)

У меня есть расширение для него:

extension UIView {
    func rotate(_ toValue: CGFloat, duration: CFTimeInterval) {
        let animation = CABasicAnimation(keyPath: "transform.rotation")
        animation.toValue = toValue
        animation.duration = duration
        animation.isRemovedOnCompletion = false
        animation.fillMode = CAMediaTimingFillMode.forwards
        self.layer.add(animation, forKey: nil)
    }
}

Это работает как шарм за пределами таблицы.Но внутри Tableview он всегда возвращается в нормальное состояние без анимации.Есть идеи, откуда это взялось?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Хорошо, я нашел ответ.Он отскочил назад (без какой-либо анимации) из-за того, как была выполнена моя функция поворота.Выполнение анимации при вводе 0 не сработало, потому что изображение было установлено в ячейке при перезагрузке.Так что нечего было оживлять.Теперь я просто устанавливаю картинку и оживляю ее потом.

if item.opened{
            cell.image1.image = UIImage(named: "back")
            cell.image1.rotate(-.pi/2, duration: 0.3)
} else {
            cell.image1.image = UIImage(named: "down")
            cell.image1.rotate(.pi/2, duration: 0.3)
}
0 голосов
/ 25 октября 2018

Поворот вызова в методе action вместо func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

Попробуйте следующий код.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
    cell.rotateArrow()
}

В CustomTableViewCell

class CustomTableViewCell: UITableViewCell {

    @IBOutlet weak var arrowImageView: UIImageView!

    var isOpened = false

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

    func rotateArrow() {

        isOpened = !isOpened
        arrowImageView.rotate(isOpened ? -.pi/2 : 0, duration: 0.4)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...