如何使用RxSwift在可扩展单元格上制作流畅的动画

时间:2017-06-08 14:16:07

标签: ios swift animation rx-swift

我有像创建可扩展表视图单元这样的常规任务。 由于我的模块是使用RxSwift编写的,因此我决定将此框架用于特定任务。 虽然,我的解决方案满足功能要求,但我想改进UI。到目前为止,当我取消选择我的手机时,我的动画非常粗糙。

以下是我的布局:

TableViewCell
-ContentView
--StackView
---MainView
---ExandableView

因此,当我点击一个单元格时,我的ExpandableView正在建立。

class ExpandableCell: UITableViewCell {

    @IBOutlet weak var expandableView: UIView!
    @IBOutlet weak var faqArrowImageView: UIImageView!

    var isExpanded:Bool = false
    {
        didSet
        {
            self.expandableView.isHidden = !self.isExpanded
            self.faqArrowImageView.image = self.isExpanded ? UIImage(named: "faq-arrow") : UIImage(named: "faq-arrow-rotated")
        }
    }
} 

在我的VC中,我有这样的订阅,它处理主要的业务逻辑

faqTableView.rx.itemSelected
    .subscribe(onNext: { [unowned self] indexPath in

        print("Index path is \(indexPath.row)")

    let cell = self.faqTableView.cellForRow(at: indexPath) as! ExpandableCell
        switch cell.isExpanded {
        case true:
            self.expandedRows.remove(indexPath.row)
        case false:
            self.expandedRows.insert(indexPath.row)
        }

        cell.isExpanded = !cell.isExpanded
        self.faqTableView.beginUpdates()
        self.faqTableView.endUpdates()
}).addDisposableTo(disposeBag)

正如我所说,我对隐藏我的观点进行粗略处理。 以下是此问题的演示https://www.dropbox.com/s/1h18a2u1mpuyiuo/animation.gif?dl=0

此外,我尝试在我的变量的didSet中以下列方式添加动画。 但是,stil,它也没有帮助我

    UIView.animate(withDuration: 10.2, delay: 10.2, options:
        UIViewAnimationOptions.curveEaseOut, animations: {
            self.faqArrowImageView.image = UIImage(named: "faq-arrow-rotated")
    }, completion: { finished in
        print("animted completed")
    })
} else {
    self.faqArrowImageView.image = UIImage(named: "faq-arrow")
}

在下列情况下你能给我什么建议?

修改 好吧,如果有人面临这个问题,我只需要改变

 self.faqTableView.beginUpdates()
 self.faqTableView.endUpdates()

self.faqTableView.reloadData()

0 个答案:

没有答案